7.1.1 The Bounded - Buffer problem
책상 60개를 10명에게 시킬 때
- 한사람당 책상 6개씩 옮기라고 함 - parallel execution
- 전달전달하는 형태 - pipe line(Producer/Consumer)
- buffer는 임시 저장소
- buffer에는 IN 포인터와 OUT 포인터가 있다.
- Circular Buffer
생산자는 버퍼가 가득찼을 때 데이터를 추가하지 않는다.
소비자는 버퍼가 비었을 때 데이터를 가져오지 않는다.
Producer
- Buf[IN] <- data
- IN = (IN + 1) MOD size
- count = count +1
Consumer
- data <- Buf[OUT]
- OUT = (OUT +1) MOD size
- count = count-1
empty semaphore : 빈공간이 몇갠가 -> 초기값은 버퍼 사이즈 ex) 5
full semaphore : 얼마나 차있냐 -> 초기값은 0
Producer
- wait(empty)
- Buf[IN] <- data
- IN = (IN + 1) MOD size 얘는 empty가 0이면 즉, 모두 차있으면 대기
- count = count +1
- signal(full)
=>이렇게 추가 가능
Consumer
- wait(full)
- data <- Buf[OUT]
- OUT = (OUT +1) MOD size. 얘는 full이 0이면 즉, 비어 있으면 대기
- count = count+1
- signal(empty)
이것이 생산자 소비자 협력의 코드이다.
7.1.2 The Readers - Writers Problem
- DB의 데이터에 접근하는 사용자가 두 그룹이다. reader, writer
- writer는 상호배제를 지켜줘야하고 reader는 상관없다.
- rw_mutex : 초기값 1
- read_count는 reader가 들어가면 증가, 빠지면 감소 즉, 현재 있는 reader의 수
- 따라서 reader가 나가면 signal 해줘야 한다.
- 여기서 mutex가 쓰인 이유?
- writer가 대기가 들어가면 reader는 들어오면 안된다.
- ㄴ> reader는 수정된 데이터를 읽어야 하기 때문에
7.1.3 The Dining-Philosophers Problem
'[운영체제 정리]' 카테고리의 다른 글
Operating System Concepts 13장 File-System Interface (1) | 2024.12.17 |
---|---|
Operating System Concepts 8장 Deadlock (2) | 2024.12.17 |
Operating System Concepts 6장 Synchronization Tools (2) | 2024.12.17 |
Operating System Concepts 5장 CPU Scheduling (2) | 2024.12.17 |
Operating System Concepts 4장 Threads & Concurrency (2) | 2024.12.17 |