사용자 수준 쓰레드(User level Thread) vs 커널 레벨 쓰레드(Kernel Level Thread)
- 사용자 수준 쓰레드는 사용자 수준(user level)에서 실행되며 thread library에 의해 관리된다.
- 커널 수준 쓰레드는 커널 수준(kernel level)에서 실행되며 커널에 의해 직접 관리된다. 이런 커널을 멀티쓰레드 커널(Multithreded kernel)이라고 부른다. - 현대 대부분의 OS가 멀티쓰레드 커널이다.
- 사용자 수준 쓰레드와 커널 수준 쓰레드는 서로 맵핑(mapping)된다.
- non-multithreaded kernels에서 유저 수준 쓰레드는 일반적인 프로세스처럼 처리된다. 커널이 쓰레드를 인식할 수 없어 맵핑이 이루어지지 않기 때문이다.
- multithreded kernels에서는 유저 쓰레드와 커널 쓰레드는 무조건 관계가 존재한다.
다중 쓰레드 모델
1. Many to One model
- 많은(many) 유저 수준 쓰레드를 하나(one)의 커널 수준 쓰레드에 mapping한다.
- non-multithreaded kernel 에서 mapping이 일어나지 않았을 때와 비슷하게 작동한다.
- concurrency는 얻을 수 있지만 parallelism을 얻을 수 없다.
- 유저 수준 쓰레드는 유저 수준에 존재하는 thread library에 의해 관리된다.
- 만약 유저 수준 쓰레드중 하나가 system call에 의해 block된다면 맵핑된 커널 수준 쓰레드도 block 되는 blocking 문제가 발생하게 된다.
- 멀티코어(multi-core)나 멀티프로세스의 이점을 충분히 이용할 수 없다.
2. One to One model
- 하나(one)의 유저 수준 쓰레드를 하나(one)의 커널 수준 쓰레드에 매핑한다.
- blocking 문제가 발생하지 않는다.
- 멀티 코어나 멀티 프로세스의 이점을 활용할 수 있다.
- 유저 수준의 쓰레드를 만드는 것은 곧 커널 수준 쓰레드를 만드는 것을 의미한다. 즉 커널 쓰레드들이 많이 생기게 되므로 성능상의 문제가 발생할 수 있다. 생성비용이 많이 들기 때문이다.
- window, linux 등이 이 모델을 적용한다.
3. Many to Many model
- 많은(many) 유저 수준 쓰레드를 같은 수의, 혹은 더 적은 수의 커널 수준 쓰레드에 매핑한다.
- blocking 문제가 발생하지 않는다.
- 멀티 코어나 멀티 프로세스의 이점을 활용할 수 있다.
- 가장 flexible 하지만 구현하기가 어려워 많은 OS들이 one to one 모델을 적용한다.
- Two-level 모델은 many-to-many 모델의 변형 버전으로, many-to-many 방식과 one-to-one 방식이 함께 존재하는 모델이다.
반응형
'Computer Science > [운영체제]' 카테고리의 다른 글
[운영체제] 동기화 문제(Synchronization problem), 경쟁 상태(Race Condition), 임계 영역(Critical Section) (0) | 2021.11.16 |
---|---|
[운영체제] CPU 스케줄링 알고리즘 정리 및 요약, FCFS, SJF, Round Robin (0) | 2021.11.02 |
[운영체제] 쓰레드(Thread)란? 쓰레드 프로세스 차이 , 멀티프로세스 멀티쓰레드 차이 (0) | 2021.10.27 |
[운영체제] IPC(Inter-Process Communication)란? (0) | 2021.10.18 |
[운영체제] 프로세스 제어 블록(PCB : Process Control Block)란? | 문맥교환(Context Switching)이란? (2) | 2021.10.07 |