IPC(Inter Process Communication)
IPC란, 프로세스가 다른 프로세스와 협력을 하면서 일을 처리할 때 서로 정보를 주고 받는 일종의 프로토콜입니다.
Unix와 Linux에서의 IPC는 다음과 같은 것들이 있습니다.
- pipes
- FIFOs
- message queue
- shared memory
- sockets
본 포스팅에서는 Message queue, Shared memory, Sockets에 대해 다룹니다.
Message queue
프로세스 A와 B가 서로 데이터를 주고 받으려고 할 때, 이를 커널에 요청하면 커널은 Message queue를 만들어줍니다. 프로세스 A가 Message queue에 메세지를 남기면, 프로세스 B가 message queue에서 해당 메세지를 읽어갑니다.
Message queue의 가장 큰 장점은 커널이 관리를 담당하기 때문에 안정성이 높고 동기화가 편하다는 것입니다. 프로세스 A가 아직 메세지를 남기지 않았는데 프로세스 B가 메세지를 읽어가려고 할 때, 프로세스 B가 기다릴 수 있도록 커널이 관리하는데 이를 동기화 라고 합니다.
하지만, 커널의 개입이 빈번한 만큼 오버헤드가 크고 속도가 느리다는 단점이 있습니다.
Shared memory
프로세스 A와 B가 서로 데이터를 주고 받으려고 할 때, 커널은 두 프로세스가 접근할 수 있는 공간(shared memory)를 할당합니다. 프로세스들은 커널의 개입 없이 shared memory에 정보를 쓰고 읽습니다. Shared memory는 동적 할당된 메모리이며, 프로세스들이 종료되기 전 Delete 해주어야 합니다.
커널의 개입이 없는 만큼 속도가 빠르다는 장점이 있습니다. 그러나, 안정성이 낮고 동기화 문제를 개발자가 직접 컨트롤해야 한다는 단점이 있습니다.
Sockets
Message queue, Shared memory은 한 시스템 안에서 동작하는 여러 프로세스들 간의 통신을 다루는 반면, Socket은 원격 프로세스 간 통신을 담당합니다.
Socket의 예시로는 다음과 같은 것들이 있습니다.
1) RPC(Remote Procedure Call): 원격에 구현되어있는 Procedure를 호출해서 사용하는 방법입니다.
2) RMI(Remote Method Invocation): RPC의 자바 버전으로, client 단에서 개발을 진행할 때 서버에 있는 라이브러리 function을 원격으로 호출하여 사용 가능합니다.
'대딩 > 운영체제' 카테고리의 다른 글
스케줄링_알고리즘_FCFS, SJF, SRTF, Priority Scheduling (0) | 2022.05.11 |
---|---|
스케줄링_CPU Scheduling (0) | 2022.05.11 |
쓰레드_Thread, Multithreaded process, User Threads, Kernel Threads (0) | 2022.05.11 |
시스템콜_fork(), exec(), exit() (0) | 2022.05.11 |
프로세스_Process, Process Address Space, PCB, MultiProcessing (0) | 2022.05.11 |
댓글