솜은 코튼

[OS] 생산자-소비자 문제 본문

OS

[OS] 생산자-소비자 문제

솜.코 2023. 5. 22. 14:55

 

 

생산자-소비자 문제

.

 

 

임계구역과 관련된 전통적인 문제로 생산자-소비자 문제가 있다.

생산자 프로세스와 소비자 프로세스가 독립적으로 작업을 한다.

 

 

 

원형 버퍼를 사용하여 생산자는 버퍼에 계속 넣고,

소비자는 버퍼에서 계속 가져온다.

 

 

 

 

위의 코드는 왼쪽은 생산자, 오른쪽은 소비자 코드이다.

 

while문을 통해 생산자는 버퍼가 꽉 찼을 때, 소비자는 버퍼가 비어있을 때 대기한다.

생산자는 다음 수행을 buffer에 채운 후 in 변수를 1 증가시키고,

소비자는 다음 수행에 buffer값을 가져온 후 out 변수를 1 증가시킨다.

 

생산자는 count 값을 증가시키고, 소비자는 감소시키는데

왜 in, out 변수값은 증가시킬까?

 

앞의 원형큐 이미지를 보면 이해하기 쉽다.

원 방향으로 in 값과 out 값을 하나씩 증가시키면서 생산하고 소비하기 때문이다.

 

 

하지만 생산자-소비자 방법은 동시에 실행하면 문제가 발생한다.

 

바뀐 결과값이 제대로 적용되지 않기 때문이다!

 

 

그럼 동시에 사용할 수 없는 영역인 '임계구역'을 해결할 수 있는 방법에 대해 알아보자.

 

임계구역 문제를 해결하기 위해 '상호 배제', '한정 대기', '진행'의 세 가지 조건을 만족해야 한다.

 

 

다음 내용에서 임계구역 해결 방법에 대해 자세히 다뤄보겠습니당.

 

 

 

 

 

 

 

 

* 해당 글은 '쉽게 배우는 운영체제' 책을 참고하여 작성하였습니다. 출처: 쉽게 배우는 운영체제 (조성호 지음)