목표
1.프로세스 동기화에 대해 간략히 이해한다.
2.Critical Section(임계구역)을 이해한다.
2.세마포어에 대해서 이해한다.
1.뮤텍스에 대해서 이해한다.
3.뮤텍스와 세마포어의 차이에 대해 이해한다.
프로세스 동기화
프로세스는 서로 메세지를 보내고 프로세스 내부에서는 쓰레드끼리 자원을 공유하면서 '동기화'에 대한 문제가 항상 발생할 수 있다. 즉 공유된 자원에 여러 프로세스, 여러 쓰레드가 동시에 접근하면서 문제가 발생하게 된다. 유저 동기화 방법과 커널 동기화 방법이 있는데 유저 동기화는 Critical Section(임계영역) , 커널 동기화는 Mutex , Semaphore 가 있다.
Critical Section(임계구역)
OS에서 임계구역은 상당히 중요한 부분이다. 멀티 프로세스 환경에서 둘 이상의 프로세스가 동시에 접근해서는 안되는 공유 자원의 코드 영역이다. 임계구역은 시간이 지나면 종료되며, 어떤 프로세스가 임계구역에 접근하기 위해서는 지정된 시간만큼 대기해야 한다. 이때 쓰레드나 프로세스가 배타적인 사용권을 보장받기 위해서 세마포어 같은 동기화 메커니즘이 사용된다.
하나의 쓰레드가 임계구역에 접근하기 위해서는 요청->필요시 대기->임계구역 처리->빠져나간다 의 순서로 이루어진다.
임계구역 문제를 해결하기 위한 3가지 조건
임계구역에서 발생하는 문제들은 3가지 조건을 충족시키면 해결할 수 있다.
1.Mutual Exclusion(상호배제) : 하나의 프로세스가 임계구역에 들어가 있으면 다른 프로세스는 들어갈 수 없다.
2.Progress(진행) : 임계구역에 들어간 프로세스가 없다면, 어느 프로세스가 들어갈 것인지 적절히 선택해줘야 한다.
3.Bounded Waiting(한정 대기) : 기아상태를 방지하기 위해, 한 번 들어갔다 나온 프로세스는 다음에 들어갈 때 제한을 준다.
Peterson's Algorithm(피터슨의 알고리즘)
위의 3가지 조건을 충족하면서 임계구역 문제를 해결한다. flag와 turn변수를 사용한다.
Mutex(상호배제)
Semaphore(세마포어)
P(S) {
while S <=0; // 아무것도 하지 않음 (반복문)
S--;
}
V(S) {
S++;
}
이 방법은 임계구역에 진입하기 전 까지 빈 반복문을 계속 수행하므로 단일 처리기 다중 프로세스 환경에서는 효율이 떨어진다. 또한 대기중인 프로세스 중 어느것을 먼저 임계구역에 진입시킬지 결정할 수 없다.
첫번째 방법의 단점을 보완한 방법으로써 '재움 큐'를 활용한 방법이다.
P(S) {
S--;
if S < 0
// 이 프로세스를 재움 큐에 추가 (잠 듦)
}
V(S) {
S++;
if S <= 0
// 재움 큐로부터 프로세스를 제거 (깨어남)
}
뮤텍스와 세마포어의 차이
우리(프로세스)가 방(자원)에 들어가려고 할 때, 뮤텍스는 방에 들어가기 위한 열쇠의 개수이며, 세마포어는 빈 방의 열쇠의 개수이다.
즉 뮤텍스는 한 사람이 빈 방에 대한 열쇠를 가지고 있어서 방에 들어간다면, 그 사람이 나와야만 다른 사람이 열쇠를 건네받아 방을 들어갈 수 있다.
반면 세마포어는 방이 네개면 열쇠도 네개일 것이고 한 사람이 들어갈 때마다 들어갈 수 있는 방은 하나씩 줄어들어 0개가 되면 빈 방이 나올때 까지 대기해야 하는 상황이다. 아무나 먼저 나와야만 방과 열쇠를 한개씩 얻어서 들어갈 수 있다.
1.세마포어는 자원의 상태를 나타내는 일종의 '변수'로써 소유 개념이 아니지만, 뮤텍스는 자원을 점유한 프로세스나 쓰레드가 잠시 소유하였다가 작업이 끝나면 반환하는 개념이다.
2.뮤텍스는 소유하고 있는 쓰레드가 뮤텍스 자원을 해제할 수 있지만 세마포어는 소유하지 않는 쓰레드여도 해제할 수 있다.(?)
3.가장 큰 차이점은 뮤텍스가 동기화 대상이 자원의 하나라면, 세마포어는 하나 이상일 때 사용된다.
'컴퓨터공학 > 운영체제' 카테고리의 다른 글
메모리 관리 전략(2) (0) | 2018.10.28 |
---|---|
메모리 관리 전략(1) (0) | 2018.10.27 |
DeadLock(교착상태) (0) | 2018.10.25 |
CPU 스케쥴링 알고리즘 (0) | 2018.10.24 |
프로세스와 쓰레드의 차이점 (0) | 2018.10.24 |
쓰레드 (0) | 2018.10.24 |