운영체제에서 프로세스(Process) 는 서로 독립된 메모리 공간을 가지기 때문에 기본적으로 자원을 공유하지 않습니다.
그렇기 때문에, 프로세스 간 데이터를 주고받기 위해서는 IPC(Inter-Process Communication) 방식이 반드시 필요합니다.
이번 글에서는 IPC의 두 대표적인 방식인 공유 메모리(shared memory) 와 메시지 전달(message passing) 을 이미지와 함께 정리해보겠습니다.
1. 프로세스 간 통신(IPC)란?

PC란 프로세스끼리 데이터를 안전하게 주고받도록 운영체제가 제공하는 통신 방식입니다.
프로세스들은 기본적으로 서로의 메모리에 접근할 수 없기 때문에, 운영체제가 통신 창구를 제공해주는 것이죠.
IPC의 대표적인 방식은 다음 두 가지입니다:
1️⃣ 공유 메모리(Shared Memory)
- 프로세스가 공동으로 사용하는 메모리 공간을 생성
- 해당 영역을 통해 데이터를 읽고/쓰기
2️⃣ 메시지 전달(Message Passing)
- 커널을 통해 프로세스 간 메시지를 보내고 받는 방식
- 파일처럼 send / recv 방식의 시스템 콜 사용
2. 공유 메모리(Shared Memory)
1️⃣ 개념
공유 메모리는 여러 프로세스가 함께 접근할 수 있는 특별한 메모리 공간을 만드는 방식입니다.
프로세스 A가 데이터를 쓰면, 프로세스 B는 그 데이터를 같은 메모리에서 바로 읽을 수 있습니다.
2️⃣ 왜 필요할까?
일반적으로 프로세스들은 서로의 메모리를 읽거나 수정할 수 없음
→ 하지만 공유 메모리는 “예외적”으로 해당 공간만큼은 함께 접근 가능하게 만들어줌
3️⃣ 간단한 예시
- 프로세스 A: hi.txt 내용 쓰기
- 프로세스 B: hi.txt 내용 읽기
두 프로세스가 같은 공유 메모리의 데이터를 사용하는 셈
✔ 공유 메모리 기반 IPC의 큰 장점
- 데이터를 주고받는 과정에 커널 개입이 거의 없음
→ 매우 빠르고 오버헤드가 적다 - 각 프로세스가 마치 자신의 메모리를 읽고 쓰는 것처럼 접근 가능
3. 공유 메모리 IPC의 구조
공유 메모리는 다음과 같은 구조로 동작합니다:
- 커널이 공유 메모리 공간을 생성
- 프로세스 A, B가 이 메모리 영역을 attach
- A가 데이터를 쓰면
- B가 같은 메모리 영역에서 데이터를 읽음
✔ 커널은 “공간을 만드는 역할만” 하고,
✔ 실제 데이터 읽기/쓰기는 프로세스가 직접 처리
➡ 속도가 빠르고 효율적
4. 메시지 전달(Message Passing)
1️⃣ 개념
메시지 전달은 프로세스끼리 메시지를 커널을 거쳐 전달하는 방식입니다.
- 보낸다: send()
- 받는다: recv()
데이터가 반드시 커널을 통해 이동하기 때문에
공유 메모리보다 구조가 단순하며 안정성이 높습니다.
2️⃣ 특징
① 커널의 도움을 적극적으로 받음
- 동기화 문제, 경합(race condition) 문제를 커널이 처리
- 개발자가 직접 메모리 충돌 문제를 크게 신경 쓰지 않아도 됨
② 속도는 공유 메모리보다 느릴 수 있음
- 커널 개입이 많기 때문
③ 송신자 → 수신자 관계가 명확
- send()를 호출하는 프로세스와
- recv()를 호출하는 프로세스가 명확하게 구분됨
5. 메시지 전달 방식의 예시(파이프, 시그널, 소켓 등)
1️⃣ 파이프(pipe)
- 단방향 통신
- A → B로만 데이터를 보낼 수 있음
- 리눅스 명령어 |(파이프)도 같은 개념
2️⃣ 시그널(signal)
- 프로세스에 이벤트를 보내는 방식
- Ctrl + C 도 시그널(SIGINT)
3️⃣ 소켓(socket)
- 프로세스 간 네트워크 기반 통신
- 다른 컴퓨터끼리도 통신 가능
4️⃣ RPC(Remote Procedure Call)
- 원격 서버의 함수를 호출하듯 통신하는 방식
6. 공유 메모리 VS 메세지 전달 비교
| 구분 | 공유 메모리 | 메시지 전달 |
| 속도 | 빠름 | 상대적으로 느림 |
| 동기화 필요 여부 | 개발자가 직접 처리(문제 발생 가능) | 커널이 대부분 처리 |
| 사용 난이도 | 상대적으로 어려움 | 쉬움 |
| 대표 사용 예 | 고속 데이터 처리 | 프로세스 간 안정적 통 |
정리하면
IPC는 운영체제에서 매우 중요한 개념이며, 프로세스 간 데이터 이동 방식을 이해하는 데 필수적입니다.
특히 공유 메모리와 메시지 전달 방식은 구조적 차이가 크기 때문에, 상황에 따라 적절한 방식을 선택해야 합니다.
- 빠르고 많은 양의 데이터를 주고받고 싶다면 공유 메모리
- 단순하고 안정적인 통신이 필요하다면 메시지 전달
다음 글에서는 IPC의 실제 시스템 콜 구조나
동기화 문제(세마포어, 모니터, Mutex) 까지 확장해볼 수 있어요!
'컴퓨터 과학' 카테고리의 다른 글
| [운영체제] 동기화와 교착 상태 - 동기화 기법 (0) | 2025.11.29 |
|---|---|
| [운영체제] 동기화와 교착 상태 - 임계구역 (0) | 2025.11.29 |
| [운영체제] 프로세스와 스레드 - 멀티 프로세스와 멀티 스레드 (0) | 2025.11.27 |
| [운영체제] 프로세스와 스레드 - 프로세스의 상태 (0) | 2025.11.25 |
| [운영체제] 프로세스와 스레드 - 문맥교환 (0) | 2025.11.25 |