티스토리 뷰
- 프로세스의 상호협력
- 병행 프로세스들의 상호협력
- 공통작업을 수행하기 위해 서로 협동하는 경우
- 예: 생산자/소비자 문제, 판독기/기록기 문제
- 병행 프로세스들의 상호협력
- 생산자/소비자 문제
- 유한 버퍼 문제
- 생산자 ---버퍼---> 소비자
- 생산자: 버퍼에 데이터를 채우는 프로세스
- 버퍼가 가득차 있다면 생산자는 대기해야함
- 소비자: 버퍼에 있는 데이터를 읽어내는 프로세스
- 버퍼가 비어 있다면 소비자는 대기해야함
- 상호배제, 동기화 필요
- 세마포어 이용 - mutex, empty, full
- 생산자가 버퍼에 넣는 과정과 소비자가 버퍼에서 데이터를 꺼내는 작업이 서로 상호배제 되어야 함
- 생산자 프로세스
- nextp에 데이터 항목을 생산
- p(empty); empty의 초기값 n
- 버퍼가 꽉차있다면 empty값은 0
- p(mutex); --> nextp를 버퍼에 넣음 --> v(mutex);
- v(full); full
- 소비자 프로세스
- p(full); full이 0인 경우 대기상태 / 버퍼가 비어있다면 소비자 프로세스는 시작되지 않음
- p(mutex); --> 버퍼에서 데이터항목을 꺼내 nextc에 넣음 --> v(mutex); --> nextc를 소비
- v(empty); 데이터 항목을 꺼낸 후 empty 값을 확인하여 대기하고 있는 생산자 프로세스가 있다면 실행하도록 함
- 상호배제
- mutex의 초기값 1
- 동기화
- full의 초기값 0
- empty의 초기값 n
- 판독기/기록기 문제
- 공유 데이터 객체(파일, 레코드 등)
- 판독기
- 데이터 읽기: 여러 개의 판독기가 동시에 공유 데이터 객체에 접근하는 것에는 문제가 없음
- 기록기
- 데이터 쓰기: 기록기가 다른 기록기 또는 판독기와 동시에 공유 데이터 객체에 접근하는 것은 문제
- 상호배제 필요
- 우선순위에 따른 문제의 변형
- 제 1판독기/기록기 문제(판독기 우선)
- 기록기가 이미 공유객체의 사용을 허가 받은 것이 아니라면 판독기는 대기하지 않음
- 기록기의 기아상태 유발 가능
- 세마포어 이용 - mutex, wrt
- 기록기 프로세스
- p(wrt);
- 쓰기 수행
- v(wrt);
- 판독기 프로세스
- p(mutex);
- readcount := readcount+1
- if readcount=1 then p(wrt);
- v(mutex);
- 읽기 수행
- p(mutex);
- readcount := readcount-1
- if readcount=0 then v(wrt);
- v(mutex);
- 상호배제
- wrt의 초기값 1
- 판독기 우선
- 변수 readcount의 초기값 0
- 기록기 프로세스
- 제2 판독기/기록기 문제(기록기 우선)
- 일단 기록기가 준비되었다면 기록을 가능한 한 빨리 수행할 수 있도록 함
- 판독기의 기아상태 유발 가능
- 제 1판독기/기록기 문제(판독기 우선)
- 판독기
- 공유 데이터 객체(파일, 레코드 등)
- 프로세스 간의 통신(IPC, InterProcess Communication)
- 병행 프로세스 사이의 통신을 위한 방법
- 공유기억장치 기법
- 프로세스 간에 공유변수를 이용하여 정보를 교환
- 프로세스 A / 공유기억장치 / 프로세스 B
- 공통된 기억장치가 있으므로 서로 읽거나 쓰기를 함 -> 정보교환
- 예: 유한 버퍼
- 고속 통신 가능
- 통신기능 제공의 책임: 응용 프로그래머
- 메세지 시스템 기법
- 메시지를 교환하는 방식으로 정보를 교환
- send/receive 연산자
- 프로세스 A <-send, receive-> 커널 / 프로세스 B <-send, receive-> 커널
- 소량의 데이터 교환에 유용
- 통신기능 제공의 책임: 운영체제
- 통신링크
- 프로세스들 사이에 메시지를 주고받기 위한 연결통로
- 프로세스 P --통신링크-- 프로세스 Q
- 프로세스들 사이에 메시지를 주고받기 위한 연결통로
- 논리적 구현에 대한 이슈
- 어떻게 링크를 설정?
- 한 링크가 2개 이상의 프로세스와 연결 가능? 두 프로세스 사이에 얼마나 많은 링크가 존재?
- 링크의 용량은? 메시지의 크기는? 링크는 단방향인가 양방향인가?
- 직접 통신
- 메시지 전달 연산에 수신자나 송신자 이름을 명시
- 대칭형
- 프로세스 P
- receive(Q, message);
- send(Q, m2);
- 프로세스 Q
- send(P, message);
- receive(P, m2);
- 프로세스 P
- 비대칭형
- 프로세스 P
- receive(id, message);
- Q 말고도 S나 R프로세스와도 통신하고 있다면 id값을 통해 유연하게 통신할 수 있음
- receive(id, message);
- 프로세스 Q
- send(P, message);
- 프로세스 P
- 대칭형
- 메시지 전달 연산에 수신자나 송신자 이름을 명시
- 간접 통신(우편함)
- 메시지 전달 연산에 우편함 이름을 명시
- 프로세스 P
- send(A, message);
- 우편함 A
- 프로세스 Q
- receive(A, message);
- 통신링크는 공유 우편함이 있는 경우에만 설정됨
- 하나의 링크는 2개 이상의 프로세스들과 연관될 수 있으며 각 통신 프로세스 쌍 사이에는 여러 링크가 존재 가능
- 링크는 단방향 또는 양방향임
- 프로세스 P
- 우편함이 프로세스에 소속되는 경우
- 프로세스 P
- 송신만 가능
- 우편함
- 프로세스 Q (우편함 소유)
- 수신만 가능
- 프로세스 P
- 우편함이 운영체제에 소속되는 경우
- 프로세스 P
- 우편함
- 프로세스 Q (우편함 생성자 -> 소유)
- 수신 가능
- 메시지 전달 연산에 우편함 이름을 명시
- 링크의 용량
- '0' 용량
- 프로세스 P --큐 없음--> 프로세스 Q
- 동기화 필요
- 프로세스 P --큐 없음--> 프로세스 Q
- 제한된 용량
- 프로세스 P --(큐 크기n) --> 프로세스 Q
- 큐가 가득 차면 송신자는 대기
- 프로세스 P --(큐 크기n) --> 프로세스 Q
- 무제한 용량
- 프로세스 P --큐(크기 무한) --> 프로세스 Q
- 송신자는 대기할 필요가 없음
- 프로세스 P --큐(크기 무한) --> 프로세스 Q
- '0'용량이 아닌 경우 메시지 도착 여부의 인지 방법
- 프로세스 P
- send(Q, message);
- 프로세스 Q
- receive(P, message);
- sned(P, "ack");
- 비동기적 통신
- 프로세스 P
- '0' 용량
- 예외조건 처리
- 프로세스가 종료된 경우
- 송신 프로세스 Q가 종료된 경우
- 프로세스 P
- receive(Q, m);
- 프로세스 Q
- 종료됨
- P를 종료
- Q가 종료한 사실을 P에 알림
- 프로세스 P
- 수신 프로세스 Q가 종료된 경우
- 프로세스 P
- send(Q, m);
- 프로세스 Q
- 종료됨
- 버퍼가 없는 경우
- Q는 send하고나서 계속 기다리게 되므로 처리가 필요함
- P를 종료
- Q가 종료한 사실을 P에 알림
- 프로세스 P
- 송신 프로세스 Q가 종료된 경우
- 메시지를 상실한 경우
- 운영체제가 탐지 후 메시지 재전송
- 송신 프로세스가 탐지 후 메시지 재전송
- 운영체제가 탐지 후 송신 프로세스에게 통지
- 탐지방법: 시간 제한
- 메시지가 혼합된 경우
- 오류 탐지 후 재전송
- 탐지방법: checksum
- 프로세스가 종료된 경우
- 통신 링크는 자동 설정됨
- 하나의 링크는 두 프로세스 사이만 연관되며 각 통신 프로세스 쌍 사이에는 정확히 하나의 링크가 존재
- 링크는 양방향임
- 공유기억장치 기법
- 두 방법은 상호 배타적이 아님
- 단일 운영체제 내에서 동시에 사용 가능
- 병행 프로세스 사이의 통신을 위한 방법
- 유한 버퍼 문제
'운영체제' 카테고리의 다른 글
[운영체제] 교착상태 (0) | 2021.04.15 |
---|---|
[운영체제] 교착상태 (0) | 2021.04.07 |
[운영체제] 병행프로세스 (0) | 2021.03.30 |
[운영체제] 스케줄링 알고리즘 (0) | 2021.03.24 |
[운영체제] 프로세스 개요 (0) | 2021.03.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- BFS
- 인접행렬
- 병행프로세스
- 인접리스트
- 재귀함수
- C
- client side rendering
- 세마포어
- dfs
- 퀵정렬
- 운영체제
- 알고리즘
- 배열
- 클래스
- 동적프로그래밍
- server side rendering
- 자료구조
- C++
- Java
- stackframe
- 구조체
- 스텍
- Stack
- 최단경로
- javascript
- 입출력장치
- react
- 이진탐색
- 교착상태
- 소프트웨어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함