4.1 Multithreading이 single-threaded solution 보다 좋지 않은 경우는?
ㄱ. individual tax return calculation
ㄴ. shell program(C-shell, Korn shell)
4.2 context switch를 user-level threads에서 할때, thread library가 하는 것은?
user thread가 kernel thread에 어떻게 매핑되었는지가 중요하다. 하지만 일반적으로는 user thread간 context switch는 LWP를 교환하는 것이고, 이는 레지스터를 저장/복구하는 작업을 포함한다.
+ 추가내용
user level thread 특징: process 안에서 동작하고, process의 timeslice 내에서 실행된다. OS와 관계없음. context switch가 빠르기 때문에, context switch가 많은, 그리고 상호의존적 연산을 하는 CPU-bound tasks에 효과적이다. 생성하는데 system call이 필요없음.
kernel level thread 특징: OS의 스케줄링 알고리즘에 따라 스케줄됨. Idle 상태가 되는 것을 kernel 스케줄러가 피하게 함. 즉, I/O bound threads로만 구성된 프로세스를 피한다. 하지만 kernel 스케줄러가 쓰레드들 사이에서 적절한 판단을 하기 때문에, 많은 threads로 구성되고 I/O bound threads가 많은 프로세스가 kernel level thread를 사용하면 효과적이다.
4.3 어떤 상황에서 multiple kernel threads를 사용하는 multithreaded solution이 single-threaded solution보다 좋은 성능을 내는가?
ㄱ. page fault가 발생해서 기다리는 횟수가 많을 때
ㄴ. 특정 system event를 기다리는 경우가 많을 때
4.4 쓰레드간 어떤 program state의 구성요소가 공유되고, 공유되지 않는가?
(보기: register value, heap memory, global memory, stack memory)
공유되는 것: heap memory, global memory
4.5 multiple user-level threads를 사용하는 multithreaded solution이 multiprocessor system에서, single processor system보다 성능이 더 좋은가?
user-level threads는 동시에 실행될 수 없으므로 성능은 똑같을 것이다.
4.6 Linux는 processor와 thread를 구분하지 않고, 윈도우 XP는 구분한다. kernel 내에서 그에 대한 둘의 모델링의 접근을 비교하라.
process와 thread 각각의 특징으로 서술함.
processes: 서로 독립적이다. 많은 정보를 갖고있다. IPC만을 통해 통신할 수 있다.
threads: 한 process안일 경우 서로 접근 가능하다. 프로세스 내부 메모리를 공유하고 각자 레지스터값, 스택이 따로 있다. context switch가 빠르다.
4.7 생략
4.8 multiprocessor 시스템에서 many-to-many threading model을 사용하여 multithreaded program을 실행한다고 하자. user-level threads가 processor 수보다 많을 경우, 다음 시나리오의 성능을 말하라.
a. program이 할당된 kernel thread의 수가 processor의 수보다 적을때
b. 같을때
c. 클때 (kernel thread의 수 < user-level thread의 수라고 가정함)
a => 남는 processor는 idle 상태가 된다.
b => 모든 processor는 활용된다. block되면 그 processor는 idle 상태가 된다.
c => b 답에서 block된 thread 대신 ready 상태의 thread를 그 processor가 실행시킨다. multiprocessor system의 활용성(utilization) 증가