운영체제가 프로세서를 빠르게 전환해 마치 프로세스 여러 개를 동시에 실행하는 것처럼 보이게 하는 것
공유 영역 : 모든 프로세스가 동시에 공유, 메모리 자원은 공유 영역에서 병렬(parallel)로 사용
각 프로세스들은 서로의 존재를 모름 (비동기적)
병행 수행중인 비동기족 프로세스들이 공유 자원에 동시에 접근할 때 문제가 발생
임계 영역 (Critical Section) : 공유 자원을 접근하는 코드 영역
상호 배제 : 동시에 임계 영역에 진입하는 것을 막는 것
- 병행 프로세스에서 공유 자원이 사용되고 있을 시 다른 프로세스가 접근할 수 없도록 막는 방법
- 읽기 연산은 공유 데이터에 동시에 접근해도 문제가 발생하지 않는다.
생산자는 버퍼가 꽉 차면 더이상 생산 불가, 소비자는 버퍼가 비면 데이터 소비 불가
공유 데이터의 선언
#define BUFFER_SIZE 10
typedef struct {
DATA data;
} item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
int counter = 0;
생산자 프로세스
item nextProduced;
while(true) {
// 버퍼가 가득 차 있을 경우 계속 while문에 머뭄
while (counter == BUFFER_SIZE);
buffer[in] = newxtProduced;
// 유한 버퍼
in = (in + 1) % BUFFER_SIZE;
counter++;
}
소비자 프로세스
item nextConsumed;
while(true) {
// 버퍼가 비어있을 경우 아무 일도 하지 않음
while (counter == 0);
nextConsumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
counter--;
}
운영체제:그림으로 배우는 구조와 원리 - 한빛 아카데미