1. IPC의 정의 및 필요성
IPC란 InterProcess Communication으로, Process 들 간에 데이터 및 정보를 주고 받기 위한 메카니즘이다. 각 프로세스의 독립된 영역 외의 영역과 커뮤니케이션 하는 것이기 때문에 System call과 같이 Kernel이 제공하는 도구를 통해서 행해진다.
이제부터 IPC의 두가지 모델에 대해서 살펴보고, 각 모델의 예시에 대해서 자세히 알아보자.
2. IPC의 두가지 모델 (Shared memory, Message passing)과 구현
2-1. 공유 메모리 방식 (Shared Memory)
첫번째 방식은 공유 메모리 방식이다. 프로세스의 특정 메모리 영역을 서로 공유하여 그 영역에 읽고 씀으로써 서로 다른 프로세스가 통신하는 방식이다. 이 공유메모리는 초기에 만들어 질 때는 Kernel의 도움을 필요로 하지만 공유 메모리가 설정되면 Kernel과 관계 없이 응용 프로그램 레벨에서 통신(Read, Write)이 가능하다. 이는 데이터베이스를 떠올리면 쉽게 이해할 수 있을것이다. 이 방식의 구현은 Shared Memory로 할 수 있다.
프로세스들이 공유 메모리에 직접 접근하는 방식이라서 통신 자체의 비용은 적지만 메모리에 서로 다른 프로세스가 동시에 접근 가능하다는 특징 때문에 동기화가 필요하다는 문제가 있다. 세마포어나 locking같이 동기화에 대한 제어를 설정하다보면 오히려 뒤에 설명한 Message passing방식보다 느려질 수 도 있다고 한다.
2-2. 메시지 교환 방식 (Mesage Passing)
두번째 방식은 메시지 교환 방식이다. 통신하고자 할 때마다 kernel의 도움으로 고정(혹은 가변)길이의 메시지를 send 하고 receive하며 서로 다른 프로세스가 통신하는 방식이다. 클라이언트와 서버가 통신하는 방식을 떠올리면 쉽게 이해할 수 있을 것이다. 이 방식의 구현은 Pipe, Message queue, Socket이 있다.
이 모두가 통신 시 마다 커널을 경유해야 하기 때문에 통신 속도 자체는 떨어지지만 Kernel을 경유함으로써(디테일 하게 보자면 Kernel의 데이터 버퍼링을 통해) Kernel이 제공하는 동기화덕분에 동기화 문제 없이 구현할 수 있다. 하지만 Send의 경우는 문제 없지만 Receive의 경우 그 프로세스가 실행중이지 않다면 메세지를 받지 못하기 때문에 문맥 전환과 관계 있다.
다음은 실제 구현에 대해서 알아보자
3. IPC 구현
3-1. Message Passing - Pipe
하나의 Process가 다른 Process로 버퍼를 통해 데이터를 직접 전달하는 방식으로, 1:1 소통만 가능한 방식이다. 버퍼를 이용하므로 용량제한이 있고, 꽉 찬다면 send하지 못하고 대기하게 된다. 하나의 pipe는 한 쪽 방향으로만 이동하기 때문에 양방향 통신을 위해서는 두개의 pipe를 필요로 한다. pipe명령을 사용하면 2개의 파일 디스크립터가 생성되는데 0번째는 read만을, 1번째는 write만을 담당한다.
3-2. Message Passing - Signal
특정 프로세스에게 kernel을 통해 event를 전달하는 방식이다. signal 송신은 수신 프로세스의 상태와 무관하게 진행되지만 signal의 수신은 프로세스가 스케줄링 되어야 처리가 가능하다. 따라서 signal을 비동기적인 동작이라고 볼 수 있다.
3-3. Message Passing - Message queue
고정된 크기를 갖는 Message의 연결리스트를 이용하여 통신하는 방식이다. message가 kernel buffer에 들어가기 때문에 message에 대한 프로토콜이 필요하다. 그리고 이 queue를 여러 프로세스가 함께 사용할 수 있기 때문에 동기화가 필요하다.
3-4. Message Passing - Socket
Port를 이용하여 통신하는 방식으로 , end-point 커뮤니케이션을 지원한다. 게다가 다른 IPC와 달리 Remote 프로세스와의 통신도 가능하여 위치에 independent하다는 특징을 갖는다.
그리고, 포트만을 이용하여 통신하므로 Process independent하다. 그러므로 Machine boundary와 관계 없으며 socket도한 무관하다 (왜나하면 Remote machine에서는 socket이 아닌 포트만 보이기 때문에)
3-5. Shared Memory
두 개 이상의 프로세스들이 하나의 메모리 영역을 공유하여 통신하는 방식이다. 다음은 구현이다.
'학교 공부 > OS' 카테고리의 다른 글
운영 체제 (Operating System) - 9. 동기화 (1) (0) | 2021.11.29 |
---|---|
운영 체제 (Operating System) - Thread (0) | 2021.11.29 |
운영 체제 (Operating System) - Task Scheduler에서 Priority 조정을 위한 System Call 구현 (0) | 2021.11.28 |
운영 체제 (Operating System) - CPU Scheduling (0) | 2021.11.28 |
운영 체제 (Operating System) - Kernel System Call 이해와 구현 (0) | 2021.11.28 |