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

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

개바알자 2022. 2. 2. 19:55

커널 레벨 쓰레드란

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

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

 

커널 레벨 쓰레드 특징

  • 커널이 각 쓰레드를 개별적으로 관리 하기 때문에 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/