📍 Interprocess Communication (IPC)
: process 간에 data나 신호를 주고 받는 것.
- 같은 목적으로 실행되는 process가 여러 개일때 서로 공유 할 수 있도록
이점
- 정보공유
- 계산 시간이 빨라진다.
- modularity : 기능별로 process 구성
- 편의성 : 한 user가 동시에 여러 개의 task를 수행 가능
어떻게 신호를 주고 받는지?
- shared memory
- kernel이 필요가 없음
- 속도 빠름
- comm.이 편리함 (message passing에 비해서)
- memory 제한이 있음.
- message passing
- kernel을 거쳐서 message를 전달하는 것
- kernel에 저장공간이 따로 있어야 한다는 단점
- user level, kernel level을 왔다갔다 함
- 구현이 용이함
- 같은 file을 전달함에 있어서 충돌이 발생하지 않음.
- 속도 느림
producer & consumer
cooperating processes
1. Independent process
2. cooperating
📍 shared memory
- 버퍼의 형식으로 구현이 됨
- 통신을 원하는 process 간의 memory 영역
- 통신은 OS가 관리하는 게 아니라 사용자 process 제어 하에 있다.
- kernel 의존도가 낮음.
1. bounded buffer
- size 제한 있음
- 장점
- 단점
- 크기가 제한 되어 있으니 유동적으로 할 수 없음
- full 일 때 producer(생산자)가 기다려야 함.
2. unbounded buffer
3. zero capacity buffer
- 용량 = 0
- buffering을 하지 않음. = producer가 생성해서 consumer가 가져 갈때까지 기다림 (=직접 전달)
- 완전 동기화
shared memory 구현
📍 message passing
: 직접적으로 바로 process에게 보내주는 것
✔︎ send()
: 보내는 쪽
✔︎ receive()
: 받는 명령어
📍 communication link
: 상호 작용하는 process 간 data가 이동할 수 있는 통로를 만들겠다.
- 고려사항
- 링크 설정 방법
- 형식
- 두 process 간 or 여러 process간
- 각 process 간 link의 갯수
- link 용량
- message size (고정, 가변)
✅ 구현방법
1. physical (물리적)
- shared memory
- hardware bus
- network를 통해서 전달
2. logical
- direct || indirect (직접전달 || 간접전달)
- synchronous || asynchronous (동기적 || 비동기적)
- automatic || explicit buffering : buffering을 프로그래머가 느끼게 할 것이냐 말것이냐
1️⃣ direct comm.
: 상대를 지정하여 전달
-
send (P, message) → Q가 P에게 보낸
-
receive (P, message) → P가 Q에게 보낸
-
comm link
- 자동으로 link가 설정 됨.
- 한 쌍의 comm가 생성
- 두 process 간에는 1개의 link만 존재
- maybe uni-directional, but usually bi-directional
-
각자 고유의 아이디가 있다 = 여러 개 존재 가능하다.
2️⃣ indirect comm.
- mail box를 이용
- mail box
- 고유한 id가 있음.
- 여러 개가 생성될 수 있음
- comm link (공유하는 mail과의 link)
- mail box에 여러 개의 링크가 형성
- mail bax에는 두 개 이상의 process가 연결이 될 수 있음.
- 두 process 간의 link가 여러 개가 될 수 있음.
- uni/bi-directional 둘 다 허용
- mail box 관련 operator
- creae a new mail box
- send/receive
- destroy a mail box
✅ 여러 개 process가 한 message 수신하려 할 때 처리방법
- 최대 두 process comm. link로 설정되도록 제한
- 한 개 process만 허용 (선착순)
- system에서 임의로 선택하고 결과를 sender에게 알려줌
3️⃣ synchronization
: 수행 시점을 제어하는 역할 (=동기화)
-
blocking: 실제로 보내줄때까지 data가 있을때까지 기다리는 것 (싱크를 맞추는 것, 동기화 고려)
- blocking send: the sender is blocked untill the message is received
- blocking receive: the receiveer is blocked untill message is available
-
non-blocking: considered asynchronous
- non-blocking send : the sender sends the message and continue
- non-blocking receive : the receiver receives: A valid message || Null message
- 동기화 X
- 보내는 사람은 mail box에 두고 가고, 받는 사람은 수시로 mail box 확인
-
blocking send + blocking receive = 랑데뷰 (완전 싱크 되는 것)
📍 system 간의 comm.
1. Comm. in client-server system
1) sockets
: 통신을 위한 end point
2) RPC (Remote procedure call)
: network로 연결 된 system 간의 procedure call
✅ pipe
- ordinary
- 양방향, uni
- parent - child 간의 process
- named
- more powerful than ordinary
- 이름이 지어져있으니 이름만 알면 접근이 가능하다.
- process 간에 제약이 없음
3) RMI (Remote Method Invacation)
: RPC의 자바 ver.
📍 Pipe
: 두 프로세스가 소통할 수 있는 통로 역할 (IPC의 예)
1) 고려사항
(1) uni direction || bi direction (한 방향인지 양방향인지)
(2) two-way의 경우
- halp diplex : 한순간에는 한방향
- full diplex : 동시 양방향
(3) parent-child 간에만 허용 || 모든 process 간 허용
(4) system 내의 process 간 || network 연결 포함
2) ordinary pipe
- proceducer - consumer 형식 (buffer)
- uni directionary
3) named pipe
- more powerful
- bi directionary
- process 관계 제약 X