참고도서: Operating System Concepts (10/E) Abraham Silberschatz, Peter B. Galvin, Greg Gagne
4.1 다중 스레딩이 단일 스레드 솔루션보다 더 나은 성능을 제공하는 세 가지 예제를 제시하라
- 가장 흔한 예시는 웹서버의 예일 것이다. 동시에 다수의 사용자가 연결을 요청하는 상황에서 단일 스레드로 time-sharing 을 통해 각 요청에 접근하거나 다수의 단일스레드 프로세서를 두기에는 윌반적으로 웹 서버에 한번에 접속을 시도하는 사용자의 숫자가 많기 때문에 문제가 있다. 이런 상황에서는 multi-threading 을 사용하는 것이 바람직할 것이다.
4.2 Amdahl의 법칙을 사용하여 a) 2개의 처리 코어와 b) 4개의 처리 코어에 대해 60%의 병렬 구성요소를 가진 응용 프로그램의 속도 향상 이득을 계산하라
암달의 법칙은 다음과 같다.
t=(S+(1−S)/N)1
S는 연속되는 구성요소의 비율을 의미하고 1-S는 병렬 구성요소의 비율을 의미한다. 이 문제에서는 2개의 처리코어를 60%의 구성요소에 대해 적용하기 때문에 다음과 같은 식을 세울 수 있다.
t=(0.4+0.6/2)1=1.429
따라서 코어를 2개로 늘렸을 때 얻을 수 있는 속도 향상 이익은 1.429 시간이 된다.
위와 같은 방법으로 식을 세우면,
t=(0.4+0.6/4)1=1.818
따라서 코어를 4개로 늘렸을 때 얻을 수 있는 속도 향상 이익은 1.818 시간이 된다.
4.4 사용자 수준 스레드와 커널 수준 스래드의 두 가지 차이점은 무엇인가? 한 유형의 스레드가 다른 유형의 스레드보다 유리한 상황은 언제인가?
- 사용자 수준 스레드는 응용프로그램에 의해서 생성되고 커널의 지원을 받지 않는 반면에 커널 수준 스레드는 운영체제에 직접적인 관리를 받는다. 커널 수준 스레드는 다수의 커널 스레드를 사용할 경우에 사용자 스레드가 어떤 작업에 의해 block 되어도 다른 작업을 계속 할 수 있도록 지원한다. 커널 스레드는 운영체제에 의해 관리되기 때문에 더 우선순위가 높거나 중요한 작업에 사용될 때 사용자 수준 스레드보다 더 유리하다.
4.5 커널 수준 스레드 사이에서 문맥 교환을 하기 위해 커널이 해야 할 일을 설명하라
- 스레드 사이의 context switch 역시 프로세스간의 context switch 와 동일하다. 한가지 차이점은 프로세스간의 문맥 교환은 PCB의 상태를 저장한 이후에 새로운 프로세스를 CPU에 할당해야 하지만 커널 스레드 간의 문맥교환은 해당 스레드가 사용중에던 CPU 레지스터의 값들만 보관하면 된다.
4.6 스레드가 생성될 때 어떤 자원이 사용되는가? 프로세스가 생성될 때는 사용되는 자원과의 차이점은 무엇인가?
- 프로세스가 생성될 때는 데이터, 힙, 스택을 포함한 메모리가 할당된다. 그리고 스레드가 생성될 때는 레지스터 집합, 스택, 그리고 TLS라고 불리는 스레드 로컬 저장장치가 생성된다.
4.7 다대다 모델을 사용하여 운영체제가 사용자 수준 스레드를 커널에 매핑하고 매핑은 LWP를 사용한다고 가정하자. 또한 개발자는 실시간 시스템에서 사용할 실시간 스레드를 만들 수 있다고 하자. 실시간 스레드를 LWP에 바인딩해야 하는가?
- 그렇다. LWP를 사용하는 것의 장점은 한 스레드가 block 됐을 때 다른 스레드를 곧바로 맵핑해서 전체 시스템의 지연시간을 줄이는 데에 있다. 실시간 시스템은 responsibility 가 매우 중요한 요소이기 때문에 실시간 스레드에 block 이 발생했을 때 LWP를 통해서 다른 실시간 스레드의 작업을 수행하는 것이 필요하다.