
💡 1분 핵심 요약 (TL;DR)
- ✅ 프로세스 간 통신(IPC) — 독립적으로 실행되는 프로세스들이 데이터를 주고받는 것, 범위에 따라 내부·프로세스 간·네트워크 통신으로 구분
- ✅ 통신 방향 — 양방향(소켓), 반양방향(무전기), 단방향(전역 변수·파이프)으로 분류
- ✅ 동기화 여부 — 대기가 있는 통신(파이프·소켓)과 대기가 없는 통신(전역 변수·파일)으로 구분
- ✅ 임계구역(critical section) — 공유 자원에 접근하는 코드 영역으로, 여러 프로세스가 동시에 들어가면 문제가 생기는 부분
- ✅ 해결 조건 — 상호 배제·한정 대기·진행 3가지를 모두 만족해야 함
- ✅ 해결 방법 — 데커·피터슨 알고리즘에서 세마포어·모니터로 발전
운영체제에서 유난히 헷갈려하는 단원 중 하나가 바로 프로세스 동기화입니다. 프로세스들이 왜 서로 통신을 해야 하는지, 그 통신은 또 어떻게 나뉘는지, 그리고 여러 프로세스가 동시에 같은 자원에 접근했을 때 생기는 문제는 어떻게 풀어내는지까지 차근차근 정리해보겠습니다. 강의노트 3개 분량(프로세스 간 통신 → 통신의 종류 → 공유 자원과 임계구역)을 순서대로 따라가면 어렵지 않게 흐름이 잡힐 것입니다.
01 프로세스 간 통신(IPC)이란 무엇일까
독립적으로 움직이는 프로세스들이 데이터를 주고받는 방법
📖 프로세스 간 통신(Inter-Process Communication, IPC)
프로세스는 시스템 안에서 혼자 독립적으로 실행되기도 하지만, 때로는 다른 프로세스와 데이터를 주고받기도 합니다. 이렇게 프로세스가 다른 프로세스와 데이터를 주고받는 것을 프로세스 간 통신(IPC)이라고 부릅니다.
IPC는 통신이 일어나는 범위에 따라 세 가지로 나눌 수 있습니다. 같은 프로세스 안의 스레드끼리인지, 같은 컴퓨터 안의 다른 프로세스끼리인지, 아니면 네트워크로 연결된 다른 컴퓨터의 프로세스끼리인지에 따라 쓰는 방식이 달라집니다. 아래 표로 정리해보겠습니다.
| 구분 | 설명 | 통신 방식 |
| 프로세스 내부 데이터 통신 | 하나의 프로세스 안에 스레드가 2개 이상 존재할 때의 통신 | 전역 변수, 파일 (운영체제 도움 없이 진행) |
| 프로세스 간 데이터 통신 | 같은 컴퓨터에 있는 여러 프로세스끼리의 통신 | 공용 파일, 파이프, 소켓, 원격 프로시저 호출 |
| 네트워크를 이용한 데이터 통신 | 여러 컴퓨터가 네트워크로 연결돼 있을 때의 통신 | 소켓(네트워킹), 원격 프로시저 호출(RPC) |

02 통신 방향에 따른 분류
데이터가 양쪽으로 가는지, 한쪽으로만 가는지에 따른 구분
이번에는 데이터가 어느 방향으로 흐르는지를 기준으로 나눠보겠습니다. 양방향, 반양방향, 단방향 통신, 이렇게 세 가지로 구분되는데, 일상에서 쓰는 비유로 생각하면 훨씬 쉽게 와닿을 것입니다.
| 분류 | 설명 | 예시 |
| 양방향 통신 Duplex |
데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조. 일반적인 통신은 거의 다 여기에 속함 | 일반 전화 통화, 소켓 |
| 반양방향 통신 Half-duplex |
양쪽으로 전송은 가능하지만 동시에는 안 되고, 한 시점엔 한쪽 방향으로만 전송 가능한 구조 | 무전기 |
| 단방향 통신 Simplex |
한쪽 방향으로만 데이터를 전송할 수 있는 구조 | 모스 신호, 전역 변수, 파이프 |

