일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- IPC
- 윤성우
- indirect communication
- OS
- process
- 운영체제
- System Structures
- Operating System
- tcp
- socket
- operating
- stack
- Data Structure
- DS
- 프로세스
- Process scheduling
- 열혈
- 스케듈링
- 자료구조
- C
- 데이터구조
- 데이타구조
- 스택
- direct communication
- 큐
- 링크드리스트
- Queue
- interprocess communication
- linked list
- 프로토콜 체계
- Today
- Total
미래와 연결될 첫걸음
Interprocess Communication(IPC) #3.4 Message-Passing 1 본문
● Messasge - Passing Systems
Shared Memory와 다르게 공유할 공간이 필요없습니다. 이 system이 메세지를 보내면서 두 process간에 소통합니다.
마치 채팅 프로그램인 카카오톡처럼요! Messasge - Passing을 하기 위해서는 두 가지 기능이 필요합니다.
바로, send(message)와 receive(messsage)입니다. 여기서 보내지는 message-size는 고정된 것이거나, 변수일 수 있습니다.
( size가 고정된 message는 system-level에서는 간단합니다. 그러나, 프로그램 실행면에서는 어렵습니다.
size가 바뀌는 message는 system-level에서는 복잡하지만, 프로그램 실행면에서는 간단합니다. )
종이컵에 실을 연결해서 전화놀이를 했던 경험들이 있으실겁니다. 이 두 종이컵에 말하는 것을 send라고 생각하고, 듣는 것을 receive라고 생각해봅시다. 이렇게 멀리 떨어져있는 종이컵에 말을 하고 귀를 갖다 대어 전화처럼 소통이 가능한 이유는 바로 실 때문입니다.
여기서도 마찬가지입니다. 실 역활을 해주는 것이 바로 link입니다. 소통을 하기 위해서 어떤 두 processes간에는 link로 연결되어 있어야합니다. 이 link를 하는 방법은 몇 가지가 있습니다.
- Direct or indirect communication (오늘은 이 부분만 살펴볼 것입니다.)
- Synchronous or asynchronous communication (*synchronous :동시 발생하는 , asynchronous: 동시 발생하지 않는)
- Automatic or explicit buffering
이에 대해 좀 살펴보겠습니다.
▶ Naming: processes끼리 communication을 하기 위해서는 명시적으로 서로 부를 수 있는 이름이 있어야 합니다.
- sender : message를 보내는 process, send( process_A, message )
- recipient : message를 받는 process, receive( process_B, message )
이렇게 되면, process_A와 process_B 자동적으로 둘 사이에는 link가 딱 하나만 생깁니다.
이렇게 processes끼리 직접 link되어 communication하는 것을 direct communication이라 합니다.
또, 위와 같이 두 process서로의 process 이름을 알고 communication하는 것을 symmetry라고 합니다.. 그렇다면, communucation을 할 때마다 process의 이름을 알아야 하는가? 그건 아닙니다. recipient입장에서는 오는 message만 받으면 될 것입니다. 그래서 sender는 recipient의 이름을 알아야 하지만, recipient는 누가 보내는지 sender의 이름을 몰라도 됩니다. 이를 asymmetry라고 합니다.
send ( process_A, message) -----> receive (id, message) 이런 꼴이죠.
indirect commuincation은 processes끼리 직접 communication을 하는 것이 아니라 mailboxes or ports를 통해 message를 주고 받는 것입니다. 이 mailbox는 unique한 id가 있어서 이 id로 message를 보내고 받습니다.
send ( mailbox_id, message) -----> receive ( mailbox_id, message ) 이런 모양입니다. 이를 사용하면, 몇가지 특성이 있습니다.
1. 같은 mailbox id를 가진 process들 끼리 link가 된다.
2. link가 두 process보다 더 많은 process와 연관이 있을 수 있다. ( Link가 여러개 생길 수 있다.)
3. link가 다르더라도 각 link는 한 mailbox에 해당한다. (즉, Link는 다르지만 같은 mailbox를 가진다.)
조그만 더 깊게 생각해보겠습니다.
만약에 Process_A, Process_B, Process_C가 있고 mailbox 1개가 있다고 가정해봅시다. Process_A가 "Hello world!"라는 message를 mailbox로 보냈습니다. 그러면 Process_B와 Process_C 중에서 어떤 Process가 receive()를 실행하여 mailbox에서 "Hello world!" 메세지를 받을까요?
여기에 답이 있습니다.
무작위로 두 process 중 아무거나 선택해서 message를 받습니다. 그러나 정말 무작위로 받는 것은 아니고, 받는 algorithm에 따라 결정됩니다. 이 algorithm은 나중에 뒤에서 배울 것입니다.
오늘은 direct communication과 indirect communication에 대해 살펴보았습니다.
남은 나머지 두개는 다음에 살펴보겠습니다.
'Infra > OS' 카테고리의 다른 글
#2.3 System Structures - System Calls (0) | 2022.01.12 |
---|---|
#2.1 System Structures - OS services (0) | 2022.01.10 |
Interprocess Communication(IPC) #3.4 Shared Memory (0) | 2019.06.29 |
Interprocess Communication(IPC) #3.4 (1) | 2019.06.29 |
Operations on Processes #3.3 (0) | 2019.06.26 |