티스토리 뷰

프로세스 내 작업단위를 의미하는 스레드는 두 가지 종류로 나뉜다.

커널 수준 스레드와 사용자 수준의 스레드

 

💡

생성 주체가 누구냐에 따라 구분된다!

 


커널 수준 스레드

커널 레벨에서 생성되는 스레드로 커널이 스레드와 관련된 모든 작업을 관리하는 방식이다.

 

  • 사용자 수준 스레드와 커널 수준 스레드가 1대1로 매핑된다.

 

장점

 

  • 커널이 각 스레드들을 개별적으로 관리할 수 있으므로, 동일한 프로세스에서 할당된 여러개의 스레드들 중 한 스레드가 대기상태가 되더라도, 다른 스레드들은 실행시킬 수 있다.
  • 커널이 직접 제공해 주기 때문에 안정성과 다양한 기능이 제공된다.

 

단점

  • 커널이 직접 스케줄링하고 실행하기 때문에 커널의 관리 지원을 많이 받을 수 있지만, 그만큼 오버헤드가 늘어난다.
  • 유저 모드에서 커널 모드로의 전환이 빈번하게 이루어져 성능 저하가 발생하낟.

 


사용자 수준 스레드

사용자가 스레드 관련 라이브러리로 구현해 사용하는 스레드

 

  • 스레드와 관련된 모든 행위를 사용자 영역에서 하기 때문에, 커널은 사용자 수준 스레드의 존재를 알지 못하고, 스레드 교환에 개입하지 않는다.
  • 사용자 수준 스레드 N개가 커널 수준 스레드 1개에 매핑되므로, 다대일 스레드 매핑이라고 한다.
  • 한 마디로 커널 레벨 밖에 있는 스레드

 

장점

  • 커널에 독립적으로 스케줄링을 할 수 있어 모든 운영체제에 적용할 수 있다. 이식성이 높다.
  • 스케줄링이나 동기화를 위해 커널을 호출하지 않으므로, 커널 영역으로 전환하는 오버헤드가 줄어든다.
  • 커널이 아닌 스레드 라이브러리에서 스레드 스케줄링을 제어하므로, 유연한 스케줄링이 가능하다.
  • 커널은 쓰레드의 존재조차 모르기 때문에 모드 간의 전환이 없고 성능 이득이 발생한다.

 

단점

  • 하나의 프로세스로부터 할당된 여러개의 스레드들 중, 한 스레드가 대기 상태가 되면, 모든 스레드들을 실행시킬 수 없게 된다.
  • 커널이 스레드 관리에 개입하지 않으므로, 스레드 간 보호에 커널의 보호 방법을 사용할 수 없다.
  • 라이브러리 수준의 보호 방법까지만 사용 가능하다.
  • 하나의 스레드가 커널에 의해 블로킹 되면 프로세스 전체가 블로킹되고, 이를 해결하려면 프로그래밍이 어려워지고 커널 레벨 스레드에 비해 결과 예측이 어려워진다.

 

 

😃

실제 물리적으로 정말 커널 밖에 있는 것이 아니라, 전부 커널 내부에 있지만 커널의 통제권 안에 있는지 차이인 것이다.