[운영체제] Concurrency: Mutual Exclusion and Synchronization - 2
Mutual Exclusion: Hardware Support
Interrupt Disabling (인터럽트 금지)
단일처리기에서 병행 처리되는 프로세스들은 오버래핑되는 것이 아닌 인터리빙된다.
즉, 실제로 동시에 수행되는 것이 아니라 프로세서를 번갈아 가며 실행한다. 또한 프로세스는 운영체제 서비스를 호출하거나 인터럽트될 때까지 계속 실행하게 된다. 인터럽트가 발생하지 않으면 그 동안은 한 프로세스의 계속적인 실행을 보장할 수 있다.
임계 영역에서는 인터럽트가 발생할 수 없기 때문에 상호 배제가 보장된다.
- 수행 효율이 감소된다.
- 멀티프로세서 시스템에서는 상호 배제를 보장할 수 없다.
Special Machine Instructions (특별한 기계 명령어)
이 명령어가 수행되는 동안에는 같은 메모리 위치를 접근하려는 다른 명령어들은 블록된다.
Instruction에는 Compare & Swap과 Exchange가 있다.
Compare & Swap
테스트하려는 값(testval)과 메모리 위치에 저장된 값(*word)을 비교한다.
만일 두 값이 동일하다면, 메모리의 값은 새로운 값(newval)으로 변경하고,
동일하지 않다면 그 값이 그대로 유지된다.
Compare & Swap 예제
위 명령어는 compare and swap을 나타는 상호 배제 프로토콜이다. 이 예제에서는 bolt라는 공유 변수를 사용한다.
공유변수 bolt는 0으로 초기화되어 임계영역에 진입할 수 있는 유일한 프로세스는 이 변수가 0일 때 Compare & Swap 명령을 호출한 프로세스이다.
*지역변수와 다르게 초기값을 설정하지 않은 전역변수의 초기값은 0이다.
장점
- 단일처리기 시스템뿐만 아니라 공유 메모리를 사용하는 멀티프로세서 시스템에서도 사용가능하다.
- 간단하고 검증이 쉽다.
- 서로 다른 변수를 사용하면 여러 개의 임계영역을 지원할 수 있다.
단점
- Busy-waiting을 사용한다 : 프로세스가 임계영역에 들어가기 위한 허가를 획득할 때까지 변수를 테스트하는 명령을 반복 실행하는 것을 의미한다.
- Starvation이 발생할 수 있다 : 대기하고 있던 프로세스가 여러 개라면, 그중 하나의 프로세스만이 다시 임계영역으로 진입할 수 있으므로, 무한정 기다리게 되는 프로세스가 생길 수 있다.
- Deadlock에 빠진다 : P1을 수행중이다가 더 높은 우선순위를 갖는 P2가 생성되고, 운영체제가 P2 프로세스를 스케줄 한다.만약 P2가 P1과 같은 자원을 쓰려고 시도한다면, 상호 배제 조건에 의해 접근이 실패하고, busy-waiting을 수행한다.
그런데 P1은 다시 스케줄링 될 수는 없다. 왜냐면 P1보다 우선순위가 높은 프로세스인 P2가 계속 실행 상태(또는 실행 가능 상태)에 있기 때문이다.
Exchange
Exchange 명령어는 레지스터의 값과 메모리에 들어있던 값을 서로 교체하는 기능을 수행한다.