1. IPC (Inter-Process Communication)
프로세스 간 통신하는 방법 2가지
1) 공유 메모리 사용 (Shared-Memory)
- 버퍼를 shared-memory로 만들면 된다 → Shared Buffer
- 생산자 - Buffer - 소비자
- buffer 가득차면 Producer: waiting / buffer 비면 Consumer: waiting
- 문제 상황
- 성능이 좋지만 동기화 문제 발생
- 응용 프로그래머가 다 해결해야 함 → 너무 복잡
- 문제 해결 : Message-Passing 으로!!
2) Message-Passing
- send(message), receive(message) system call로 OS가 해결
- ex. pipes
- communication link를 구현
2. Message-Passing
direct vs indirect
1) direct
- send(P, message) - p에게 메시지 전송, receive(Q, message) - Q로부터 메시지 수신
- 링크가 automatically 생성됨
- 2개의 프로세스 간에 정확히 하나의 링크만 만들어짐 (1 : 1)
2) indirect
- 뭔가 매개체가 필요함 - 매개체 = Port (mailbox)
- 그냥 port로 전송만 하면 됨
- 복잡한 Communication link를 만들 수 있음 (다 : 다)
- 여기서 또 blocking I/O vs non-blocking I/O으로 나누어짐
3. 실제 IPC 예시
1) Shared Memory : POSIX Shared Memory
- POSIX: Portable OS Interface (for UNIX)
- memory-mapped files 사용
- 문제 : 일일이 shm_open, write, read, close 등을 프로그래머가 다 해줘야 함
- 좀 더 진화된 형태 : pipes
2) Message Passing : Pipes
- 생산자-소비자 방식으로 두 개의 프로세스가 서로 통신하는 메커니즘
- uni-direction (단방향) vs bi-direction(양방향)
- half-duplex(송, 수신 중 한 번에 하나만 가능) vs full-duplex (양방향으로 동시에 송수신)
- 전통적인 pipe = 단방향 통신 2개 만들어 양방향처럼 사용하면 됨
- 문제 : 그럼 Client-Server System에서는??
- 네트워크 내에서 다른 2개의 컴퓨터끼리 shared memory 및 pipe 연결 불가능!!
- 해결 : socket
4. Communication in Client-Server Systems
Pipe → Socket → RPC
1) Sockets
- IP addr + Port = Socket
- 네트워크 상의 서로 다른 endpoint 끼리의 통신할 때
- Java
- Socket class: connection-oriented (TCP)
- DatagramSOcket class: connectionless (UDP)
- MulticastSocket class: multiple recipients
2. RPCs (Remote Procedure Calls)
- remote host에 있는 procedure를 호출하겠다.
- marshaling 한 파라미터를 서로 넘겨줌 (쉽게, server, client 간에 넘겨줄 parameter 형식 맞춰준다고 생각)
ex. serialization - IPC의 확장 개념
'CS > 운영체제 (OS)' 카테고리의 다른 글
9. 동시성 제어 (동기 vs 비동기 & Blocking vs Non-blocking) 총 정리 (0) | 2021.08.11 |
---|---|
7. 프로세스 vs 스레드 (0) | 2021.08.11 |
4. 프로세스의 주소 공간 (1) | 2021.08.08 |
3. 인터럽트 (Interrupt) (1) | 2021.08.08 |
2. 커널 (Kernel) (0) | 2021.08.06 |