Thread의 구현
Thread 구현 방법에는 크게 두 가지가 있다.
- user thread : user level 에서 구현해서 실행
- kernel thread : kernel level 에서 구현해서 실행
User Thread
user space에 있는 라이브러리에 있는 api를 이용해서 thread를 생성/사용한다.
thread 생성/관리에 kernel의 개입이 필요하지 않기 때문에 create와 manage가 빠르다는 장점이 있다.
kernel mode로의 전환(mode switching)에 대한 비용을 절약할 수 있다.
그러나 kernel이 single thread라면, 여러 thread 중 한개의 thread라도 waiting으로 갔을 때 모든 thread가 scheduling에서 제외가 된다.
kernel은 user-level thread들을 single process로 보기 때문이다.
POSIX 등이 user thread를 지원한다.
Kernel Thread
kernel이 직접 thread management를 한다.
kernel space에서 thread create/scheduling/management이 수행된다.
windows, solaris, UNIX, linux 등이 kernel thread를 지원한다.
Multithreading Model
- many-to-one
- kernel이 보기에는 multithread들은 single process로 취급당한다.
- 따라서 kernel과 user thread들은 many-to-one의 관계를 갖는다.
- one-to-one
- kernel이 보기에 kernel thread는 하나의 프로세스로 취급한다.
- kernel이 보기에 kernel thread는 하나의 프로세스로 취급한다.
- many-to-many
- many-to-one과 one-to-one model을 혼합한 model 이다.
- user thread도 만들고 kernel thread도 만든다.
- kernel thread들을 virtual CPU라고도 한다.
- user thread들은 상황에 맞는 kernel thread에 mapping 되서 동작하게 된다.
예시 : Solaris 2 Thread
User thread와 kernel thread를 모두 지원하고, many-to-many 모델을 사용한다.
User thread와 kernel thread는 각각 원하는 만큼 생성 가능하다.
Kernel thread라는 이름 대신 LWP(lightweight processes)라는 용어를 사용한다.
LWP는 user thread를 지원하는 kernel thread이다.
각 프로세스는 적어도 하나 이상의 LWP를 포함한다.
thread lirary는 LWP pool과 user thread를 many-to-many 방식으로 매핑한다.
- kernel thread
- 각 LWP는 하나의 kernel thread를 가진다.
- kernel thread는 system 안에서 스케줄링 되는 유일한 대상이다.
- CPU와 kernel thread도 many-to-many로 매핑되어있다.
- user thread
- bound
- static bounding
- user thread와 LWP가 1:1 로 매팽된다.
- unbound (default)
- dynamic bounding
- user thread와 LWP가 many-to-many로 매핑된다.
- bound
'Computer Science > Operating System' 카테고리의 다른 글
CPU Scheduling Algorithm (0) | 2021.06.19 |
---|---|
CPU Scheduling (0) | 2021.06.19 |
Thread (0) | 2021.06.18 |
Cooperating Processes (0) | 2021.06.17 |
프로세스 생성/종료 (0) | 2021.06.17 |
댓글