하지만 각 프로세스마다 주소 공간이 있고 다른 프로세스의 공간을 볼 수 없어서
여러 프로세스간의 커뮤니케이션은 어려움
*IPC는 커널의 도움을 받아서 프로세스간 커뮤니케이션이 가능하다
1) message passing : 커널 내부에 메일 박스라는 데이터 스트럭처를 생성
2) shared memory : 특정 프로세스의 일부를 공유 영역으로 지정하고 그 영역을 통해서 커뮤니케이션 진행
https://snnchallenge.tistory.com/120
메세지 패싱은 데이터를 전송할 때마다 시스템콜을 호출한다
send(message) : 메세지 사이즈가 고정될 수도 있고 변할 수도 있음
receive(message)
- 두개의 프로세스가 커뮤니케이션하기 위해서 두 프로세스 사이에 커뮤니케이션 링크를 설치해야함
- 그 후에 send/receive를 할 수 있음
=> 메세지 송수신 마다 커널의 도움이 필요하다
- 커뮤니케이션 링크 설정 : logical device
큐로 되어있는 메일 박스라는 공간을 설정
* direct communication
- 데이터를 보낼 때 상대를 명시함
- send(P, message) / receive(Q, message)
- 운영체제가 직접 전송해주는 역할을 함
- 데이터를 보내기만하면 링크가 자동으로 형성
- 송신프로세스와 수신 프로세스 간에 하나의 링크만 존재할 수 있다
- 송신 시 수신할 프로세스를 pid로 명시해야하며 프로그래머가 커뮤니케이션할 프로세스의 pid를 알아야한ㄷ
(확장성이 X, 하드코딩)
- 가장 대표적인 애가 pipe mechanism
*indirect communication
- 운영체제가 메일박스로 전송하는 역할을하고
- 중간에 있는 메일박스가 communication link임
맨 처음에 이 메일 박스를 만들어줘야 함
- 메일박스만 있다면 프로세스간 여러개의 링크가 생성이 가능하다=> 두 프로세스 간 여러개의 메일박스
- 링크 하나가 여러개의 프로세스와 상관관계가 있을 수 있음
- unidirectional 이나 bi- directional 가능하다
1) 새로운 메일박스를 create
2) send/ receive로 메일박스를 통해 메일을 송수신
3) 메일박스를 파괴
- mailbox1 : 네개의 프로세스가 하나의 메일박스를 이용, 하나의 메일박스는 여러 프로세스와 상관관계를 만들 수 있음
- 관계를 추가적으로 구축하게되면 두 프로세스간 여러개의 링크를 둘 수 있음
한 메일박스를 여러 개의 프로세스가 공유하고 있을 때 발생할 수 있는 이슈
- P1,P2,P3가 메일박스A를 공유하고 있는데 P1이 send를 하면 P2와 P3중 누가 receive하는가
1) P2, P3 둘다 받음
2) 특정 시간에 한 프로세스만 receive함수를 호출할 수 있도록 설정
3) P1이 받는 프로세스를 선택할 수 있도록 함
* synchronization
- blocking send
1) sender가 send 시스템콜 호출
2) 메일박스 A로 메세지를 송신
3) 메세지가 메일박스나 receiver한테 도착할 때까지 sender block
4) 전송이 완료되면 다음라인 수행 가능
- non- blocking send
1) sender가 send 시스템콜 호출
2) 메일박스 A로 전송
3) 메세지가 어디에 도착하든지 말든지 다음라인 수행
- blocking receive
1) receiver가 receive 시스템콜 호출
2) 메일박스A에 아무것도 없으면 state는 waiting으로 전환
3) 메일박스로 메세지가 도착할 때까지 waiting
4) 메세지를 받으면 다음라인을 수행
- non-blocking receive
메일박스에서 메세지를 가져왔든지 말든지 신경 안쓰고
메세지가 없으면 없는 상태로 그냥 다음 라인을 수행함
* zero capacity
- 메일박스 크기가 메세지를 받을 수 없는 경우
- 굳이 메세지를 안보내고 신호같은 거로 알려주기만 하면 될 때 사용
- 버퍼링이 없음
* bounded, unbounded 는 automatic buffering
'CS > 오퍼레이팅 시스템' 카테고리의 다른 글
18. 멀티코어 프로그래밍 (0) | 2020.04.09 |
---|---|
17. 스레드 (0) | 2020.04.09 |
15. IPC 프로세스간 커뮤니케이션 : shared memory, producer-consumer문제 (0) | 2020.04.09 |
14. 고아프로세스와 좀비프로세스 (0) | 2020.04.09 |
13. 프로세스 시스템콜 (0) | 2020.04.09 |