본문 바로가기
운영체제

커널쓰레드와 유저쓰레드

by PainDiver 2022. 11. 29.

 

우선 설명에 앞서 커널이란 컴퓨터의 메모리에 상주하여 운영체제를 실행시키기 위한 공간이라고 보면 된다. 즉, 운영체제 그 자체로도 볼 수 있고, 운영체제가 하드웨어의 자원을 이용하여 기본적인 도구들, 인터페이스나 파일시스템, 보안, 네트워크 등 여러 기능들을 제공할 수 있도록하는 공간이다.

 

 

 

쓰레드의 종류에는 크게 두가지가 있다.

 

커널쓰레드 유저쓰레드

 

 

커널은 유저보다 덜 친숙하니 먼저 우리에게 친숙한 유저쓰레드 부터 알아보자

 

유저쓰레드는 유저레벨의 라이브러리에서 사용되는 쓰레드를 의미한다.

 

즉, C++로 예시를 들자면 thread.h를 include해서 사용하는 쓰레드이다.

 

쓰레드의 생성이나 스케쥴링에 대한 관리 기능을 제공하며, 커널의 도움없이 유저레벨에서 쓰레드를 관리하므로, 동일한 메모리영역에서 쓰레드가 생성되고 Context Switching이 내부적으로 유저레벨에서만 진행되어 속도가 빠른 장점이 있다.

 

허나, 여러 쓰레드 중 하나라도 쓰레드가 시스템 콜로 중단이 되면 나머지 모든 쓰레드 또한 중단되는 단점이 있다. 이 이유는 커널이 프로세스에 대한 관리를 하는데, 유저레벨에서 만들어진 프로세스 내부의 쓰레드를 인식하지 못해서 해당 프로세스를 대기 상태로 전환시키기 때문에 시스템 콜에 의한 중단은 모든 쓰레드가 중단되어야 한다.

 

 

커널쓰레드는 커널에 의해 생성되는 쓰레드로, 운영체제가 지원하는 쓰레드 기능으로 구현되며, 커널이 쓰레드의 생성 및 스케쥴링을 관리한다.

 

커널에 의해 관리되기 때문에 쓰레드가 시스템 호출로 중단되어도, 생성된 쓰레드를 파악할 수 있어서 프로세스 내의 다른 쓰레드를 중단시키지 않고 계속 실행이 가능하다.

 

다만, 쓰레드의 Context Switching 비용이 상당히 크다. 그 이유는 프로세스 내부 쓰레드를 커널에 의해 관리되도록 만들면 Context Switching 시 커널모드와 유저모드의 전환이 빈번하고, 이에 따른 overhead가 크다.

 

 

'운영체제' 카테고리의 다른 글

쓰레드의 생명주기  (0) 2022.11.29
운영체제 페이징 기법  (0) 2022.11.27
프로세스와 쓰레드 그리고 Context Switching  (0) 2022.11.26