Index
Search
1. 생산자-소비자 문제
1.1. 문제 정의
•
두 협력 프로세스 사이에 버퍼를 두고 생산자와 소비자의 상황을 다루는 문제
•
생산자
◦
데이터를 넣는 프로세스
•
소비자
◦
데이터를 꺼내는 프로세스
1.2. 문제 조건
•
버퍼의 여러 프로세스가 동시에 접근할 수 없음
◦
버퍼에 데이터를 넣는 동안에는 데이터를 꺼낼 수 없음
◦
버퍼에서 데이터를 꺼내는 동안에는 데이터를 넣을 수 없음
→ 상호 배제 필요
•
버퍼의 크기가 유한 (유한 버퍼 문제)
◦
버퍼가 가득 찬 경우, 생산자는 대기해야 함
◦
버퍼가 빈 경우, 소비자는 대기해야 함
→ 동기화 필요
•
초기값
◦
상호배제: 세마포어 mutex 초기값 1
1.3. 세마포어를 이용한 해결 (1) - 버퍼가 가득찬 경우 동기화
•
세마포어 empty (초기값 n)
◦
n: 버퍼 크기
◦
버퍼에 빈칸이 몇개나 있는지를 나타냄
•
생산자 코드
◦
데이터를 넣을 수 있는지 체크. 넣을 수 없다면 대기
1.4. 세마포어를 이용한 해결 (2) - 버퍼가 빈 경우 동기화
•
세마포어 full (초기값 0)
◦
가득찬 것이 몇개나 있는지?
•
생산자 코드
◦
데이터를 넣을 수 있는지 체크. 넣을 수 없다면 대기
1.5. 세마포어를 이용한 해결 (3) - 최종
•
3개의 세마포어
◦
mutex (초기값 1)
◦
empty (초기값 n)
◦
full (초기값 0)
2. 판독기-기록기 문제
2.1. 문제 정의
•
여러 협력 프로세스 사이에 공유자원을 두고 판독기와 기록기의 상황을 다루는 문제
•
판독기
◦
데이터를 읽는 프로세스
•
기록기
◦
데이터를 쓰는 프로세스
2.2. 문제 조건
•
하나의 기록기가 공유자원에 데이터를 쓰는 중에는 다른 기록기나 판독기는 공유자원에 접근할 수 없음
◦
공유자원에 데이터를 쓰는 동안에는 누구도 접근할 수 없음
◦
공유자원에서 데이터를 읽는 동안에는 데이터를 쓸 수 없음
→ 상호 배제 필요
•
여러 판독기는 동시에 공유자원에서 데이터를 읽을 수 있음
◦
판독기가 읽는 중, 새로운 판독기 읽기 시도 → 가능
◦
판독기가 읽는 중 기록기 대기
→ 새로운 판독기 읽기 시도
→ 가능/불가능
2.3. 제1판독기-기록기 문제 (판독기 우선 문제)
•
판독기가 공유자원에 접근 중이라면 기록기보다 판독기에 우선순위를 문제
•
즉 새로운 판독기는 즉시 공유자원에 접근 가능
•
문제점
◦
기록기의 기아상태 유발 가능
2.4. 세마포어를 이용한 해결 (1) - 판독기 우선 문제
•
일반 변수
◦
rcount (초기값 0)
•
세마포어
◦
wrt (초기값 1)
◦
mutex (초기값 1)
▪
기록기 코드가 공유자원에 쓰는 도중에, 판독기 읽기가 동시에 2개가 들어가는 경우, rcount가 바로 2가 되어 공유자원 읽기가 실행될 수 있음. 따라서 rount 증감과 조건 검사에 mutex가 또 필요함
2.5. 제2판독기-기록기 문제 (기록기 우선 문제)
•
판독기가 공유자원에 접근 중이라면 기록기에 우선 순위를 줌
•
즉 대기중인 기록기가 있다면 새로운 판독기는 공유자원에 접근 불가능
•
문제점
◦
판독기의 병행성이 떨어짐
◦
판독기의 기아상태 유발 가능성
2.6. 세마포어를 이용한 해결 (2) - 기록기 우선 문제
•
일반 변수
◦
wcount (초기값 0)
•
세마포어
◦
rd (초기값 1)
◦
wrt (초기값 1)
◦
mutex1 (초기값 1)
◦
mutex2 (초기값 1)
◦
mutex3 (초기값 1)
3. 프로세스 간 통신
3.1. 프로세스간 통신 (IPC)
•
InterProcess Communication
•
병행 프로세스가 데이터를 서로 공유하는 방법
◦
공유 메모리 방법
◦
메세지 전달 방법
•
하나의 운영체제에서 두 방법 함께 사용 가능
3.2. 공유 메모리 방법
•
협력 프로세스가 동일한 변수를 사용
◦
동일한 변수: 공유자원 메모리 공간 사용
•
대량 데이터 교환 → 고속 통신 가능
•
통신상 발생 가능 문제 해결 주체
◦
응용 프로그래머
•
예시)
◦
생산자-소비자 문제의 유한 버퍼
◦
판독기-기록기 문제의 공유 자원
◦
전역변수나 heap 메모리 영역
3.3. 메세지 전달 방법
•
협력 프로세스가 메시지를 주고 받음
◦
시스템 호출
▪
send()
▪
receive()
•
소량 데이터 교환에 적합
•
통신상 발생 가능 문제 해결 주체
◦
운영 체제
3.4. 메세지 전달 방법의 논리적 구조
•
통신 링크
◦
메세지가 지나다니는 통로
•
통신 링크의 구현 형태
◦
연결 대상 - 두 프로세스, 셋 이상 프로세스
◦
두 프로세스 사이 링크 개수 - 하나, 둘 이상
◦
방향성 - 단방향, 양방향
◦
용량 - 무한, 유한, 0
3.5. 통신 링크의 용량
•
무한
◦
큐 크기 무한
◦
송신자는 대기 없음
•
유한
◦
큐 크기 n
◦
송신자는 큐가 가득차면 대기
•
0
◦
큐가 없음
◦
송신자는 수신자가 메세지를 받을 수있을 때 까지 대기
3.6. 직접 통신
•
두 프로세스가 직접 서로를 지정하여 메세지 전달
•
오직 하나의 통신 링크가 자동 설정
•
하나의 통신 링크는 오직 두 프로세스 사이에만 연관
•
통신 링크는 양방향
•
대칭형 주소 지정
◦
받는 프로세스 주소 지정
•
비대칭형 주소 지정
◦
수신자가 여러 송신자와 통신 링크를 갖는 경우 사용
◦
받는 프로세스의 변수 선언
3.7. 간접 통신
•
프로세스 사이에 둔 우편함을 통해 메세지 전달
•
같은 우편함을 이용하는 경우 통신 링크 설정
•
여러 우편함을 이용하면 여러개의 통신 링크 존재
•
하나의 통신 링크가 여러 프로세스와 연관 가능
•
통신 링크는 단방향 또는 양방향
◦
우편함이 수신 프로세스에 소속
▪
수신자 하나
▪
통신 링크는 단방향
▪
수신 프로세스가 종료하면 우편함도 사라짐
◦
우편함이 운영체제에 소속
▪
수신자가 여럿
▪
한순간에 하나의 수신자만 가능
▪
운영체제가 수신자 관리
▪
통신 링크는 양방향