1. 임계 영역
하나의 프로세스가 수정가능한 공유자원을 액세스하고 있을때, 그 프로세스에 의해 참조되는 프로그램의 부분을 의미
- 하나의 프로세스가 공유데이터를 접근하면 다른 프로세스는 그 공유데이터를 접근해서는 안됨 → 여러 프로세스들 중에 하나의 프로세스만이 임계영역을 사용할 수 있도록 하여 임계영역에서 공유변수 값의 무결성 보장
- 인터럽트, 교착상태, 무한반복이 발생하지 않도록 해야한다. → 인터럽트 수행을 완료하거나 교착상태가 해제될 때까지 임계영역을 벗어날 수 없기 때문
코드영역
- 프로세스가 임계영역에 진입하려면 진입허가 요청 필요 → 진입영역
- 임계영역을 이용한 이후 임계영역을 빠져나왔음을 알리는 진출영역
- 그 밖의 나머지 코드 부분 → 잔류 영역
요구조건
1) 상호 배제 ( mutual exclusion)
한 프로세스가 공유자원을 사용하고 있을때, 다른 프로세스들이 사용하지 못하도록 배제
- 하나의 공유자원을 상호 배타적으로 이용 동시에 불가
2) 한정대기 (bounded waiting)
어떤 프로세스든 대기를 한 이후에는 반드시 임계영역으로 진입할 수 있도록 함
- 세마포어 내에서 무한히 기다리는 바쁜 대기 (계속해서 확인하는 대기)
3) 진행 조건
동기화 기법
1) 상호배제
여러개의 병렬프로세스가 공유자원에 접근시 접근중인 임의의 시점에서 하나의 프로세스만이 그 접근을 허용하도록 제어
2) 세마포어
세마포어 s는 정수값을 가진 변수로서 초기화를 제외하고는 단지, 두개의 연산 P (wait), V(signal) 만으로 접근가능한 특수한 변수
- 세마포어에 대한 연산은 처리 도중에 인터럽트 되어서는 안된다.
- 여러 프로세스가 동시에 세마포어 값을 수정 불가능
- 프로세스 사이의 동기를 유지하고 상호배제의 원리를 보장
- 동일한 공유자원이 여러개 있는 경우 signal(s) 연산을 먼저 수행했을때 교착상태 발생 가능
wait(s) : if (s >0) s = s+1
else 현재의 프로세스를 블록하고 대기 큐에 추가
signal(s) : if (1개 이상의 프로세스가 s에서 대기중) 그중 한개 프로세스만 진행
else s = s+1
3) 모니터 (monitor)
순차적으로만 사용할 수 있는 공유자원을 할당하는 데 사용되는 데이터와 이들 데이터를 처리하는 연산의 집합으로 이루어진 병행성 고급 구조체
- 반드시 해당 모니터 진입부를 호출, 여러개의 프로세스들이 동시에 모니터에 들어가려 할 경우 모니터 자체는 상호배제 실시
- 모니터 내부의 변수는 허가된 모니터 내부 프로세스만이 접근 가능 외부 프로세스는 모니터 내부를 직접 액세스 불가
- 정보은폐기법 이용