운영체제

운영체제 5.2 상호배제: 하드웨어 지원

공부승식 2021. 4. 7. 21:36
728x90

상호 배제(Mutual exclusion)을 보장하기 위한 하드웨어적 접근 방법은?

 

-인터럽트 금지(Interrupt Disable)

 

shared resource를 쓰는 동안에는 Interrupt를 못하게  하는것이다. 

상호 배제는 보장이 되지만 부하가 크다. 인터럽트가 허가되지 않는다면 그 사이에 발생하는 외부 이벤트에 대한 처리와 다른 프로세스에 대한 스케줄링 등 모든 기능이 중지되기 때문에 시스템의 수행 효율이 눈에 띄게 감소된다.

그리고 Memory를 공유하는 멀티프로세서 시스템에서는 올바르게 Mutual Exclusion을 보장할 수 없다는 것이다. 두개 이상의 프로세서를 가지는 컴퓨터 시스템에서는 인터럽트가 금지된 상황에서도 서로 다른 프로세스가 공유자원을 동시에 접근하는 경우가 가능하기 때문에. 

 

상호 배제를 위해 구현된 명령어

 

1. compare &swap명령어 

int compare_and swap( int *word, int testval, int newval)

{int oldval;

oldval = *word

if(oldval == testval) *word = newval;

return oldval;

}

이 명령어는 테스트하려는 값(testval)과, 메모리 위치에 저장된 값(*word)를 비교한다. 

만약 두 값이 동일하다면, 메모리의 값은 newval로 변경된다. 동일하지 않으면 그 값은 그대로 유지된다. 

이 atomic operation은 두 부분으로 구성된다. compare과 swap으로 구성된다.

이 명령어는 원자적으로 수행되기 때문에 중간에 중단되지 않는다. 

 

bolt라는 공유변수를 이용해서 상호배제를 하는 경우

명령어가 있는데

while(compare_and_swap(bolt, 0,1) ==1)

if bolt==0 {

bolt =1;

}

이게 병렬적으로 n개가 진행된다. 

하나의 프로세스가 임계지점에 들어오면 bolt값이 0으로 들어오기 때문에 다른 프로세스들이 들어오 지 못한다. 이렇게 상호 배제를 구현한다. 하지만 다른 병렬적인 요소가 while구문을 실행하며 기다리기 때문에 바쁜 대기를 사용한다. 그리고 기아와 교착상태에 빠질수 있다는 단점또한 있다.