Dekker, peterson, dijkstra 알고리즘은 소프트웨어적으로 Mutual Exclusion을 하는 방법이다.
- 속도가 느리다
- 상호 배제를 하는 로직 실행 중에 선점될 수 있다. (interrupt)
- Busy waiting
Mutual Exclusion을 Hardware 명령으로 어떻게 처리할 수 있는지 보자.
Hardware Support for ME
➡️ Spcial machine instructions (atomicity, indivisibility)
- TS (Test and Set) instruction
- Swap instruction
Definition of TS() instruction (정의)
- target 값을 로컬 변수에 할당하고 이를 리턴한다.
- target을 무조건 true로 바꾼다.
function TestAndSet(boolean *target) {
boolean rv = *target;
*target = true;
return rv;
}
- lock이 false이면 false가 리턴되어 CS에 접근이 되고 lock은 true가 된다.
- CS를 빠져나오면 lock을 다시 false로 만들어준다.
Definition of swap() instruction (정의)
void swap(boolean *a, boolean *b){
boolean temp = *a;
*a = *b;
*b = temp;
}
- 각 프로세스는 key라는 로컬 변수를 각각 가지고 있다.