일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- package-private
- OS
- 컴퓨터과학
- 디지털
- 프로그래밍
- Public
- CS
- 우리카드
- 알고리즘
- java
- 개발
- 자바
- 스프링
- 깃
- 운영체제
- 스터디
- 세마포어
- 공채
- 컴퓨터공학
- 신입
- github
- 뮤텍스
- 이펙티브 자바
- Effective Java
- IT
- 메모리
- 정보처리기사
- 깃허브
- 신입사원
- spring
Archives
- Today
- Total
주니어 개발자 성장기
Process Synchronization - Bounded Buffer Problem 본문
Bounded Buffer Problem (유한 버퍼 문제)
- Producer-Consumer Problem(생산자-소비자 문제) 이라고도 한다.
Producer
- 데이터를 버퍼에 삽입
Consumer
- 데이터를 버퍼에서 제거
여기서 Shared Data는?
- 버퍼 자체
- 버퍼 조작 변수(empty와 full 버퍼의 시작 위치)
문제의 원인
- 다수의
Producer
/Consumer
가 버퍼에 데이터를 삽입, 제거할 수 있기 때문이다.- 버퍼 자체의 경쟁 상황 발생
- 버퍼가 가득 차거나 빌 경우 추가/삭제가 불가능함을 알아야 한다.
두 가지 세마포어가 필요
Mutual exclusion
- shared data의 동기화 때문에
Binary semaphore
가 필요 (2번 스텝)- 다수의 주체가 동시에 버퍼를 변경할 수 없도록 Lock을 건다.
Resource count
- 남은 full/empty 버퍼의 수를 표시하기 위해
Integer semaphore
가 필요 (5번 스텝 + 기다리는 프로세스 wake up)- EX)
Producer
가 데이터를 삽입할 때마다 Full 버퍼의 수를 증가 시키고 가득차면 대기 상태에 들어간다. 만약 대기 중인Consumer
가 있다면 Wake up 시켜준다.
- EX)
Pseudo Code
Initialization
semaphore full = 0, empty = n, mutex = 1;
Integer semaphore
변수full
,empty
와Binary semaphore
변수mutex
를 설정- 최초의 버퍼는 빈 상태이므로
full
값은 0,empty
값은 1로 한다. - 최초에는 접근 가능해야 하므로
mutex
는 1로 설정
Producer
do {
// produce an item in x
// ...
P(empty);
P(mutex);
// add x to buffer
V(mutex);
V(full);
} while(1);
P(empty)
함수는empty
상태인지(값이 1 이상인지) 확인한 후 자원에 접근하도록 하는 세마포어 오퍼레이션이다.empty
값이 0이면 대기한다.
P(mutex)
함수는 버퍼 자체에 대한 락을건다.V(mutex)
함수는 버퍼 자체에 대한 락을 해제한다.V(full)
함수는full
값을 증가시키고 대기하는(Blocked 상태인)Consumer
가 있으면 Wake up 시켜준다.
Consumer
do {
P(full);
P(mutex);
// remove an item from buffer to y
V(mutex);
V(empty);
// ...
// consume the item in y
// ...
} while(1);
P(full)
함수는full
상태인지(값이 1 이상인지) 확인한 후 자원에 접근하도록 하는 세마포어 오퍼레이션이다.full
값이 0이면 대기한다.
P(mutex)
함수는 버퍼 자체에 대한 락을건다.V(mutex)
함수는 버퍼 자체에 대한 락을 해제한다.V(empty)
함수는empty
값을 증가시키고 대기하는(Blocked 상태인)Producer
가 있으면 Wake up 시켜준다.
출처
반효경, "운영체제 2014-1", KOCW, http://www.kocw.net/home/cview.do?cid=3646706b4347ef09
'CS스터디 > 운영체제' 카테고리의 다른 글
Process Synchronization - Monitor (0) | 2024.04.02 |
---|---|
Process Synchronization - Dining-Philosophers Problem (0) | 2024.04.01 |
Process Synchronization - Readers-Writers Problem (0) | 2024.04.01 |
운영체제의 예시(22/07/10) (0) | 2022.07.10 |
운영체제란? 목적과 분류(22/07/09) (0) | 2022.07.10 |