IPC
- Inter-Process Communiation
- indepedent process: 다른 프로세스와의 협업 X
- cooperating process: 다른 프로세스와 협업 O → 다른 프로세스와 역할 분배(정바 공유, 연산 속도, 모듈화, 편리성) → 프로세스 간 통신(IPC) 방법 필요
- E.g.) Chrome 브라우저: 브라우저 + 렌더러(탭 페이지 추가, 샌드박스) + 플러그인 프로세스 구조. 샌드박스를 통해 탭마다 서로 다른 프로세스와 주소 공간을 강하게 격리. 브라우저 프로세스와의 통신을 통해 맡은 작업을 수행. 이를 위한 IPC 존재
Producer-Consumder Problem
- 고정 크기 버퍼
- 아이템을 만들고 공유 버퍼에 추가하는 생산자
- 버퍼에서 아이템을 꺼내 소비하는 소비자
- buffer_size 설정, 생산자가 추가할 때 +1, 소비자가 사용할 때 -1되는 전역 변수 값
IPC의 방법에는 메시지 패싱과 공유 메모리 두 가지 방법이 존재한다!
Message Passing
- 통신 프로세스 간 공유 메모리 영역 존재, 커널을 경유해서 메시지 전송
- 유저 프로세스 A 인큐 → 메시지 큐의 메시지 접근 → 유저 프로세스 B 디큐...
- send(message)
- receive(message)
- message: 타입 및 크기 체크
- message queue: 메시지를 버퍼링하는 링크. 링크 설계 알고리즘(메시지 사이즈, 접근 권한 허용 방법, 접근 방법 등)
- 버퍼링: 링크에 붙여져 있는 메시지 큐
- Capacity: (1). Zero: 버퍼 저장 공간 없기 때문에 메시지가 올 때까지 기다리는 방법 (2). Bounded: 링크가 가득 찼다면 sender가 기다려야 함 (3). Unbounded: sender가 기다릴 필요 없는 큐 구조
- 물리적 통신 링크: 공유 메모리, HW 버스, 네트워크
- 논리적 통신 링크: 직접/간접. 동기/비동기. 자동/명시적 버퍼링
1. Direct Communication
- 프로세스가 연결할 프로세스의 이름을 명백하게 지칭해야 함
- send: 특정 프로세스에 메시지를 보내기
- receive: 특정 프로세스에게서 메시지를 받기
2. Indirect Communication
- 메시지가 포트를 통해 전달
- 각 포트는 유니크한 식별자 존재, 포트를 공유할 때에만 메시지 통신 가능
- 특정 포트는 여러 개의 프로세스와 연결 가능
- 프로세스 쌍 → 통신 링크(단방향, 양방향) 공유
- (1). 포트 생성 (2). 포트에 메시지 전송/전달 (3). 포트 제거
- send, receive 시 직접적인 프로세스 ID가 아니라 포트 ID
- 다수의 프로세스와 연결된 포트 → 포트에 연락이 왔음을 알림을 통해 전달해야 함
Shared Memory
- 공유 메모리 접근할 때 유저 프로세스 동기화를 허용하는 메커니즘
- Read & Write: 프로세스 주소 공간 일부 → 공유 메모리 영역으로 설정, 프로세스에서 바로 접근 가능
- 정해진 주소 공간에 쓰고/읽는 약속