[OS] 커널 레벨 스레드 vs 유저 레벨 스레드

커널 레벨 스레드와 사용자 레벨 스레드

스레드 지원 주체에 따라 Kernel Level과 User Level로 분류할 수 있다.

커널 레벨 스레드

커널 스레드는 OS에서 구현된다. 운영체제가 프로세스 내에 여러 스레드가 있다는 것을 알고 있기 때문에 커널이 스레드의 생성 및 스케줄링 등을 관리한다. (유저 스레드 1개당 커널 스레드 1개)

한 스레드가 중단되어도, 같은 프로세스 내의 다른 스레드들을 계속 실행가능하다. 사용자 레벨 스레드에 비교하여 생성 및 관리가 느리다.

장점

단점


사용자 레벨 스레드

스레드 기능을 제공하는 라이브러리 활용하는 방식(#include 등을 통해). 커널에 진입하지 않아도 된다. 사용자 영역에서 스레드연산을 수행한다.

운영체제는 프로세스 안에 여러 스레드가 있다는 것을 모르기 때문에 커널은 하나의 프로세스로 인식한다. 따라서 하나의 스레드가 중단되면 같은 프로세스 내의 모든 스레드가 중단된다.

동일한 메모리 영역에서 스레드가 생성, 관리되므로 속도가 빠르다.

장점

단점


디스크 입출력은 어떤 스레드에서?

디스크 I/O를 위해 커널을 호출(System Call)해야 하는데, 유저 레벨 스레드에서는 시스템콜하면 커널은 프로세스 내의 스레드 존재를 모르기 때문에 해당 프로세스 내 모든 다른 스레드가 동작하지 않는다. 반면, 커널 레벨 스레드에서는 커널 스레드가 사용자 스레드에 1:1로 할당되므로 시스템콜 해도 다른 스레드가 중단되지 않는다. 프로세스 작업 효율면에서 커널 레벨 스레드가 유리함.


비교 표

비교

참고