03 동기화 여부에 따른 분류
대기가 있는 통신 vs 대기가 없는 통신
전역 변수를 사용하는 통신에는 큰 문제가 하나 있습니다. 받는 쪽이 데이터가 언제 도착할지 전혀 알 수 없다는 점입니다. 그래서 받는 쪽은 전역 변수의 값을 계속 반복해서 확인해야 하는데, 이렇게 상태가 바뀌었는지 보려고 반복문을 무한히 돌리며 기다리는 것을 바쁜 대기(busy waiting)라고 합니다.
⚠️ 바쁜 대기(Busy Waiting)란
데이터가 도착했는지 확인하려고 CPU가 반복문을 계속 돌리며 점검하는 것입니다. 메신저 알림이 없어서 새 메시지가 왔는지 계속 새로고침하는 모습과 비슷하다고 생각하면 됩니다. 이렇게 하면 CPU 자원을 낭비하게 된다는 점이 단점입니다.
이 문제를 해결하려고 등장한 개념이 바로 동기화(synchronization)입니다. 메신저에서 새 메시지가 왔다고 알려주는 알림 기능이 동기화의 대표적인 예라고 보면 됩니다. 그리고 이 동기화 기능을 지원하느냐에 따라 IPC는 다시 두 가지로 나뉩니다.
| 대기가 있는 통신 Blocking / Synchronous · 동기화를 지원하는 통신 방식 · 데이터를 받는 쪽은 도착할 때까지 자동으로 대기 상태에 머무름 · 예 : 파이프, 소켓 |
대기가 없는 통신 Non-blocking / Asynchronous · 동기화를 지원하지 않는 통신 방식 · 받는 쪽이 바쁜 대기로 직접 도착 여부를 확인해야 함 · 예 : 전역 변수, 파일 |
대기가 없는 통신은 통신 오버헤드(추가로 드는 처리 부담)는 적지만, 바쁜 대기처럼 직접 처리해야 할 작업이 많다는 단점이 있습니다. 전역 변수처럼 공유 메모리를 이용해도 보내는 쪽과 받는 쪽이 자동으로 동기화되는 것은 아니라는 점도 기억해 둘 필요가 있습니다.
04 실제로 쓰이는 IPC의 종류
전역 변수 · 파일 · 파이프 · 소켓
지금까지 살펴본 분류를 실제 구현 방식으로 옮겨보면 아래 네 가지로 정리할 수 있습니다. 각각 방향성과 동기화 지원 여부가 다르다는 점에 주목하면서 보면 훨씬 외우기 쉬울 것입니다.
| 종류 | 특징 | 방향성 | 동기화 |
| 전역 변수 | 공동으로 관리하는 메모리에 값을 쓰고 읽어서 통신 | 단방향 | 미지원 |
| 파일 | open → write/read → close 과정으로 입출력 관리 프로세스와 통신 | 단방향 | 미지원 |
| 파이프 | 운영체제가 제공하는 동기화 통신 방식. 양방향 통신을 하려면 파이프 2개 필요 | 단방향 | 지원 |
| 소켓 | 네트워크로 연결된 다른 컴퓨터의 프로세스와 통신. 1개로 양방향 통신 가능 | 양방향 | 지원 |
📖 시험·면접에 자주 나오는 IPC 방식 — 강의노트 외 보완
여기서 잠깐 짚어보겠습니다. 강의노트에는 없지만 시험이나 면접에서 자주 물어보는 방식이 두 가지 있습니다.
· 공유 메모리(Shared Memory) : 프로세스들이 메모리의 특정 구간을 함께 쓰는 방식입니다. 운영체제(중개자) 없이 직접 접근하기 때문에 속도가 가장 빠르지만, 충돌을 막기 위한 동기화 작업은 직접 신경 써야 합니다.
· 메시지 큐(Message Queue) : 커널이 제공하는 큐를 통해 메시지 단위로 데이터를 주고받는 방식입니다. 운영체제가 동기화를 알아서 처리해주기 때문에 비교적 안전합니다.
📖 이름 없는 파이프 vs 이름 있는 파이프
보통 '파이프'라고 하면 이름 없는 파이프를 가리킵니다. 부모-자식 프로세스처럼 서로 관련 있는 프로세스 간 통신에 쓰입니다. 반면 이름 있는 파이프는 FIFO라는 특수 파일을 이용하는데, 서로 관련 없는 프로세스끼리도 통신할 수 있다는 점이 다릅니다.
참고로 전역 변수는 동기화 기능이 없어서 open()·close() 같은 함수를 쓸 필요가 없습니다. 하지만 파일·파이프·소켓 같은 나머지 통신 방식은 모두 open()으로 준비하고 close()로 마무리하는 절차를 거친다는 점도 기억해 둘 필요가 있습니다.
05 프로세스 동기화와 공유 자원, 임계구역
왜 동시에 접근하면 문제가 생길까
📖 프로세스 동기화(Process Synchronization)
프로세스들이 서로 동작을 맞추는 것, 다시 말해 프로세스들이 서로 정보를 공유하는 것을 뜻합니다. 다중 프로그래밍 시스템에는 여러 프로세스가 동시에 존재하면서 서로 독립적으로 움직이는데, 이때 서로의 상태를 전혀 모르는 채로 두면(비동기적 프로세스) 문제가 생길 수 있습니다.
공유 자원과 임계구역
공유 자원(shared resource)은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말합니다. 같이 쓰는 자원이다 보니, 누가 언제 읽고 쓰느냐에 따라 결과가 달라질 수 있습니다. 이렇게 접근 순서에 따라 실행 결과가 달라지는 프로그램 영역을 임계구역(critical section)이라고 부릅니다.
대표적인 예로 은행 계좌를 들 수 있습니다. 잔액을 확인하고, 입금을 처리하고, 새 잔액을 저장하는 이 일련의 과정이 바로 임계구역입니다.
| ① 잔액 확인 현재 예금 읽음 |
→ | ② 입금 처리 금액을 더함 |
→ | ③ 잔액 저장 새 값을 기록 |
❌ 동시 접근 시 생기는 문제
① 잔액 확인 후 ② 입금 처리 사이에 다른 프로세스가 끼어들어 같은 잔액을 읽고 다른 입금을 처리하면, ③ 저장 단계에서 한쪽 입금 내용이 사라질 수 있습니다. 그래서 임계구역에서는 프로세스들이 동시에 작업하면 안 되며, 한 프로세스가 들어가 있으면 다른 프로세스는 밖에서 기다려야 합니다.

