운영체제 7장 동기화 예제 - 연습문제 풀이
공룡책 (Operating System Concepts) 10th
개인적인 생각이므로 틀린 답변일 수 있습니다.
7.1
Windows와 Linux가 여러 락 기법을 구현하는 이유를 설명하라. 그들이 스핀락, mutex 락, 세마포 및 조건 변수를 사용하는 환경을 설명하라. 각각의 경우 그 기법이 필요한 이유를 설명하라
락 기법에는 각각의 장 단점이 있기 때문에 상황에 따라 여러 락 기법을 사용할 수 있도록 한다.
스핀락은 오버헤드가 적으나 busy-wait 을 하기 때문에 사용 시간이 짧은 자원에 대해 효과적입니다.
mutex 락은 하나의 쓰레드만 접근할 수 있도록 할 때 사용합니다.
세마포 및 조건 변수는 자원을 장기간 보유해야 하는 경우 유용합니다.
7.2
Windows는 슬림 reader-writer 락이라는 가벼운 동기화 도구를 제공한다. 대부분의 reader-writer 구현은 reader 또는 writer를 선호하거나 FIFO 정책을 사용하여 대기 스레드를 정렬하는 반면에, 슬림 reader-writer은 reader 또는 writer를 선호하지 않으며 대기 스레드를 FIFO 정책에 따라 정렬하지도 않는다. 이러한 동기화 도구를 제공하면 얻을 수 있는 이점을 설명하라.
일반적인 reader-writer 락에 비해 고려할 것이 줄어들었기 때문에 더 빠른 동기화 속도를 제공할 것으로 예상되며, 선호가 없기 때문에 writer만 점유하는 상황이 없을 것 입니다.
7.3 이진 세마포 대신 mutex 락을 사용할 수 있도록 하려면 그림 7.1 및 그림 7.2의 생산자와 소비자 프로세스를 어떻게 변경해야 하는지 설명하라.
이 문제는 유한 버퍼 문제에 대한 질문이다.
int n;
semaphore mutex = 1;
semaphore empty = n;
semaphore full = 0;
while (true) {
...
/* produce an item in next_produced */
wait(empty);
wait(mutex);
...
/* add next_produced to the buffer */
...
signal(mutex);
signal(full);
}
while (true) {
wait(full);
wait(mutex);
...
/* remove an item from buffer to next_consumed */
...
signal(mutex);
signal(full);
...
/* consume the item in next_consumed */
...
}
semaphore mutex = 1;
wait, signal 로 처리 되어 있는 부분을available 변수를 만들고
acquire 와 release로 처리하도록 수정 (6.5장 참고)
7.4 식사하는 철학자들의 문제에서 교착 상태가 어떻게 가능한지 설명하라.
교착 상태(deadlock)의 발생 조건은 다음과 같다.
- 상호배제(mutual exclusion)
- 점유하며 대기(hold and wait)
- 비선점(no preemption)
- 순환 대기(circular wait)
모든 철학자가 오른쪽 젓가락을 집은 상태가 되면 위 조건을 만족하여 교착상태에 빠지게 된다.
7.5
windows dispatcher 객체의 signaled 상태와 nonsignaled 상태의 차이점을 설명하라.
signaled
스레드들이 이벤트를 처리하고 작업을 수행할 수 있게 합니다.nonsignaled
스레드들이 대기하도록 만듭니다.
7.6
val이 Linux 시스템에서 원자적 정수라고 가정하자. 다음 연산이 완료된 후 val 값은 무엇인가?
atomic_set(&val, 10);
atomic_sub(8, &val);
atomic_inc(&val);
atomic_inc(&val);
atomic_add(6, &val);
atomic_sub(3, &val);
7