오늘은 대표적인 동기화 문제 중 Bounded Buffer Problem에 대해 알아보겠습니다.
이 문제는 Producer-Consumer Problem이라고도 불립니다.
consumer는 버퍼가 비어있을 때 아무것도 가져올 것이 없기 때문에 기다려야 합니다.
producer는 버퍼가 가득 차있을 때 빈공간이 없기 때문에 기다려야 합니다.
semaphore를 사용하여 이 문제를 해결해보겠습니다.
semaphore full = 비어있지 않은 버퍼의 개수
semaphore empty = 비어있는 버퍼의 개수
semaphore mutex = critical section 진입 여부 (critical section 진입 전, 후에 바꿔주면서 critical section에 대한 상호 배제적 접근<mutual exclusive access>을 보장해준다)
full = 0이므로 consumer는 critical section에 진입하지 못하고 기다리게 됩니다.
empty = 4이므로 producer는 critical section에 진입할 수 있습니다.
producer가 critical section에 들어가기 전에 empty의 개수를 하나 줄입니다.
producer가 critical section에 진입해서 버퍼 하나를 채웠습니다.
producer가 critical section에서 나온 후 full의 개수를 하나 늘립니다.
consumer가 critical secton에 진입하기 전에 full의 개수를 하나 줄입니다.
consumer가 critical section에 진입하여 버퍼에서 하나를 가져옵니다.
consumer가 critical section에서 나온 후 empty의 개수를 하나 늘립니다.
[운영체제] Deadlock Handling #2(deadlock avoidance) (0) | 2021.07.26 |
---|---|
[운영체제] Deadlock Handling #1(deadlock prevention) (0) | 2021.07.24 |
[운영체제] 프로세스 스케줄링(process scheduling) (0) | 2021.06.19 |
[운영체제] 부모 프로세스(parent process)와 자식 프로세스(child process) (0) | 2021.06.18 |
[운영체제] 리눅스 쉘(shell) 사용법- 디렉토리/파일 생성하기 (0) | 2021.06.17 |
댓글 영역