6.1 critical section 문제를 해결하는데 필요조건 3가지를 데커 알고리즘이 만족함을 보여라


1. 상호배제(mutual exclusion): 두 쓰레드가 함께 flag=true를 실행하더라도 turn에 의해 한 쓰레드만 critical-section으로 진입한다. 진입한 쓰레드가 turn을 바꿔야 나머지 쓰레드도 들어갈 수 있다.

2. 진행(progress): flag는 진입의사를 나타내고, turn은 critical section을 실행한 프로세스가 바꾼다. 다시 critical section에 진입해야 한다면, 다른 프로세스의 flag를 먼저 확인하므로 재진입도 가능하다.

3. 한계대기(bounded waiting): 데커 알고리즘은 turn을 다른 쓰레드에게 넘겨주기 때문에 무한정 기다리게 될 가능성은 없다.



6.2 생략

6.3 busy waiting이란? OS에서 다른 종류의 waiting도 있는가? busy waiting을 피할 수 있는가?


1. processor를 점유하면서 조건을 만족할 때까지 loop안에서 기다리는 것

2. processor를 다른 쓰레드에게 넘기고, 나중의 awake를 기다리면서 block할 수도 있다.

3. sleep / wake up 해서 피할 수 있지만, overhead가 busy waiting보다 크다.



6.4 spin lock이 single-processor system에 적합하지 않고, multiprocessor system에만 자주 쓰이는 이유는?


프로세스를 spinlock에서 벗어나게 만드는 조건을 만들려면 다른 프로세서가 그 프로세스를 실행해야 한다. 프로세스가 processor를 넘기지 않는다면 그렇게 될 기회는 없다. 따라서 잠깐 기다릴 목적으로(작은 overhead로) spin lock를 사용하므로 multiprocessor system에만 사용된다.



6.5 Synchronization primitives를 user-level에서 실행할 때, single processor system의 경우 interrupt를 disabling하면 안되는 이유는?

timer interrupt가 불가능하다면 락을 기다리던 쓰레드가 context switch를 할 수 없어서 락을 가진 다른 쓰레드가 락을 풀 수가 없기 때문이다.

'학부 OS 공룡책 연습문제 Ch.4~6' 카테고리의 다른 글

Ch.5 CPU Scheduling  (0) 2019.01.22
Ch.4 Thread  (0) 2019.01.22
Posted by sjo200
,