Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 코딩테스트실력진단
- 웹개발기초
- 이것이자바다확인문제
- 컴퓨터비전
- 백준가운데를말해요
- 이것이자바다
- 백준9012
- 백준10828
- 코드트리
- 합성곱연산
- BOJ
- 백준괄호
- 백준스택
- 카카오코테
- 딥러닝
- KT포트포워딩
- java
- 백준
- 운영체제
- 이것이자바다9장
- 코테
- BOJ1655
- 냅색알고리즘
- 스파르타코딩클럽
- 확인문제
- 백준평범한배낭
- 윤곽선검출
- 백준온라인저지
- 가운데를말해요
- 2019카카오코테
Archives
- Today
- Total
코딩하는 락커
05. 프로세스간 통신: Chapter 3. Processes 본문
3.4 프로세스 간 통신 Interprocess Communication(IPC)
- 운영 체제 내에서 실행되는 병행 프로세스들은 독립적이거나 협력적
- 독립적인 프로세스: 프로세스가 시스템에서 실행 중인 다른 프로세스들과 데이터를 공유하지 않는 프로세스
- 협력적인 프로세스: 프로세스가 시스템에서 실행 중인 다른 프로세스들과 데이터를 공유하는 프로세스
- 협력적 프로세스들은 데이터를 보내거나 받을 수 있는 프로세스 간 통신(Interprocess communication, IPC) 기법이 필요함
- 프로세스 통신 모델
- 공유 메모리shared memory 모델
- 협력 프로세스들에 의해 공유되는 메모리 영역이 구축됨
- 메시지 전달message passing 모델
- 통신이 협력 프로세스들 사이에 교환되는 메시지를 통하여 이루어짐
- 공유 메모리shared memory 모델
공유 메모리 시스템에서의 프로세스 간 통신
- 생산자-소비자 문제
- 생산자 프로세스: 정보를 생산
- 소비사 프로세스: 정보를 소비
- 생산자-소비자 문제 예시
- 컴파일러(생산자, 어셈블리 코드 생성) - 어셈블러(소비자, 어셈블리 코드 소비)
- 어셈블러(생산자, 목적 모듈 생산) - 로더(소비자, 목적 모듈 소비)
- 웹 서버(생산자, HTML 파일 등 웹 콘텐츠 생선) - 브라우저(소비자, 웹 콘텐츠 소비)
- 생산자-소비자 문제 해결책
- 공유 메모리 사용
- 생산자가 정보를 채워넣을 수 있고 소비자가 소모할 수 있는 항목들의 버퍼가 반드시 사용 가능해야 함
- 버퍼는 생산자와 소비자가 공유하는 메모리 영역에 존재함
- 생산자는 한 항목 생성 / 소비자는 그 동안에 다른 항목 소비
- 무한 버퍼unbounded buffer를 사용하는 경우
- 생산자: 계속 새로운 항목을 생산할 수 있음
- 소비자: 새로운 항목을 기다려야 할 수도 있음
- 유한 버퍼bounded buffer를 사용하는 경우
- 생산자: 모든 버퍼가 채워져 있으면 반드시 기다려야 함
- 소비자: 버퍼가 비어 있는 경우 반드시 기다려야 함
- 공유 메모리 사용
- 생산자-소비자 문제 코드
// Shared Buffer
#define BUFFER_SIZE 10
typedef struct {
...
item;
};
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
// Producer
item next_produced;
while (true){
// produce an item in next-produced
while(((in + 1)% BUFFER_SIZE) == out);
buffer[in] = next_produced;
in = (in + 1) % BUFFER_SIZE;
}
// Producer
item next_consumed;
while (true){
// produce an item in next-produced
while(in == out);
next_consumed = buffer[out];
out = (out + 1) % BUFFE_SIZE;
// consume the item in next_consumed
}
3.6 메시지 전달 시스템에서의 프로세스 간 통신
- shared memory 통신 방법은 프로세스들이 메모리 영역을 공유해야 하며, 공유 메모리에 접근하고 조작하는 코드가 응용 프로그래머에 의해 명시적으로 작성되어야 함
- 메시지 전달 방법message passing system
- 운영체제가 메시지 전달 시스템을 통하여 서로 협력하는 프로세스 간의 통신 수단을 제공
- 동일한 주소 공간을 공유하지 않고도 프로세스들이 통신을 하고, 그들의 동작을 동기화 할 수 있도록 허용하는 기법 제공
- message passing system의 두 가지 연산
- send(message)
- recevice(message)
- 프로세스 P와 프로세스 Q가 통신을 원하면 반드시 서로 메시지를 보내고 받아야 함
- P와 Q 사이에 통신 연결communication link이 설정되어야 함
- 통신 연결을 구현하는 3가지 방법
- 직접 또는 간접 통신
- 동기식 또는 비동기식 통신
- 자동 또는 명시적 버퍼링
명명
- 직접 통신
- 통신을 원하는 프로세스는 통신의 수신자 도는 송신의 이름을 명시해야 함
- send(P, message) : 프로세스 P에게 메시지를 전송한다
- receive(Q, message): 프로세스 Q로부터 메시지를 수신한다
- 특성
- 통신은 원하는 각 프로세스의 쌍들 사이에 연결이 자동으로 구축되며, 프로세스들은 통신하기 위해 상대방의 신원identity만 알면 됨
- 연결은 정확히 두 프로세스 사이에만 연결됨
- 통신하는 프로세스들의 각 쌍 사이에는 정확히 하나의 연결이 존재해야 함
- 통신을 원하는 프로세스는 통신의 수신자 도는 송신의 이름을 명시해야 함
- 간접 통신
- 메시지들이 메일 박스mail box 또는 포트port로 송신되고, 그로 부터 수신됨
- 메일 박스는 추상적으로 프로세스들에 의해 메시지들이 넣어지고 메시지들이 제거될 수 있는 객체라고 볼 수 있음
- 각 메일 박스는 고유의 id를 가짐
- send(A, message): 메시지를 메일 박스A 로 송신한다
- receive(A, message): 메시지를 메일 박스A 로 수신한다
- 특성
- 한 쌍의 프로세스들 사이의 연결은 이들 프로세스가 공유 메일 박스를 가질 때만 구축됨
- 연결은 두 개 이상의 프로세스들과 연관될 수 있음
- 통신하고 있는 각 프로세스들 사이에는 다수의 서로 다른 연결이 존재할 수 있고, 각 연결은 하나의 메일 박스에 대응됨
- 메일 박스는 한 프로세스 또는 운영체제에 의해 소유될 수 있음
- 운영체제가 간접 통신을 위해서 한 프로세스에게 제공해야 하는 기법
- 새로운 메일 박스 생성
- 메일 박스를 통해 메시지를 송신하고 수신
- 메일 박스 삭제
- 코드
// Producer
message next_produced;
while(true){
// produce an item in next_produced
send(next_produced)
}
// Consumer
message next_consumed;
while(true){
receive(next_consumed);
// consume an item in next_consumed
}
동기화synchronization
- 프로세스 간의 통신은 send와 receive 프로세스에 대한 호출에 의해 발생함
- send와 receive를 설계하는 옵션
- 봉쇄형blocking (동기식synchronous)
- blocking send: 송신하는 프로세스는 수신 프로세스 또는 메일 박스에 의해 수신될 때 까지 봉쇄한다(기다린다)
- blocking receive: 메시지가 이용 가능할 때 가지 수신 프로세스가 봉쇄된다(기다린다)
- 비봉쇄형non-blocking (비동기식asynchronous)
- non-blocking send: 송신하는 프로세스는 메시지를 보내고 작업을 재시작한다
- non-blocking receive: 송신하는 프로세스가 유효한 메시지 또는 Null을 받는다
- 봉쇄형blocking (동기식synchronous)
'📀 운영체제' 카테고리의 다른 글
07 ~ 08. 쓰레드의 이해: Chapter 4. Thread & Concurrency (Part 1 ~ Part 2) (0) | 2022.05.30 |
---|---|
06. 프로세스간 통신의 실제: Chapter 3. Processes (0) | 2022.05.24 |
04. 프로세스의 생성: Chapter 3. Processes (Part 2) (0) | 2022.05.16 |
03. 프로세스의 이해 (0) | 2022.05.10 |
02. 운영체제의 개념과 구조 (0) | 2022.05.09 |
Comments