Keep going
프로세스 간 통신 (Interprocess communication) 본문
Interprocess Communication
- 프로세스간의 독립적
- 통신할 필요 없다.
- 프로세스간의 협력
- 협력하는 process는 데이터를 서로 주고 받고 공유한다.
- interprocess communication 필요
cooperating process
- 여러 프로세스 간 데이터 공유 위함
- 속도 빠르게 하기 위해 분담
- s/w 구현할 때 A기능은 p1이 B기능은 p2가 잘라서 모듈 나누기
IPC의 2가지 모델
- shared memory
- message passing (메시지 전달)
Producer - Consumer Problem
- 생산자가 물건을 창고에 넣어둠, 소비자는 물건을 창고에서 빼서 갖다 씀
- 컴퓨터 내부나 응용 program에서도 많이 볼 수 있음
- ex) process가 스플에 printer 할 작업 갖다 놓음, printer는 스플에서 꺼내서 계속 print
- unbounded buffer (창고의 크기 무한대)
- 생산자가 기다릴 필요 X
- 소비자는 비어있으면 기다리고 있으면 일한다.
- bounded buffer (창고 크기 유한 버퍼)
- 창고의 용량이 있기 때문에 꽉차면 producer 기다림
- 생산자는 기다리고 필요한 경우에는 소비자도 기다림 (창고 비어있을때)
Shared memory
- 2개의 process가 공유하는 메모리 영역
- p1, p2 사이에 공유하는 shared memory 있다면 shared memory 벗어나게 쓰거나, 비어 있는데 읽거나, 꽉 찼는데 계속 쓴다거나, 2개의 process 동시에 접근해 inconsistency (동기화 해야함) 일어난다면 운영체제가 관여하지 않고 shared memory 사용하는 process 가 알아서 처리
- 운영체제는 shared memory 만들고 p1, p2에 붙여주는 역할만 함
message passing
- 데이터 주고 받기 위해 메시지 전달
- 두 프로세스 동기화 위해서 사용
- c, p 라는 process 있을 때 c가 '다했어 너써' 메시지 전달하고 p가 '나 다했어 너써' 메시지 전달하는 것처럼 둘의 일순서 맞추는 것 → 동기화
- shared memory 사용 안한다.
- 기능
- send(message)
- receive(message)
- message는 고정 길이, 가변 길이 있다.
- 통신하려면 프로세스 (P, Q) 사이에 communication link 있어야 함
- communication link에 대해 고려 사항(다양한속성들)
- 링크가 어떻게 만들어졌는지
- 링크가 둘만 사용하는거냐, 다른 놈들도 참여할 수 있느냐
- 2개의 process 사이에 link가 몇개 있을 수 있느냐
- 링크의 용량이 있다면 무한 용량이냐
- 링크가 단방향이냐 양방향이냐
- communication의 논리적 성질
- 단방향, 양방향
- 동기, 비동기
- 버퍼링 자동, 명시해야되나
- 사용자가 링크의 용량 정해줘야하는지
- 링크가 자동으로 늘어나서 사용자들은 크기에 대해 생각 안해도 되는지)
Direct Communication
- P, Q 사이에 링크 있을 때 Send p, Send q 시스템 poll을 제공한다면 직접통신
- 시스템 호출만나면 P,Q 사이 링크 자동으로 운영체제가 만들어줌
- 링크 성질
- 링크는 2개의 Process 만 참여
- 2개 P에는 1개의 link만 존재
- 링크 방향은 단방향 이나 양방향 (일반적으로 양방향)
- send와 receive 할 때 받는 애, 보내는 애 지정하면 direct communication 됨
Indirect Communication
- P, Q 통신하고 싶으면 mail box 하나 둠
- P가 mail box에 넣고 Q가 mail box에서 읽는 것
- mail box는 고유번호 가지게 됨
- P가 mail box 만들어서 메시지 보내고 Q는 mail box에서 갖고와서 받게됨
- 링크 성질 (mail box)
- mail box는 2개만 아니라 다른 process 들도 mail box 이름 알면 참여할 수 있으므로 여러 process 참여 가능
- 필요하면 mail box 여러개 만들 수 있고 공유함 (process 사이에 여러개 communication link)
- 단방향 이나 양방향
- 연산
- mail box 만드는 시스템 호출
- mail box에 메시지 보내는 시스템 호출
- mail box 삭제하는 시스템 호출
- 기능
- send(A, message) - 메일 박스 A에 메시지 보내기
- receive(A, message) - 메일박스 A에서 메시지 받기
Synchronization (동기화)
- mail box로 메일 주고 받을 때 Blocking (동기화) 방법 사용, Non Blocking (비동기화) 사용할 수 있음
- sender가 mail 보냈는데 receiver가 안 받는다.
- sender는 보내고 자기 일한다. → Non Blocking send
- sender가 보냈는데 Receiver가 받을 때까지 Sender 기다린다. → Blocking send
- Receier가 message 받아가려고 하는데 message가 없다.
- Receiver가 기다린다. → Blocking receive
- 널포인터 넘어오거나 minus record 넘어와서 return → Non Blocking receive
- send, receive 둘다 blocking → 랑데뷰 발생
- sender가 보내고 기다리고 있고 receiver이 sender가 보낸것을 받으려고 들어왔을 때
- receiver가 받으려고 기다리고 있는데 sender가 뭘 보낼때
Buffering
- zere capacity
- send가 보내고 receiver가 바로 받거나 둘다 blocking인 랑데뷰 방식 이여야 함
- 저장할 수 있는 메시지 개수는 0개이다.
- Bounded capacity
- Unbounded capacity
shared vs message passing
shared memory는 항상 일정크기 (무한대 크기 x)
쓰고 일고 그런것들 process가 책임
message passing은 전달 방식에 따라 성질다름
direct인 경우와 indirect인 경우
indirect 메일 박스는 크기, 성질 어떻게 되느냐에 따라 커뮤니케이션 방식 생김
Comments