-
12. 임계구역과 세마포어운영체제/운영체제 정리 2019. 11. 18. 00:50
임계 구역 (Critical-Section Problem) 이란
- 멀티 스레드로 이루어진 환경에서 각각의 스레드는 어떤 코드 영역을 가지고 있는데
그 영역은 스레드들이 공통으로 사용하는 변수나 테이블이나 파일을 업데이트하는 부분이다.
이 영역을 임계 구역이라고 한다.
그렇다면 이런 임계구역을 어떻게 해결해야 할까?
1. 상호배타( Mutual exclusion )
- 오류가 일어나지 않으려면 공통된 부분의 update는 상호 배타적이어야 한다. 한 스레드가
공통으로 사용하는 변수를 업데이트 다 한 후에야 다른 스레드가 접근할 수 있다.
즉 오직 한 스레드만 진입할 수 있다.
2. 진행 ( Progress )
- 이 임계 구역에 누가 먼저 들어갈 것인가 하는 결정은 유한 시간 내에 결정되어야 한다.
3. 유한 대기 ( Bounded waiting )
- 어느 스레드라도 기다리고 있다면 유한 시간 내에 임계 구역 안에 들어갈 수 있어야 한다.
현재 공부 부분
O/S
1. 프로세스 관리
-cpu schedueling ( CPU 스케쥴링 ) : RR, SJR, FCFS...
-synchronization ( 동기화 ) : 임계 구역 해결, 프로세스 실행 순서 제어
2. 메모리 관리
3. 파일 관리
4. I/O 관리
이런 동기화들을 위한 도구들이 있는데 대표적으로 세마포어 와 모니터이다.
세마포어
-철도의 깃발을 연상, 동기화 문제 해결을 위한 소프트웨어 툴
(소프트웨어 툴에는 세마포어, 모니터 등이 있다.)
정수형 변수와 두 개의 동작 ( P, V )로 이루어져 있다.
동작
- P ( 검사 ) : acquire()
-V ( 증가 ) : release()
Semaphore는 내부의 정수 값(value)이 있고 P(acquire)와 V(release) 메서드
그리고 큐(Queue)가 있다.
앞 서 배운 프로세스에 줄 서서 기다리는 모습이다.
어떤 스레드는 레디큐에서 기다리면서 CPU 서비스를 받다가 세마포어에 대해서
acquire을 호출할 수 있다. 그때 if가 true가 된다면 세마포어에 queue로 들어가게 되고
결과적으로 ready queue로 들어가지 못하고 block 되게 된다. block 된 후는 CPU 서비스를 받지 못하게 된다.
해방이 되려면 또 다른 프로세스가 돌면서 release를 호출한다면 value를 증가시키게 되고
조건을 만족한다면 갇혀있는 한 스레드를 빼내서 다시 레디 큐로 보내게 된다. 그리고 다시 CPU 서비스를 받을 수 있게 된다
그렇다면 value는 무엇을 의미할까?
: number of permit 즉 허용의 개수
세마포어는 동기화 중에서도 상호 베타를 목적으로 사용한다. 세마포어 안에는 정수 값(value) 이 들어
있다고 했는데 1이라고 가정해보자.
1. 우선 프로세스(스레드)가 CPU 서비스를 받게 되면서 acquire을 호출하게 된다.
acquire() 시 0이므로 통과하게 되고 임계 구역으로 접근해서 자원을 쓴다.
2. 1이 임계 구역의 코드를 돌던 중 시간 흐름에 의하여 다른 프로세스(스레드)가 문맥 전환되면서 CPU 서비스를 받는다. acquire()을 호출 시 -1이 되므로 이 프로세스는 큐에 갇힌다(block). 큐에 갇힌다는 것은 임계 구역 안으로는 들어올 수
없게 만든다는 것이다.
3. 시간 흐름에 의하여 1의 프로세스(스레드)가 문맥 전환되면서 다시 CPU 서비스를 받는다. 임계 구역에 있는 코드를
다 돌고 release()를 호출한다. 즉 value는 0이 되고 if 조건을 만족하니 갇혀있는 프로세스를 깨워서
ready queue로 보낸다.
4. 2는 이제 임계구역 코드에 접근이 가능하다.
1~4의 과정을 통해 우리는 상호배타를 가능하게 할 수 있다.
세마포어를 통한 Ordering
P1이 P2보다 먼저 실행되고 싶을 때는?
1. 세마포어의 초기값을 0으로 둔다.
2. P2의 시작에 acquire()을 P1의 끝에 release()를 통해 순서를 정할 수 있다.
P2가 만일 먼저 CPU 서비스를 받게 되면 value는 0에서 -1이 되고 if 조건이 만족되면서
P2를 queue에 가두게 된다.
즉 동기화를 통해
임계 구역 문제 해결과 프로세스 실행 순서 제어가 가능하다.
'운영체제 > 운영체제 정리' 카테고리의 다른 글
14. 모니터 (0) 2019.12.31 13. 교착상태 ( Deadlock) (0) 2019.12.15 11. 프로세스와 쓰레드 (0) 2019.11.11 10. CPU 스케쥴링 (0) 2019.10.28 9. 문맥전환, 선점과 비선점 (0) 2019.10.13