1.Background
- 협력적 프로세스는 공유 데이터를 동시 접근하여 데이터의 비일관성을 낳을 수 있다.
- 동일한 자료를 접근하여 조작하고 그 실행 결과가 접근이 발생한 특정 순서에 의존하는 상황을 RaceCondition(경쟁 상황)이라 한다. Race Condition에서 보고 하기 위해 동기화가 필요하다.
2.임계 구역 문제(The Critical-Section Problem)
- 상호 배제(mutual exclusion): 한 프로세스가 자신의 critial section 안에 들어가서 수행을 하는 동안 다른 프로세스들은 그들의 critical section을 들어갈수 없다.
- 진행(progress): critical section에 실행되는 프로세스가 없고 critical section에 들어가려는 프로세스들이 있다면 사용가능하도록 한다.
- 한정된 대기(bounded waiting): critical section에 집입하도록 허용되는 횟수에 한계가 있어야한다. 임의의 한 프로세스의 starvation을 예방한다.
3.알고리즘
- OS는 메모리상의 shared memory 영역을 만들어 Turn과 flag[]변수를 공유하게 만들어준다.
- OS가 적게 끼어들므로 시간 낭비가 없으나 OS의 도움을 받으면 코드가 짧아진다.
4.Bakery Algorithm
- n개의 프로세스가 critical section에 들어가려한다.
- critical section에 들어가기전에 프로세스에게 번호를 제공하며, 번호가 작은 프로세스들이 critical section에 들어간다.
- OS가 도와주지 않으므로 순서를 정해주지 않고 application들이 알아서 정해야 한다. applicatin들이 순서를 정하면 같은 번호가 뽑힐 수 있다. -> 단 번호는 작아지지 않는다.
- 만약 프로세스에게 제공된 번호가 같다면, 프로세스의 ID( 제공된 번호가 아니다.)가 작은 프로세스가 먼저 실행된다. 프로세스 ID는 OS가 제공하므로 같은 ID를 가질 수 없다.
do{
choosing[i] = true; // 번호를 뽑고 있는 동안에는 true
number[i] = max(number[0],number[1]...number[n-1]) + 1;
//번호를 검색후 큰값에 +1을 해줌
choosing[i] = false;
for(j = 0l j< n;j++){
while(choosing[i]);//상대방이 번호를 뽑을때까지 기다림, 해주는 이유는??
//없으면 critical section에 두개의 프로세스가 들어갈 수 있다.
while((number[j] !=0)//아직 번호를 뽑지 않은 상태 critical section에 들어갈 의사가 없다.
&& (number[j],j) < (number[i],i)); //번호 대조
}
critical section;
number[i] = 0;
remainder section;
}
'Fundamental Notes > Operating Systems' 카테고리의 다른 글
Main Memory - Swapping & Contiguous Memory Allocation (0) | 2009.01.07 |
---|---|
Deadlock (0) | 2009.01.07 |
CPU Scheduling (0) | 2009.01.07 |
Thread (0) | 2009.01.07 |
Process (0) | 2009.01.07 |