- buffer: 임시 저장 공간, buffer 조작은 포인터 이동(빈 버퍼 혹은 찬 버퍼 가리킴)
- 여러 생산자가 동시에 빈 버퍼에 접근, 혹은 여러 소비자가 동시에 공유 데이터에 접근 시 문제 발생 -> lock/unlock
- 버퍼가 모두 찼을때 생산자가 오거나 버퍼가 모두 비어있을때 소비자가 왔을때 문제 발생 -> counting
- writer 접근 시, 다른 writer와 모든 reader 접근 불가
- reader 접근 시, 모든 writer 접근 불가
- 읽는 작업도 배타적으로하면 매우 비효율적
- 여러 reader가 동시에 도착하면 공유변수 readcount이 중복계산될 수 있으므로 lock/unlock
- 최초 reader는 DB에 writer 접근 못하게 막고, 최후 reader는 DB에 writer 접근 허용
- starvation: 모든 reader가 다 빠져나가야 writer가 접근 가능하므로 기아현상 발생 가능
- reader 중 writer 보다 늦게 온 프로세스는 기다리게끔 우선순위 큐 사용 가능
- Semaphore: 현재 상태, 젓가락 소유 권한, 공유 변수 lock/unlock
- monitor 내부에서 하나의 프로세스만 활성화(operation 코드 수행) 되므로 lock/unlock은 불필요
- 모니터 외부에서 기다리는 큐, 내부에서 buffer 기다리는 큐와 공유 데이터 기다리는 큐
출처: https://core.ewha.ac.kr/publicview/C0101020140408134626290222?vmode=f
'CS > OS' 카테고리의 다른 글
16. Deadlock 1 (0) | 2022.03.30 |
---|---|
15. Process Synchronization 4 (0) | 2022.03.29 |
13. Process Synchronization 2 (0) | 2022.03.28 |
12. Process Synchronization 1 (0) | 2022.03.27 |
11. CPU Scheduling 2 (0) | 2022.03.23 |