profile image

L o a d i n g . . .

프로세스 간 통신 (Inter-Process Communication, IPC)

- 프로세스는 완전히 독립된 실행객체로써, 다른 프로세스의 영향을 받지 않음

- 독립되어 있는 만큼 별도의 설비 없이 서로 간의 통신이 어려움

- 따라서, 커널에서 IPC 라는 내부 프로세스 간 통신 제공  프로세스는 커널이 제공하는 IPC 설비를 이용하여 프로세스 간 통신 가능

- IPC: 프로세스들 간의 의사소통을 뜻함

- 프로세스가 통신 가능하다는 것은 서로 다른 프로세스가 데이터를 주고 받을 수 있다는 것, 또한 프로세스들이 공유하는 메모리가 필요하다는 뜻


공유메모리

- 공유메모리가 각 프로세스에게 첨부하는 방식으로 작동

- 각 프로세스가 메모리 영역에 첨부 됨

- 대량의 정보를 다수의 프로세스에게 배포 가능

- 중개자 없이 곧바로 메모리에 접근 가능해서 모든 IPC 중 가장 빠르게 작동할 수 있음


IPC 설비 종류

- 상황에 맞는 IPC의 선택은 fork()를 이용해서 만들어진 멀티 프로세스의 프로그램에 있어서 중요함

 

PIPE

- 익명의 PIPE를 통해서 동일한 부모 프로세스를 가진 프로세스들 간에 단방향 통신 지원

- FIFO 구조, 생성된 PIPE에 대하여 Write 또는 Read 만 가능하게 됨

- 부모-자식 프로세스 간 통신할 때 사용

- 쌍방 통신을 위해서는 Write용 PIPE 1개, Read용 PIPE 1개를 따로 만들어야 함

// read()와 write()가 기본적으로 block 모드로 작동하므로, 프로세스가 read 대기중이라면 read가 끝나기 전에는 write를 할 수 없음


Named PIPE

Read 밑의 mkfifo 확인

- 이름을 가진 PIPE를 통해서 프로세스들 간의 단방향 통신 지원, 서로 다른 프로세스들이 PIPE 이름만 알면 통신 가능

- 전혀 다른 모든 프로세스들 사이에서 통신이 가능한데, 그 이유는 프로세스 토인을 위해 이름이 있는 파일을 사용하기 때문

- Named PIPE의 생성은 mkfifo 를 통해 이뤄지는데, mkfifo 가 성공하면 명명된 파일 생성 됨


Message Queue

- 어디에서나 물건을 꺼낼 수 있는 컨베이너 벨트와 유사

- 컨베이너 벨트에 올라올 물건에 라벨을 붙이면 동시에 다양한 물건을 다룰 수 있는 것과 같이, 큐에 쓸 데이터에 번호를 붙임으로써 여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있음

- 커널에서 제공하는 Message queue 이므로 EnQueue 하는데 제한이 존재


Shared Memory

- 공유 메모리가 데이터 자체를 공유하도록 지원하는 설비

- 공유메모리는 중개자 없이 곧바로 메모리에 접근할 수 있으므로 다른 모든 IPC 중에서 가장 빠르게 작동할 수 있음

- 프로세스 간의 Read, Write를 모두 필요로 할 때 사용함


Memory Map

- 프로세스의 가상 메모리 주소 공간에 파일을 매핑한 뒤, 가상 메모리 주소에 직접 접근하여 파일 읽기/쓰기를 대신 함

- 운영체제에서 페이징 기법을 사용하여 파일의 내용을 관리하며 페이지 크기에 따라 적절히 파일의 내용을 읽고 쓸 수 있음


Socket

- 같은 도매인 내에서 연결될 수 있고 프로세스들 사이의 통신을 가능하게 함

- 서버단에서 bind, listen, accept를 진행해 소켓 연결을 위한 준비를 함

- 클라이언트 단에서 connect를 통해 서버에 요청하고 연결이 수립된 후에는 socket에 send 하여 데이터를 주고 받음

- 연결이 끝난 후에는 반드시 Socket을 close() 해야 함

- 범용적인 IPC로써 양방향 통신이 가능하며, 패킷 단위로 주고 받아서 직관적으로 이해하기 쉬운 코드 생성 가능


요약

 

IPC 종류 PIPE Named PIPE Message Queue Shared Memory Memory Map Socket
용도 부모 자식 간 단방향 통신 다른 프로세스와 단방향 통신 다른 프로세스와 단방향 통신 다른 프로세스와 양방향 통신 다른 프로세스와 양방향 통신 다른 시스템 간 양방향 통신
공유 매개체 파일 파일 메모리 메모리 파일 + 메모리 소켓
통신 단위 stream stream 구조체 구조체 페이지 stream
통신 방향 단방향 단방향 단방향 양방향 양방향 양방향

참고

1. https://mesajang.tistory.com/157?category=950485 

2. https://heeonii.tistory.com/13

 

 

복사했습니다!