티스토리 뷰
### Producer and Consumer Problem ###
producer(data 넣기), consumer(data 사용)
: 컴퓨터가 가지는 상관 관계
(producer 와 consumer이 누구와 관계하고 있느냐에 따라 달라질 수 있다)
: data를 공유하기 위해서 중간에 buffer을 사용한다.
1. <Cooperating processes: Producer and consumer>
: producer process는 consumer process에 의해 consumer되는 정보를 생성합니다.
2. <Unbounded-buffer>
: capacity가 무한한 buffer
: producer가 data를 buffer에 넣을 때 대기하지 않아도 된다.
: consumer인 경우 buffer에 data 없는 경우 wait해야 한다.
: 이론적일 때 사용(이상적인 것)
3. <Bounded-buffer>
: capacity가 한정된 buffer(buffer size가 고정되어 있다)
: producer은 buffer가 가득차 있으면 wait한다.
: consumer은 buffer가 비어있으면 wait한다.
: producer와 consumer 사이에 존재하는 공유 메모리
// buffer empty
in == out
// buffer full
((in+1) % buffer_size) == out
<Producer & Consumer 코드>
// producer
item n_producer; #다음 생산할 항목
while true{
while (((in + 1) % buffer_siez) == out); # 아무일도 일어나지 않는다
buffer[in] = n_producer;
in = (in + 1) % buffer_siez;
// consumer
item n_cosumer #다음 소비할 항목
while true{
while (in == out); # 아무일도 일어나지 않는다
n_consumer = buffer[out];
out = (out + 1) % buffer_siez;
(Producer의 코드에서 (in+1)이 2번 이기 때문에 index 1개를 버리게 된다 (메모리 낭비))
<Filling the buffer>
: 앞 코드의 메모리 낭비를 해결하기 위함 => count를 이용하여 buffer을 인지할 수 있게한다.
: producer가 counter값을 증가시키고 consumer가 counter값을 감소시켜
buffer의 값을 즉각 인지 할 수 있게 해주는 것
(producer - buffer full (count == buffersize), consumer - buffer empty (count == 0))
=> 위쪽 while 조건문을 바꿔주고 producer은 count++, consumer은 count--
<Race Condition>
: 2개 이상의 process가 자신들이 공유하는 data에 접근하고 바꿀수 있을 때
: 장치 또는 시스템이 둘 이상을 수행하려고 할 때 발생하는 바람직하지 않은 상황
=> 바뀌는 값이 process의 작업처리 순서에 영향받는 경우(의도하지 않는 결과 초례)
'운영체제 > 이론' 카테고리의 다른 글
(31) Hardware Support Synchronization (0) | 2020.09.23 |
---|---|
(30) Critical Section(임계구역) (0) | 2020.09.23 |
(28) Synchronization Tools - 1 (0) | 2020.09.21 |
(27) Multilevel Queue (CPU scheduling) (0) | 2020.09.20 |
(26) Priority Scheduling (CPU scheduling) (0) | 2020.09.20 |