Computer Science/운영체제
운영체제 5강 :: 생산자-소비자 문제, 프로세스 간 통신
HJPlumtree
2023. 4. 19. 21:12
운영체제에서 기억하고 싶은 내용
생산자-소비자 문제 정의
생산자: 데이터를 버퍼에 넣는 프로세스
소비자: 데이터를 버퍼에서 꺼내는 프로세스
조건
- 버퍼에 여러 프로세스가 동시에 접근할 수 없다
- 버퍼에 넣는 거나, 꺼내는 거나 동시에 접근할 수 없다
- => 상호배제 필요하다
유한 버퍼 문제
- 버퍼가 가득 찬 경우 생산자는 대기해야 한다
- 버퍼가 빈 경우 소비자는 대기해야 한다
- => 동기화 필요하다
세마포어를 이용해서 해결해볼까!
- 세 가지 세마포어를 사용
- mutex로 동시 접속 못하도록,
- empty와 full로 뭘 했는지 이해는 안되네
생산자 코드
While(true) {
데이터 생산
P(empty);
P(mutex);
버퍼에 데이터 넣는다 // 임계 영역
V(mutex);
V(full);
}
소비자 코드
While(true) {
P(full);
P(mutex);
버퍼에서 데이터 꺼낸다 // 임계 영역
V(mutex);
V(empty);
데이터 소비
}
판독기-기록기 문제
공유 자원을 두고 판독기와 기록기의 상황을 다루는 문제
- 판독기: 데이터 읽는 프로세스
- 기록기: 데이터 쓰는 프로세스
생산자-소비자는 둘 다 기록기라는 것이 다르네
조건
1. 기록기가 데이터 쓰는 중에 누구도(기록기, 판독기) 공유자원에 접근할 수 없다
데이터를 읽는 동안 데이터를 쓸 수 없다
=> 상호배제 필요
2. 여러 판독기는 동시에 공유자원에서 데이터를 읽을 수 있다
제1 판독기-기록기 문제
- 판독기 우선순위를 준다
- 판독기가 공유자원에 접근하면 기록기보다 판독기 먼저
- 판독기는 즉시 공유자원에 접근 가능
- => 문제점: 기록기 기아상태 유발
세마포어를 이용해서 해결해볼까!
기록기 코드
P(wrt);
공유자원에 쓰기
V(wrt);
판독기 코드
P(mutex);
rcount = rcount + 1;
if (rcount == 1) P(wrt);
V(mutex);
공유자원에서 읽기
P(mutex);
rcount = rcount - 1;
if (rcount == 0) V(wrt);
V(mutex);
제2 판독기-기록기 문제
- 기록기에 우선순위 준다
- 기록기가 대기중이면 판독기는 공유자원 접근 불가능
- 판독기 기아상태 유발 가능
프로세스 간 통신(IPC)
InterProcess Communication
병행 프로세스가 데이터를 서로 공유하는 방법
공유 메모리 방법
- 공유자원의 메모리 공간에 동일한 변수 사용
- 장점: 대량 데이터 교환 편해서 고속 통신 가능하다
- 단점: 통신산 발생 가능한 에러를 응용 프로그래머가 다 처리해야된다..
메시지 전달 방법
- 협력 프로세스가 메시지 주고 받는다
- 시스템 호출 send(), receive()
- 소량 데이터 교환에 적합
- 장점: 통신상 발생 가능 문제를 운영체제가 해결해준다
통신 링크
메시지가 지나는 통로
통신 링크 형태
- 연결대상: 프로세스 2개? 3개 이상 프로세스 인지 고민 필요
- 두 프로세스 사이 링크 개수: 1개? 2개 이상?
- 방향성: 단방향 vs 양방향
- 용량: 무한, 유한, 0