2015104124!
전자공학과!
진우빈!
Chapter4.
프로세스는 무겁다. 무슨 뜻이냐면 프로세스를 하나 생성할 때의 overhead가 크다는 것이다. 프로세스에는
어드레스 주소, 커널에서 가져온 자원들 등 많은 것들이 담겨있다. 프로세스를 하나 더 만들 때는 그만큼 cost
가 많이 든다. 따라서 나온기념이 쓰레드 이다. 쓰레드란 실행 path와 프로세스를 독립시키기 위해 나온 개념
이다. 쓰레드는 쓰레드 별로 각자만의 스택이 존재한다. 그리고 스택 영역을 제외한 나머지 자원들을 하나의
프로세스에서 공유한다. 또한 프로세스가 PCB에 정보를 저장하듯이 쓰레드도 TCB에 정보를 저장한다. 그런
데 프로세스는 쓰레드를 한 개 이상 가질 수 있으므로, PCB는 TCB의 리스트를 가리킨다.!
쓰레드를 구현하는 방법에는 2가지 방식이 있다. User thread방식과 Kernel thread 방식이다. !
1. 사용자 수준 쓰레드는 사용자 영역에서 쓰레드 라이브러리를 구현하는 방식이다. 쓰레드와 관련된 모든 행
위를 사용자 영역에서 하므로 커널이 쓰레드의 존재를 알지 못한다. 여기서 쓰레드 라이브러리는 쓰레드의 생
성과 종료, 쓰레드 간의 메시지 전달, 쓰레드의 스케줄링과 컨텍스트 등 정보를 보관한다. 사용자 수준 쓰레드
에서는 쓰레드 교환에 커널이 개입하지 않아 커널에서 사용자 영역으로 전환할 필요가 없다. 그리고 커널은 쓰
레드가 아닌 프로세스를 한 단위로 인식하고 프로세서를 할당한다. 다수의 사용자 수준 쓰레드가 커널 수준 쓰
레드 한 개에 매핑되므로 다대일 쓰레드 매핑이라고 한다.!
2. 커널 수준 쓰레드는 사용자 수준 쓰레드의 한계를 극복하는 방법으로, 커널이 쓰레드와 관련된 모든 작업
을 관리한다. 한 프로세스에서 다수의 쓰레드가 병행으로 수행되고, 쓰레드 한 개가 waiting 상태가 되면 동일
한 프로세스에 속한 다른 쓰레드로 교환이 가능하다. 이때도 커널이 개입하므로 사용자 영역에서 커널 영역으
로 전환이 필요하다. 커널 수준 쓰레드는 사용자 수준 쓰레드와 커널 수준 쓰레드가 일대일로 매핑된다. 따라
서 사용자 수준 쓰레드를 생성하면 이에 대응하는 커널 쓰레드를 자동으로 생성한다. 일대일 쓰레드 매핑이라
고도 한다.!
커널 수준 쓰레드는 커널이 직접 스케줄링하고 실행하기에 사용자 수준 쓰레드의 커널 지원이 부족한 문제를
해결할 수 있지만, 커널이 전체 프로세스와 쓰레드 정보를 유지하여 오버헤드가 커진다. 대신 커널이 각 쓰레
드를 개별적으로 관리할 수 있어 동일한 프로세스의 쓰레드들을 병행으로 수행할 수 있다. 동일한 프로세스에
있는 쓰레드 중 한 개가 대기 상태가 되더라도 다른 쓰레드를 실행할 수 있다는 장점이 있다. 하지만 이 과정에
서도 커널 영역으로 전환하는 오버헤드가 발생하고 스케쥴링과 동기화를 하려면 더 많은 자원이 필요하다. 이
러한 각자의 장단점을 보완해서 나온 개념이 다대다 매핑 모델이다. !
Chapter5.
프로세스는 두 종류로 나눌 수 있다. !
1. CPU-bound process : CPU burst가 긴 프로세스로 i/o 가 자주 발생하지 않는다.!
2. I/O-bound process : User와 interactive하게 동작하는 프로세스로 명령 간 스위칭이 활발하다.!
스케쥴링 기법도 두가지로 나눌 수 있다.!
1. Preemptive scheduling : 수행하는 프로세스를 중단하고 우선순위 프로세스가 있으면 먼저 실행한다.!
2. Non-Preemptive scheduling: 먼저 수행되는 프로세스는 끝까지 실행시킨다.!
스케쥴링을 할 때 고려해야할 기준이 몇가지 있다. !
1. 하나는 Throughput으로 단위시간 당 처리량을 말한다. (클수록 좋다) !
2. 두번 째는 Turnaround time으로 프로세스가 교착이 되고나서 다 수행되고 끝나는 시간을 말한다. !
3. 세 번째는 Waiting time이다. Ready queue에서 기다리는 시간이다. (waiting queue에서 가 아님)!
4. 마지막으로 Respose time이다. (time sharing environment의 경우)!