본문 바로가기

CS/OS

IPC(Inter Process Connection)

what IPC

프로세스간에 통신을 의미합니다.

 

원칙적으로는 프로세스는 독립적이기 때문에 서로의 수행에 영향을 주면 안 됩니다.

 

하지만, 업무 효율을 위해 프로세스 간에 통신이 필요한 경우가 있습니다. 이를 위해 OS에서 제공하는 것이 IPC입니다.

 

또한, 의사소통이 제대로 이루어 지기 위해 동기화도 주의해야합니다. 

 

 

 

 

 

when IPC

정보 공유 : 프로세스가 동일한 정보를 필요 할 수 있습니다.

계산 가속화 : 업무를 분할하여 병렬로 계산속도를 높일 수 있습니다.

모듈성 : 기능을 별도의 프로세스(쓰레스)로 나누어 모듈식으로 시스템을 구성할 수 있습니다.

편의성 : 동시에 여러 작업이 가능합니다. ex) 문서 작업, 노래 듣기 등등 병렬로 처리가능합니다.

 

 

 

 

 

message passing VS shared memory

프로세스 사이에 공유 변수 유무에 따라 크게 2가지 모델로 나눌 수 있습니다.

 

msg passing은 공유 변수 없이 메세지를 주고 받으며 통신하며, 

 

shared memory는 공유 변수를 이용합니다. 

 

 

 

1. msg passing

프로세스는 독립적입니다. 따라서, 정보 공유를 위해 중간에서 커널이 메세지를 전달해줍니다. 

 

장점 : 커널을 이용하기 때문에 비교적 구현이 쉽다. 또한, 커널이 동기화를 보장합니다.

단점 : 시스템 콜로 인한 오버헤드가 발생합니다. => 느립니다. 




 

msg passing 종류

msg passing direct/indirect로 나눌 수 있지만, 인터페이스 차이일 뿐 내부적으로 커널을 거치는 것은 동일합니다.

 

msg passing - direct communication

통신하려는 프로세스의 이름을 명시적으로 표시합니다. communication link가 자동적으로 생성되고 한 쌍에게 할당됩니다.

제공되는 시스템 콜

 

send( P, msg ) / receive( P, msg )

 

 

msg passing - indirect communication

중간에 mail box( 또는, port )를 공유하여 통신합니다.

mail box를 공유하는 프로세스는 고유한 메일박스 id를 이용해 통신합니다. 메일 박스는 여러 프로세스가 공유할 수 있습니다. 그래서, 하나의 링크가 여러 프로세스에게 할당될 수 있습니다.

 

이 때, 동기화를 처리하기 위해 mail box는 두 프로세스에게 링크를 할당하는 방법이 있습니다.

 

제공되는 시스템 콜

메일 박스 생성 및 삭제, send/receive

 

 

 

 

 

2. shared memory

OS는 물리적 메모리를 공유 메모리를 지원해줄 수 있습니다.

 

msg passing은 데이터를 전송하지만, 공유 메모리를 데이터 자체를 공유하는 특징이 있습니다. 이름 그대로! 

 

장점 : 커널을 거지치 않기 때문에 공유가 빠릅니다.

 

단점 : OS가 동기화 보장을 해주지 않습니다.  

따라서, critical section 제어 방식으로 세마포어 등을 사용할 수 있습니다. 

 

 

 

 

ipc 종류

1. (익명) pipe

pipe한쪽 방향으로만 통신이 가능한 반이중 통신입니다.

 

데이터를 보내는 프로세스와 받는 프로세스가 정해져 있습니다. 

 

따라서, 양방향 통신이 가능케하려면 두 개의 pipe를 쓰면 되지만 구현이 어렵다는 단점이 있습니다.

 

또한, 통신할 프로세스를 알고 있는 경우에 이용하는 통신이기도 합니다. 

 

ex) parent-child process

 

 

2. Named pipe (FIFO in UNIX)

Named pipe는 익명 pipe와 다르게 전혀 모르는 프로세스 사이에서도 가능한 통신입니다.

 

양방향 통신을 위해서는 마찬가지로 두 개의 pipe를 사용해야 합니다. 

 

 

3. Message queue

Named pipe와 동일하게 동작하지만, 데이터의 흐름이 아님 메모리 공간입니다.

 

사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있습니다.

 

 

4. 소켓

네트워크 소켓 통신을 통해 데이터를 공유합니다. 

 

클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용합니다. 

 

서버(bind, listen, accept), 클라이언트(connect)

 

 

5. memory map

공유 메모리처럼 메모리를 공유합니다. 차이점은 열린 파일을 메모리에 맵핑시켜 공유하는 방법입니다.

 

주로 파일로 대용량 데이터를 공유해야 할 때 사용합니다.

 

 

 

참고

http://blog.naver.com/PostView.nhn?blogId=bycho211&logNo=220985701140

'CS > OS' 카테고리의 다른 글

OS 부팅과정  (2) 2023.11.21
address space VS virtual memory VS swap memory  (0) 2020.07.13
데드락 (DeadLock)  (0) 2020.06.23
process synchronization(동기화)  (0) 2020.04.27
process vs thread  (0) 2020.04.27