검색결과 리스트
글
<인터럽트 금지를 사용한 기법>
단일처리 시스템의 경우는 병행 프로세스들이 실제로는 CPU를 번갈아 사용하는 것이므로 한 프로세스가 임계영역에서 실행 중일 때 CPU를 뺏기지 않도록 하면 간단하게 상호배제를 지켜줄 수 있을 것이다.
다시 말해, 시간 종료나 우선순위 등에 의해 CPU를 뺏길 수 있는 인터럽트를 임계영역의 실행을 완료할 때까지 발생하지 않도록 하면 된다.
임계영역의 처리 동안 모든 종류의 인터럽트를 금지시킴으로써 시스템의 효율적인 운영을 방해하기 쉽다.
<하드웨어 명령어를 사용한 기법>
기계명령어로 잘 알려져 있는 testandset과 exchange명령어를 사용한다. 이해를 돕기 위해 함수 또는 프로시저의 형식으로 표현되어 있으나 실제로는 기계명령어로서 원자적으로 실행 도중 끊김 없이 완료되는 연산이다.
lock의 초깃값이 false이므로 최초 진입 프로세스가 testandset을 실행하게 되면 target 값이 false가 되어 rv로 넘겨져, while문은 false가 되고 결과적으로 임계영역의 진입이 가능하다.
임계영역을 실행중인 프로세스가 있다면 lock의 값이 true이므로 진입을 시도하는 다른 프로세스는 while문에서 막혀 상호배제를 보장하게 된다.
<세마포어(Semaphore)>
세마포어는 두 개의 특수한 명령들만 접근할 수 있게 허용되는 보호된 변수로서, 상호배제 명령을 구현 가능하다.
세마포어는 그 변수가 가질 수 있는 값의 범위에 따라 종류가 구분된다.
① 세마포어가 0 아니면 1의 이진 값만을 가진다면, 그 세마포어를 이진(Binary) 세마포어
② 세마포어의 값이 음이 아닌 모든 정수가 될 수 있으면, 계수(Counting) 혹은 정수(Integer) 세마포어
세마포어를 위한 특수한 명령들은 비분리(Indivisible) 명령들로서, 세마포어 값을 초기화하는 명령, P 명령, V 명령이 있다.
P 명령은 S 값이 0보다 크면 S 값을 1 감소시키는 작업을 하지만, 그렇지 않으면 S 값이 0보다 크게 되기를 기다리게 된다.(Suspend Process)
V 명령에서는 S가 0보다 크게 되기를 기다리는 프로세스 하나를 계속 진행하게 하고, 만약 그러한 프로세스가 존재하지 않는다면 단순히 S의 값을 1을 증가시키는 작업만 한다.
세마포어에 대한 명령들은 각각 분리되지 않고 수행될 수있도록 구현해야 하며, 같은 세마포어에 대해서 동시에 실행되지 못한다.
[세마포어를 이용한 상호배제]
세마포어 변수 S가 1로 초기화되어 있으므로 최초로 시도하는 프로세스는 S를 0으로 바꾸고 임계 영역에 진입하게 될 것이다. 이 후 진입을 시도하는 프로세스들은 대기 상태가 되며 S 값은 1씩 감소된다.
임계영역을 나오는 프로세스에 의해 S는 1 증가하고 이때 대기 상태의 프로세스들 중 하나가 실행 가능한 상태가 되어 임계영역의 진입이 가능해지는 것이다.
P와 V 명령의 정의에 따라 한 번에 하나의 프로세스만이 임계영역에 들어갈 수 있음을 알 수 있을 것이다.
Copyrightⓒ2014 By 휴먼사이언스
'OS > Theory' 카테고리의 다른 글
메모리 관리 (0) | 2016.04.16 |
---|---|
교착상태 해결방법 (0) | 2016.04.15 |
교착상태와 프로세스 (0) | 2016.04.14 |
병행 프로세스 - 생산자/소비자 문제(Producer/consumer Problem) (0) | 2016.04.13 |
교착상태(DeadLock), 자원의 분류 (0) | 2016.04.13 |
RECENT COMMENT