06 임계구역, 어떻게 해결할까
해결 조건 3가지와 대표 알고리즘
임계구역 문제를 제대로 해결했다고 말하려면 아래 세 가지 조건을 모두 만족해야 합니다.
| ① 상호 배제 Mutual Exclusion 한 프로세스만 임계구역에 들어감 |
→ | ② 한정 대기 Bounded Waiting 어떤 프로세스도 무한 대기하지 않음 |
→ | ③ 진행 Progress 들어가려는 프로세스가 있다면 누가 들어갈지 적절히 결정해야 하며, 그 결정이 무한정 미뤄지면 안 됨 (강의노트 표기 : 진행의 융통성) |
이 조건들을 만족시키기 위한 알고리즘들은 시간이 지나면서 점점 발전해왔습니다. 하나씩 살펴보겠습니다.
| 알고리즘 | 특징 | 한계 |
| 데커(Dekker) 알고리즘 | 테오도뤼스 데커(Theodorus Dekker)가 제안. 프로세스 2개일 때 상호 배제를 보장하는 최초의 알고리즘. 하드웨어 도움 없이 해결 가능 | 구현이 복잡함 |
| 피터슨(Peterson) 알고리즘 | 게리 피터슨(Gary Peterson)이 제안. 데커 알고리즘보다 간단하게 구현 | 프로세스 2개까지만 사용 가능 |
| 세마포어(Semaphore) | 임계구역 진입 전 스위치를 '사용 중'으로 두고 들어가며, 작업을 마치면 다음 프로세스에 동기화 신호를 보냄 | 바쁜 대기·직접 점검이 필요 없음 |
| 모니터(Monitor) | 공유 자원을 내부적으로 숨기고, 접근용 인터페이스만 제공해서 자원을 보호하고 동기화함 | - |
📖 뮤텍스(Mutex) vs 세마포어(Semaphore) — 강의노트 외 보완
· 뮤텍스 : 임계구역에 오직 1개의 프로세스만 들어갈 수 있게 하는 상호 배제용 락(lock)입니다. 화장실 칸이 1개뿐이라 열쇠를 가진 사람만 들어가고, 나오면서 다음 사람에게 열쇠를 넘겨주는 방식과 같습니다.
· 세마포어 : 지정한 변수(카운터)만큼 여러 프로세스가 동시에 들어갈 수 있습니다. 칸이 여러 개라 빈 칸 수를 전광판으로 알려주는 방식에 가깝습니다.
→ 둘 다 동기화 도구지만, 뮤텍스는 '딱 하나만', 세마포어는 '정해진 개수만큼' 허용한다는 점이 핵심 차이입니다.

✓ 세마포어를 쉽게 떠올리는 법
화장실 칸이 여러 개 있고, 입구에 '빈 칸 개수'를 보여주는 전광판이 달려 있다고 생각하면 됩니다. 누군가 들어가면 숫자가 하나 줄고, 나오면 다시 하나 늘어납니다. 기다리는 사람은 문을 일일이 두드릴 필요 없이 전광판 숫자만 보면 되므로 바쁜 대기를 하지 않아도 됩니다.

📌 핵심 정리
· 프로세스 간 통신(IPC) : 프로세스가 다른 프로세스와 데이터를 주고받는 것, 범위에 따라 내부·간·네트워크 통신으로 구분
· 통신 방향 : 양방향(소켓), 반양방향(무전기), 단방향(전역 변수·파이프)
· 동기화 여부 : 대기가 있는 통신(파이프·소켓) vs 대기가 없는 통신(전역 변수·파일)
· 공유 자원·임계구역 : 공동으로 쓰는 자원에 접근하는 코드 영역, 접근 순서에 따라 결과가 달라짐
· 임계구역 해결 조건 : 상호 배제·한정 대기·진행
· 해결 알고리즘 : 데커 → 피터슨 → 세마포어 → 모니터로 발전
태그 : 프로세스 간 통신이란IPC 종류 정리임계구역이란상호배제 한정대기 진행의융통성세마포어란데커 알고리즘 피터슨 알고리즘파이프 소켓 차이동기화 비동기화 통신 차이공유자원 임계구역운영체제 프로세스 동기화
'이전 수업 노트 > 운영체제' 카테고리의 다른 글
| 8. 메모리 관리 (0) | 2026.06.21 |
|---|---|
| 7. 교착상태 (0) | 2026.06.20 |
| 5. 스케줄링 알고리즘 (0) | 2026.06.14 |
| 4. 스레드와 CPU 스케줄링 (0) | 2026.04.11 |
| 3. 프로세스 (0) | 2026.03.29 |

