728x90
어떠한 작업을 병행 프로세스로 구현할 경우 각각의 프로세스들이 완전히 독립적으로 동작함으로써 단지 실행 성능을 높이고자 하는 경우도 가능하겠지만, 일반적으로는 병행 실행되는 프로세스들이 상호협력하며 진행된다. 생산자/소비자 문제, 판독기/기록기 문제의 예를 통해 상호협력 프로세스의 일반적 구현 방법을 살펴보고, 병행 프로세스 사이의 통신을 위한 방법에 대하여 논리적 측면에서 살펴본다.
목표
-
세마포어를 이용하여 생산자/소비자 문제를 해결할 수 있다.
-
세마포어를 이용하여 판독기/기록기 문제를 해결할 수 있다.
-
프로세스 사이의 통신을 위한 논리적 구조에 대해 설명할 수 있다.
- 프로세스의 상호 협력
- 병행 프로세스들의 상호 협력
- 공통작업을 수행하기 위해 서로 협동하는 경우
- 생산자/소비자 문제
- 생산자 -> 버퍼 -> 소비자
- 생산자 : 버퍼에 데이터를 채우는 프로세스
- 소비자 : 버퍼에 있는 데이터를 읽어내는 프로세스
- 유한버퍼 문제
- 버퍼 : 상호배제 필요
- 버퍼가 가득 차 있다면 생산자는 대기해야 함
- 버퍼가 비어 있다면 소비자는 대기해야 함
- 동기화 필요
- 세마포어 이용 - mutex, empty, full
- 동기화
- - empty의 초깃값 n (버퍼 크기 n)
- - full의 초깃값 0
- 상호배제
- - mutex의 초깃값 1
- 동기화
- 생산자 -> 버퍼 -> 소비자
- 판독기/기록기 문제
- 여러 개의 판독기가 동시에 공유 데이터 객체에 접근하는 것은 문제 없음
- 기록기가 다른 기록기 또는 판독기와 동시에 공유 데이터 객체 접근하는 것은 문제
- 우선 순위에 따른 문제의 변형
- 제1 판독기/기록기 문제 (판독기 우선)
- 기록기가 이미 공유객체의 사용을 허가 받은 것이 아니라면 판독기는 대기하지 않음
- 기록기의 기아상태 유발 가능
- 제2 판독기/기록기 문제 (기록기 우선)
- 일단 기록기가 준비되었다면 기록을 가능한 한 빨리 수행할 수 있도록 함
- 판독기의 기아상태 유발 가능
- 제1 판독기/기록기 문제 (판독기 우선)
- 제 1 판독기/기록기 문제
- 세마포어 이용 - mutex, wrt
- 판독기 우선
- 변수 readcount의 초깃값 0
- mutex의 초깃값 1
- 상호배제
- wrt의 초깃값 1
- 판독기 우선
- 세마포어 이용 - mutex, wrt
- 병행 프로세스들의 상호 협력
- 프로세스 간의 통신 (IPC, InterProcess Communication)
- 병행 프로세스 사이의 통신을 위한 방법
- 공유기억장치 방법
- 메시지 시스템 기법
- 두 방법은 상호 베타적이 아님
- 공유기억장치 기법
- 프로세스 간에 공유변수를 이용하여 정보를 교환
- 예) 유한 버퍼
- 고속 통신 가능
- 통신기능 제공의 책임 : 응용 프로그래머
- 메시지 시스템 기법
- 메시지 교환방식으로 정보를 교환
- send/recieve 연산자
- 소량의 데이터 교환에 유용
- 통신기능 제공의 책임 : 운영체제
- 통신 링크
- 프로세들 사이에 메시지를 주고받기 위한 연결통로
- 논리적 구현에 대한 이슈
- 어떻게 링크를 설정?
- 한 링크가 2개 이상의 프로세스와 연결 가능? 두 프로세스 사이에 얼마나 많은 링크 존재?
- 링크의 용량은? 메시지의 크기는? 링크는 단방향인가 양방향인가?
- 직접 통신
- P <-> Q
- P : recieve(Q, message)
- Q : send(P, message)
- 미시지 전달 연산에 수신자나 송신자 이름을 명시
- 통신 링크는 자동 설정됨
- 하나의 링크는 두 프로세스 사이만 연관되며 각 통신 프로세스 쌍 사이에는 정확히 하나의 링크가 존재
- 링크는 양방향임
- 대칭형
- 비대칭형의 직접 통신도 가능
- P : receive(id, message) -> id로 R도 올 수 있고 S도 올 수 있음
- Q : send(P, message)
- P <-> Q
- 간접 통신 (우편함)
- 메시지 전달 연산에 우편함 이름을 명시
- p <-> 우편함 A <-> Q
- p : send(A, message)
- Q : recieve(A, message)
- 통신 링크는 공유 우편함이 있는 경우에만 설정됨
- 하나의 링크는 2개 이상의 프로세스들과 연관될 수 있으며 각 통신 프로세스 쌍 사이에는 여러 링크가 존재 가능
- 단방향이 될 수도 있고 양방향이 될 수도 있음
- 우편함이 프로세스에 소속되는 경우
- 각 프로세스는 송신만 가능, 우편함 소유 프로세스는 수신만 가능
- 우편함이 운영체제 소속되는 경우
- 소속권을 넘겨주면 송수신 다 가능
- 링크의 용량
- '0' 용량
- P <-> 큐 없음 <-> Q
- 동기화 필요
- 제한된 용량
- P <-> 큐(크기 n) <-> Q
- 큐가 가득 차면 송신자는 대기
- 무제한 용량
- P <-> 큐(크기 무한) <-> Q
- 송신자는 대기할 필요가 없음
- '0' 용량이 아닌 경우 메시지 도착 여부의 인지 방법
- p : send(Q, message); recieve(Q, message);
- Q : receive(P, message); send(P, "ack")
- -> 비동기적 통신
- '0' 용량
- 예외조건 처리
- 프로세스가 종료된 경우
- 송신 프로세스 Q가 종료된 경우
- 운영체제가 다음과 같은 것을 전달할 수 있어야 함
- P를 종료
- Q가 종료한 사실을 P에 알림
- 수신 프로세스 Q가 종료가 된 경우
- 버퍼가 없는 경우
- P를 종료
- Q가 종료한 사실을 P에 알림
- 버퍼가 없는 경우
- 송신 프로세스 Q가 종료된 경우
- 메시지를 상실한 경우
- 운영체제가 탐지 후 메시지 재전송
- 송신 프로세스가 탐지 후 메시지 재전송
- 운영체제가 탐지 후 송신 프로세스에게 통지
- 탐지방법 : 시간제한
- 메시지가 혼합된 경우
- 오류 탐지 후 재전송
- 탐지방법 : checksum
- 오류 탐지 후 재전송
- 프로세스가 종료된 경우
- 병행 프로세스 사이의 통신을 위한 방법
'study-knou > 운영체제' 카테고리의 다른 글
병행 프로세스 1 (0) | 2019.04.14 |
---|---|
스케줄링 알고리즘 (0) | 2019.04.14 |
2. 프로세스 개요 (0) | 2019.03.13 |
1강 운영체제의 개요 (0) | 2019.03.11 |