솜은 코튼
[OS] 생산자-소비자 문제 본문
생산자-소비자 문제
.
임계구역과 관련된 전통적인 문제로 생산자-소비자 문제가 있다.
생산자 프로세스와 소비자 프로세스가 독립적으로 작업을 한다.
원형 버퍼를 사용하여 생산자는 버퍼에 계속 넣고,
소비자는 버퍼에서 계속 가져온다.
![]() |
![]() |
위의 코드는 왼쪽은 생산자, 오른쪽은 소비자 코드이다.
while문을 통해 생산자는 버퍼가 꽉 찼을 때, 소비자는 버퍼가 비어있을 때 대기한다.
생산자는 다음 수행을 buffer에 채운 후 in 변수를 1 증가시키고,
소비자는 다음 수행에 buffer값을 가져온 후 out 변수를 1 증가시킨다.
생산자는 count 값을 증가시키고, 소비자는 감소시키는데
왜 in, out 변수값은 증가시킬까?
앞의 원형큐 이미지를 보면 이해하기 쉽다.
원 방향으로 in 값과 out 값을 하나씩 증가시키면서 생산하고 소비하기 때문이다.
하지만 생산자-소비자 방법은 동시에 실행하면 문제가 발생한다.
바뀐 결과값이 제대로 적용되지 않기 때문이다!
그럼 동시에 사용할 수 없는 영역인 '임계구역'을 해결할 수 있는 방법에 대해 알아보자.
임계구역 문제를 해결하기 위해 '상호 배제', '한정 대기', '진행'의 세 가지 조건을 만족해야 한다.
다음 내용에서 임계구역 해결 방법에 대해 자세히 다뤄보겠습니당.
* 해당 글은 '쉽게 배우는 운영체제' 책을 참고하여 작성하였습니다. 출처: 쉽게 배우는 운영체제 (조성호 지음)
'OS' 카테고리의 다른 글
[OS] Mutex, 세마포어, 모니터 (0) | 2023.05.23 |
---|---|
[OS] 상호 배제, 한정 대기, 진행, 피터슨 알고리즘 (1) | 2023.05.22 |
[OS] 경쟁 조건, 임계구역 (Critical Section) (0) | 2023.05.22 |
[OS] 페이지 교체 알고리즘 (FIFO/최적/LRU/LFU/NUR) (0) | 2023.05.21 |
[OS] 요구 페이징 (0) | 2023.05.21 |