안녕하세요. 앤디라이언입니다.
오늘은 Linux시스템에서 사용하는 IPC에 대해 알아보겠습니다.
IPC ( Inter Process Communication )는 내부 프로세스간 통신을 의미합니다.
프로세스는 독립적인 수행을 하기때문에
프로세스간의 통신을 할 수 없는 단점이 있습니다.
즉, 독립되어 있기 때문에 별도의 설비가 없이는
서로간의 통신이 불가능 하다는 의미입니다.
이러한 IPC는 System V IPC와 POSIX IPC로 나뉩니다.
System V IPC는 오래된 버전이며 오랜 역사를 가진만큼
이기종간 코드 호환성을 확실히 보장해 줍니다.
하지만 API도 오래되었으며, 더 이상 업데이트가 되지 않는 단점이 있습니다.
반면, POSIX IPC는 직관적인 API로 구성되어 있으며,
상대적으로 사용하기 쉽게 되어 있습니다.
파이프 (PIPE)
그림은 PIPE의 작동원리를 보여주는 것입니다.
프로세스A,B가 파이프를 통해 연결되며,
프로세스A는 쓰기만하고, 프로세스B는 읽기만 할 수 있습니다.
즉, 단 방향 통신이 가능한 구조이며,
이러한 특징때문에 반이중(Half-Duplex) 통신이라고 부릅니다.
만약 A,B가 읽기/쓰기가 모두 가능하게 만들기 위해서는
두 개의 파이프를 만들어야 가능해집니다.
메세지 큐 (Message Queue)
큐(queue)는 선입선출(FIFO)의 자료구조입니다.
메세지 큐는 메모리 공간을 할당받아 사용합니다.
이 공간은 컨테이너라고 벨트라고도 합니다.
메세지 큐에 쓸 데이터에 번호를 붙임으로써
여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있습니다.
공유 메모리 (Shared Memory)
공유 메모리는 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용합니다.
프로세스가 공유 메모리 할당을 커널에 요청하면
커널은 해당 프로세스에 메모리 공간을 할당해줍니다.
이후 어떤 프로세스건 해당 메모리영역에 접근할 수 있습니다.
공유 메모리는 중개자 없이 곧바로 메모리에 접근할 수 있기 때문에
다른 모든 IPC들 중에서 가장 빠르게 작동할 수 있습니다.
소켓 통신 (Socket)
Socket은 프로세스와 시스템의 기초적인 부분이며,
프로세스들 사이의 통신을 가능하게 합니다.
서버와 클라이언트간의 데이터를 주고 받기 위해
socket을 생성하여 연결하고, 데이터를 주고 받습니다.
'개발 이야기' 카테고리의 다른 글
오토핫키 ImageSearch, Send, Sleep (0) | 2020.05.08 |
---|---|
메세지 큐 (Message Queue) (0) | 2020.05.08 |
POSIX pthread_mutex (0) | 2020.05.07 |
POSIX C pthread (0) | 2020.05.07 |
POSIX C (0) | 2020.05.07 |