운영체제에서 기억하고 싶은 내용
생산자-소비자 문제 정의
생산자: 데이터를 버퍼에 넣는 프로세스
소비자: 데이터를 버퍼에서 꺼내는 프로세스
조건
- 버퍼에 여러 프로세스가 동시에 접근할 수 없다
- 버퍼에 넣는 거나, 꺼내는 거나 동시에 접근할 수 없다
- => 상호배제 필요하다
유한 버퍼 문제
- 버퍼가 가득 찬 경우 생산자는 대기해야 한다
- 버퍼가 빈 경우 소비자는 대기해야 한다
- => 동기화 필요하다
세마포어를 이용해서 해결해볼까!
- 세 가지 세마포어를 사용
- 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
'Computer Science > 운영체제' 카테고리의 다른 글
운영체제 7강 :: 교착상태 회피, 탐지 및 복구 (0) | 2023.04.23 |
---|---|
운영체제 6강 :: 교착상태 필요조건, 예방 (0) | 2023.04.23 |
운영체제 4강 :: 병행 프로세스, 세마포어 (0) | 2023.04.18 |
운영체제 3강 :: 스케쥴링, 스케쥴링 알고리즘 (0) | 2023.04.13 |
운영체제 1강 :: 운영체제란, 커널모드, 운영체제 유형 (0) | 2023.03.25 |