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 |