1. 상호배제를 위한 세마포 원리 및 코드
상호 배제의 기능을 수행한다.
< 원리 >
< 함수 내부 >
mutex가 양수이면 들어갈 수 있다.
S.value = mutex 이다.
0 또는 음수이면 사용중이라는 의미이다. (ex) -1이면 대기자가 1명이라는 뜻
wait(S)
S.value = -1이면
if문에 들어가서 add this process to S.L
즉, 진동벨을 나누어주고 다른 일을 수행할 수 있도록 한다.
signal(S)
수행이 끝나면 S.value 값을 1 올려준다.
그럼에도 아직 대기자가 남아있다면(즉, S.value가 0보다 작거나 같다면)
remove a process P from S.L;
wakeup(P);
즉, 아까 나눠줬던 진동벨을 울려 대기자들을 다시 불러온다.
2. 세마포의 장점
: 간단하게 구현된다.
3. 동기화 도구로써의 세마포
: 프로세들간에 실행 순서가 정해져 있을 때 사용한다.
: 세마포는 바쁜 대기를 유발하지 않는 동기화 도구이다.
* 중요 *
0으로 초기화된 flag를 사용한다. 즉 mutex = 0; 으로 초기화
ex) A -> B 의 실행 순서가 지켜져야 할 때
flag = 0 이므로 Pj가 먼저 실행된다고 하더라도 wait 상태에 들어갈 것이다.
Pi에서 A가 실행되고 signal(flag);를 해서 flag를 1로 만들 때까지 절대 B를 실행할 수 없는 것이다.
4. 세마포의 문제점
: 세모포 변수를 여러 개 두고 실행할 경우 교착 상태와 기아 상태를 유발할 수 있다.
1) 교착 상태
: 둘 이상의 프로세스들이 대기중인 프로세스들 중 단지 하나에 의해서만 야기될 수 있는 사건을 무한정 기다리는 상황
2) 기아 상태
무한 정지, 프로세스들이 세마포 큐에서 제거되지 않고 무한정 대기하는 것
ex) flag가 1로 초기화된 경우
P0
wait(S)에서 flag가 0이 되고
wait(Q)에서도 flag가 0이 되어
기다리는 중
P1
wait(Q)에서 flag가 하나 더 감소하여 -1이 되고
wait(S)에서도 flag가 하나 더 감소하여 -1이 되어
기다리는 중....
-> 서로가 서로를 기다리느라 무한정 기다리는 상황에 빠지게 된다.
5. 고전적 동기화 문제 : 세마포로 해결해보기
* 초기화 : full = 0, empty = n, mutex = 1
-> full은 생산된 데이터의 개수, empty는 남은 버퍼의 개수
가운데에
wait(mutex); wait(mutex);
... ...
signal(mutex); signal(mutex);
는 상호배제를 위한 세마포를 구현한 것
생산자 위쪽 wait(empty);
소비자 아래쪽 signal(empty);
는 생산자 동기화를 위한 세마포
생산자 아래쪽 signal(full);
소비자 위쪽 wait(full);
는 소비자 동기화를 위한 세마포
6. Readers - Writers 문제
: 리더랑 라이터가 여러 명일 때
-> 라이터가 없을 때에는 리더가 여러 명이 들어갈 수 있다.
7. 모니터(Moniters)
: 세마포 연산자들을 한 데에 모아놓은 객체이다.
: 공통된 객체 내에서 활동하도록 보장한다.
: 오류 디버깅을 쉽게 할 수 있게 한다.
-> 많은 세마포 사용시, 잘못된 사용으로 오류가 발생하기 쉽기 때문에 사용한다.
* 정보처리기사 문제 *
- 프로세스들 간에 상호배제해야한다.
- 임계 구역은 여러 사용자가 동시에 사용하지 않도록 하는것
- 임계 영역 안에서의 작업은 신속히 이루어져야 함
- 어떤 프로세스가 임계영역 내에서 실행중일때 인터럽트가 발생한다고
하더라도 이 프로세스는 실행을 멈추지 않는다.
5. 임계영역에서 무결성을 보장한다.(값이 꼬이지 않음)
6. 하드웨어 자원이 필요한 것 : Test&Set 명령어
'Computer Science > Operating System' 카테고리의 다른 글
실습 3) vi편집기 사용법 (0) | 2020.10.22 |
---|---|
실습 2) 리눅스 기본 명령어 정리 (0) | 2020.10.21 |
이론 4) - 2 임계구역 문제 / SW, HW 해결법 (0) | 2020.10.21 |
이론 4) - 1 프로세스 동기화의 배경 (0) | 2020.10.21 |
이론 3) - 2 스케줄링 알고리즘 (0) | 2020.10.18 |