[OS] 커널 레벨 스레드 vs 유저 레벨 스레드
커널 레벨 스레드와 사용자 레벨 스레드
스레드 지원 주체에 따라 Kernel Level과 User Level로 분류할 수 있다.
커널 레벨 스레드
커널 스레드는 OS에서 구현된다. 운영체제가 프로세스 내에 여러 스레드가 있다는 것을 알고 있기 때문에 커널이 스레드의 생성 및 스케줄링 등을 관리한다. (유저 스레드 1개당 커널 스레드 1개)
한 스레드가 중단되어도, 같은 프로세스 내의 다른 스레드들을 계속 실행가능하다. 사용자 레벨 스레드에 비교하여 생성 및 관리가 느리다.
장점
- 커널이 각 스레드 개별적으로 관리할 수 있음
- 동작중인 스레드가 System Call(커널 호출)해도 해당 프로세스 내 다른 스레드가 계속 실행될 수 있음.
단점
- 스케쥴링과 동기화를 위해 System Call(커널 호출)하는데 오래 걸림
- 유저모드와 커널모드 간 전환이 빈번하여 성능 저하
사용자 레벨 스레드
스레드 기능을 제공하는 라이브러리 활용하는 방식(#include
운영체제는 프로세스 안에 여러 스레드가 있다는 것을 모르기 때문에 커널은 하나의 프로세스로 인식한다. 따라서 하나의 스레드가 중단되면 같은 프로세스 내의 모든 스레드가 중단된다.
동일한 메모리 영역에서 스레드가 생성, 관리되므로 속도가 빠르다.
장점
- 스케쥴링과 동기화를 위해 System Call(커널 호출)하지 않기 때문에 오버헤드 적음.(Context Switching을 프로세스 내부에서 진행하면 됨)
- 커널이 스레드 존재를 모르기 때문에 유저모드와 커널모드 간 전환이 없음
단점
- 스케쥴링 우선순위를 지원하지 않으므로 어떤 스레드가 먼저 동작할지 모름
- 하나의 스레드가 System Call(커널 호출)하면 해당 프로세스 내 모든 스레드가 중단됨(Blocking System Call)
디스크 입출력은 어떤 스레드에서?
디스크 I/O를 위해 커널을 호출(System Call)해야 하는데, 유저 레벨 스레드에서는 시스템콜하면 커널은 프로세스 내의 스레드 존재를 모르기 때문에 해당 프로세스 내 모든 다른 스레드가 동작하지 않는다. 반면, 커널 레벨 스레드에서는 커널 스레드가 사용자 스레드에 1:1로 할당되므로 시스템콜 해도 다른 스레드가 중단되지 않는다. 프로세스 작업 효율면에서 커널 레벨 스레드가 유리함.
비교 표
참고
- User Level Thread VS Kernel Level Thread - www.crocus.co.kr
- Difference between User Level thread and Kernel Level thread - Geeks for Geeks