IPC.. 지난 번에 스터디에서 내가 프로세스와 스레드라는 주제로 발표를 했다. 그때 (같은 프로세스 안의) 스레드끼리는 자원을 공유해서 통신하기 쉬운데, 프로세스끼리는 자원을 공유하지 않아서 통신하려면 특별한 방법이 필요하다고 했다. "그 방법이 IPC인데, 제가 나중에 발표할게요." 라고 했다가 몇 주만에 발표했다.
IPC(Inter Process Communication)
- 프로세스 간 통신
- 프로세스들 사이에 서로 데이터를 주고 받는 행위, 그에 대한 방법이나 경로 (-위키백과-)
- 같은 컴퓨터 내의 프로세스 간 통신, 다른 컴퓨터의 프로세스 간 통신(나는 같은 컴퓨터 내 프로세스 간 통신만 생각했었당..)
- 커널이 IPC 통신하는 방법을 제공
종류
파이프(PIPE)
- 통신을 위한 메모리 공간(버퍼)를 생성하여 프로세스가 데이터를 주고 받게 해줌. (https://mangkyu.tistory.com/9)
익명 파이프
- 두 개의 프로세스를 연결.
- 하나는 쓰기만, 하나는 읽기만 가능함. (단방향 통신)→ 단순한 데이터 흐름을 가질 때 효율적.
- FIFO 구조
- 통신할 프로세스를 명확하게 알 수 있을 때 사용. (부모- 자식 프로세스 간 통신). 외부 프로세스에서 사용 불가능.
- 송수신 하고 싶으면, (아래 이미지처럼) 파이프를 두 개 써야 함. → 구현이 복잡, 많은 프로세스가 통신할 경우 낭비 심함.
명명된 파이프(Named PIPE)
- 익명 파이프가 확장된 상태(FIFO 구조)
- 통신할 프로세스를 모를 수도 있음. 서로 관련 없는 외부 프로세스와 통신 가능.
- 반이중 통신(읽기, 쓰기 가능하지만 한번에 한 방향으로만 통신 가능. 무전기처럼!) → 전이중 통신하고 싶으면 2개 파이프 필요.
메시지 큐(Message Queue)
- 메모리를 사용한 PIPE
- FIFO 구조, 단방향
- 메시지 큐에서 쓸 데이터에 번호를 붙여, 여러 프로세스가 동시에 데이터를 다룰 수 있다. (위 그림에서 노란색 네모 데이터는 1번이라는 번호를 붙여서, 노란색 소비자 프로세스가 쓸 수 있게 하고! 초록색 네모 데이터는 2번이라고 붙여서 초록색 소비자 프로세스가 쓰게 했다.)
공유 메모리(Shared Memory)
- 프로세스 간에 메모리 영역을 공유
- 대량의 정보를 다수의 프로세스에 배포 가능
- 양방향
- 빠름
메모리 맵(Memory Map)
- 메모리를 공유 (위에 공유 메모리처럼 차이점은 파일!!)
- 파일을 프로세스 메모리에 맵핑해서 사용(공유 매개체가 파일+메모리)
- 주로 파일로 대용량 데이터 공유 시 사용
소켓(Socket)
- 원격 컴퓨터와 연결을 의미하는 파이프 형태의 연결 (https://www.youtube.com/watch?v=BW3Cr0-MFxE)
- 서로 다른 컴퓨터에서 프로세스 간 데이터를 공유할 때 사용
- 클라이언트-서버 구조
- 양쪽 컴퓨터(IP 주소)에서 임의의 포트(파이프)를 정하고, 해당 포트 간 소통을 통해 데이터 주고 받음(양방향)
참고 자료📖
https://www.youtube.com/watch?v=BW3Cr0-MFxE => 이 유튜브에서 코드, 시연도 보여주셔서 더 궁금하신 분은 보시면 좋을 것 같다!
아래 블로그들에서도 상세하게 설명해주셔서 IPC를 이해하는 데 도움을 많이 받았다 ~~
https://doitnow-man.tistory.com/110
https://gyoogle.dev/blog/computer-science/operating-system/IPC.html
https://jwprogramming.tistory.com/54
읽어주셔서 감사합니다.
혹시 잘못된 정보가 있으면 알려주세요:)
728x90
'CS 📚' 카테고리의 다른 글
인증 방식(세션-쿠키, JWT 토큰) (3) | 2022.06.13 |
---|---|
HTTP 헤더 간단 정리 (0) | 2022.04.15 |
많이 들어 본 Proxy (0) | 2022.03.24 |
프로세스와 스레드 (0) | 2021.12.15 |