컴퓨터 과학

[운영체제] 프로세스와 스레드 - 프로세스 간 통신

Data Jun 2025. 11. 27. 22:24

운영체제에서 프로세스(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) 까지 확장해볼 수 있어요!