본문 바로가기

OS(운영체제)/프로세스

[운영체제] 프로세스 - 사용자 수준의 스레드와 커널 수준의 스레드의 차이?

커널 레벨 쓰레드란

커널 수준에서 생성되고 동작하는 쓰레드로 커널이 직접 관리한다.

프로그래머 요청에따라 쓰레드를 생성하고 스케줄링 하는 주체가 커널이면 커널 쓰레드라고 한다.

 

커널 레벨 쓰레드 특징

  • 커널이 각 쓰레드를 개별적으로 관리 하기 때문에 I/O 인터럽트에 의해 하나의 쓰레드가 Block 됐을때 다른 쓰레드로 작업이 가능하다.
  • 안정적이고 다양한 기능을 제공한다.
  • 사용자 모드와 커널 모드의 전환이 빈번해서 성능저하가 발생한다.
  • 스케줄링과 동기화를 위해 커널을 호출하는데 오래걸린다.

 

사용자 레벨 쓰레드란

쓰레드를 관리하는 라이브러리로 인해 사용자 수준에서 생성 및 관리되는 쓰레드이다.

즉, 커널에 의존적이지 않은 형태로 쓰레드의 기능을 제공하는 라이브러리를 활용한 쓰레드를 말한다.

 

사용자 레벨 쓰레드 특징

  • 스케줄링과 동기화를 위한 커널호출이 필요없기 때문에 커널 레벨 쓰레드보다 오버헤드가 적다.
  • 커널은 사용자 레벨의 쓰레드 존재를 모르기 때문에 모드간의 전환이 없어서 성능 이득이 발생한다.
  • I/O 인터럽트에 의해 하나의 쓰레드가 Block 되면 모든 쓰레드의 작업이 중지된다.
  • OS 스케줄러가 아닌 사용자 수준 쓰레드 라이브러리를 통해서 스케줄링한다.
  • 시스템 전반에 걸친 스케줄링 우선순위를 지원하지 않기 때문에 어떤 쓰레드가 먼저 동작될지 모르고 커널 쓰레드에 비해 결과를 예측하기 힘들어진다.

참고 블로그

https://helloinyong.tistory.com/293

https://www.crocus.co.kr/1255

https://junghyun100.github.io/%EC%82%AC%EC%9A%A9%EC%9E%90%EC%88%98%EC%A4%80ThreadVS%EC%BB%A4%EB%84%90%EC%88%98%EC%A4%80Thread/