오래 못 할 짓 하지 않기
[ 운영체제 ] 6. Inter Process Communication / PIPE 본문
프로세스의 종류는 2가지가 있다.
● 독립적 Independent
이건 자기가 할 거 알아서 하면 됨
(우리가 오늘 배울 건)
● 협력적 Cooperating
→ Cooperate하는 프로세스끼리 서로 영향을 주고 받는다.
그러기 위해서는 Inter Process Communication
IPC가 필요하다.
IPC의 종류
● Shared memory
● Message Passing
그럼 하나씩 알아보자
● Shared memory ( Producer / consumer 개념 )
: 프로세스 간에 소통하려고 하는 곳에 있는 메모리
서로 정보를 직접 던지는 게 아니라, 프로세스 사이에 있는 메모리에 두고 거기로 주고 받는다.
(쉽게 생각하면 케이시 헌병 건물에서 물건 받는 창구라고 생각하면 된다.)
* Shared memory를 Buffer라고 생각하고 학습해도 크게 문제 없을 것 같다.
(문제 생기면 수정하겠음)
이렇게 정보를 주고 받을 때 알아야 하는 개념이 있다.
● Producer / Consumer
이름에서 알 수 있듯이
정보를 만드는 프로세스와 소비하는 프로세스가 있다.
Producer와 consumer는 Shared memory를 통해 정보를 주고받는다!
● Share memory 특징
: circular queue로 구현된다.
- Producer가 움직일 때 ▶ Full인지 판단.
- Consumer가 움직일 땐 ▶ Empty인지 판단.
위에 거만 이해하면 됨. (아래도 로직은 같음)
- While(1)로 계속 돌아간다 {
- While( 조건 ) << 이 조건의 의미 = [ 이제 곧 넣으려고 하는 다음 칸이 빈 칸이 아니라, 나가려고 기다리는 애 ]
이 조건이면 앞 칸이 지금 차있다는 것이고, Circular 입장에서는 모든 칸이 다 찼다는 뜻이다.
- While에서 계속 기다린다... 그 조건이 아니라면
방금 입력 받은 걸 Buffer에 넣고, Circular 꼬리에 넣는다.
● Message - Passing
: 프로세스가 그냥 항상 소통할 상태인 매커니즘
● IPC 에서 제공하는 2가지 기능
1. Send ( message )
2. Receive ( message )
Message pass하는 방법에도 2가지가 있는데
직접 / 간접 방법이 있다.
직접 : Message의 목적지를 받는 프로세스한테 주고 , 보낸 프로세스로부터 받는지
간접 : 주고 받는 주소를 Mailbox로 하느냐 차이가 있다.
● Blocking = Synchronous : 메시지가 올 때까지 기다린다. (받기 전까진 blocked)
- Blocking send : sender는 자신이 보낸 메시지를 Receiver가 받을 때까지 막힌다.
- Blocking receive : receiver는 받은 메시지를 읽을 수 있을 때까지 막힌다. (Until a message is available)
= 원하는 게 끝까지 다 들어올 때까지 막힌다.
● Non - Blocking = Asynchronous : 메시지가 오든말든 그냥 할 거 함.
- Non - Blocking send : sender는 메시지를 보냄 +할 거 한다.
- Non - Blocking receive : receiver는 계속 받음. 들어오는 건 ( NULL || Message ) 이다.
(추가) Buffer 설명
임시적인 Queue라고 생각하면 된다.
크기에 따라 3종류로 나뉨
예제 코드
Pipe
: 2개 이상의 Process가 소통하는 배관 역할
● 일반적인 Pipe
- 부모와 자식 Process간에 단방향 소통
- 전형적으로, 부모 프로세스에서 파이프를 만들고, 이를 통해 자식 프로세스와 소통한다.
- fd[0] = read / fd[1] = write
+ Named pipes
: 부모 자식 관계 없이 그냥 양방향 pipe
(출처)
한동대학교 고윤민교수님 - OS
'3학년 1학기 > 운영체제 (OS)' 카테고리의 다른 글
[ 운영체제 ] 8. Thread (0) | 2024.04.05 |
---|---|
[ 운영체제 ] 7. Thread (0) | 2024.04.02 |
[ 운영체제 ] 5. 프로세스 - Parent,child (0) | 2024.03.25 |
[ 운영체제 ] 4. 프로세스 (0) | 2024.03.22 |
[ 운영체제 ] 3. OS Structure ( 디자인,Implementation ) (0) | 2024.03.19 |