프로세스 간 통신(IPC: Interprocess Communication)은 서로 다른 프로세스 끼리 데이터를 주고 받는 것이다. 프로세스 간 통신을 위해선 기본적으로 공유 메모리와 공유메모리에 대한 상호 배제적 접근을 위한 동기화 기법이 요구된다. 운영체제에 따라 다양한 형태의 IPC 기법이 지원되고 있지만 공유 메모리를 어느 주소 공간에 확보하느냐에 따라 근본적인 차이가 있다. 모든 프로세스는 서로 다른 사용자 영역을 가지고 있지만 운영체제 영역은 공유하고 있음을 유의해야 한다.
프로세스 간 통신을 위한 공유 메모리를 사용자 영역 혹은 운영체제 영역을 사용할 수 있다. 사용자 영역을 공유 메모리로 사용할 경우에는 별도의 동기화 기법이 요구된다. 반면 운영체제 영역을 공유 메모리로 사용할 경우에는 동기화를 위한 별도의 조치가 필요 없다.
메시지 전송 방식
- 메시지 전송 방식은 운영체제 영역을 공유 메모리로 사용하는 대표적인 IPC 기법이다.
- 송신 프로세스는 전송하고자 하는 메시지를 자신의 사용자 영역에 작성한 후, 시스템 호출을 통하여 운영체제 영역에 복사한다.
- 수신 프로세스는 운영체제 영역에 복사된 메시지를 시스템 호출을 통하여 자신의 사용자 영역으로 복사함으로써 메시지 송수신이 이루어진다.
송신 프로세스 Pi는 자신의 사용자 영역에 메시지를 작성한 후, send(message, Pj)를 호출하여 운영체제 영역에 복사한다.
수신 프로세스 Pj는 receive(message, pi)를 호출하여 운영체제 영역에 복사된 메시지를 자신의 사용자 영역으로 복사한다. send(message, pj)는 자신의 사용자 영역에 작성한 메시지를 프로세스 Pj에게 전달해달라는 요청이고, receive(message, pi)는 프로세스 pi로 부터 전송된 메시지를 자신의 사용자 영역에 전달해 달라는 요청이다.
이 방식은 동일한 내용의 메시지가 세 군데 존재하는 단점이 있다.
- 운영체제는 메시지 송수신을 위한 공유 메모리로써 운영체제 영역에 메시지 큐 형태로 유지 관리한다.
- 메시지 송신을 위한 send()는 사용자 영역의 메시지를 메시지 큐에 순서대로 저장하고, 또한 메시지 수신을 위한 receive()는 메시지 큐로부터 해당 메시지를 사용자 영역으로 복사한다. 이 때 해당 메시지가 메시지 큐에 없을 경우 메시지 수신을 요청한 프로세스는 대기 상태로 변환된다.
- 이와 같이 운영체제 영역의 일부분을 공유 메모리로 사용할 경우 병행 프로세스의 동기화 문제를 운영체제 내부에서 해결해 주기 때문에 응용 프로그래머는 특별히 신경쓰지 않아도 된다.
공유 메모리 방식
공유 메모리 방식은 사용자 영역의 임의의 공간에 공유 메시지를 주고받는 방식이다.
ex) 프로세스 Pi가 프로세스 Pj에게 공유 메모리 방식으로 메시지를 전송할 경우 아래의 이미지와 같다
프로세스 Pi는 공유메모리를 확보하기 위하여 운영체제에게 요청한다. 운영체제는 사용자 영역의 빈 공간 중에서 요청된 크기의 공유 메모리를 설정한 후, 공유 메모리의 주소를 프로세스 Pi에게 알려준다. 프로세스 Pi는 공유 메모리에 직접 접근하여 메시지를 작성한다. 프로세스Pj는 프로세스 운영체제에게 Pi에 의해 확보된 공유 메모리의 주소를 요청한 후, 공유 메모리를 직접 접근하기 때문에 발생하는 임계 영역에 대한 상호 배제 및 동기화는 응용 프로그래머의 책임이다.
Reference
개념 이해를 위한 운영체제
https://thdbs523.tistory.com/154
[운영체제/OS] 프로세스 간 통신(메시지 전송/공유 메모리 방식)
프로세스 간 통신(IPC: Inter-process Communication) 1) 프로세스 간에 데이터를 주고 받는다 (write/read) 2) 프로세스는 독립적이다 (-> 다른 프로세스 영역을 접근(access)할 수 없다) 3) 공유 메모리가 필요하
thdbs523.tistory.com
'CS > 운영체제' 카테고리의 다른 글
[Chapter 4] 개념 이해를 위한 운영체제 [교착상태 - 개요] (0) | 2025.02.26 |
---|---|
[Chapter 3] 개념 이해를 위한 운영체제 [병행성 - 리눅스 병행성] (0) | 2025.02.25 |
[Chapter 3] 개념 이해를 위한 운영체제 [병행성 - 임계 영역] (0) | 2025.02.24 |
[Chapter 3] 개념 이해를 위한 운영체제 [병행성 - 개요] (0) | 2025.02.24 |
[Chapter 2] 개념 이해를 위한 운영체제 [프로세스] (0) | 2025.02.20 |