사용자 수준 Thread와 커널 수준 Thread 의 차이점은?

2020-04-08

해당 Post는 사용자 수준 Thread와 커널 수준 Thread 의 차이점을

취업 준비생들 끼리 면접 스터디에서 나온 자료 활용해서 정리한 파일입니다.


커널 레벨(Kernel Level) 쓰레드와 유저 레벨(User Level) 쓰레드

1. 커널 모드와 유저 모드

  • 메모리 영역은 사용자에 의해서 할당되는 메모리 공간인 유저 영역과 운영체제라는
    하나의 소프트웨어를 실행시키기 위해서 필요한 메모리 공간인 커널 영역으로 나뉜다.

  • 사용자가 사용하는 메모리 영역은 유저 영역이지만 C언어는 메모리 참조가 용이하기 때문에
    안정성 제공 측면에서 커널 모드와 유저 모드가 사용된다.

  • 기본적으로 유저 모드로 동작하다가 Windows 커널이 실행되어야 하는 경우에 커널 모드로의 전환이 일어난다.

  • 커널 모드와 유저 모드의 차이는 유저 모드에서 동작할 때 커널 영역으로의 접근이 금지된다.
    커널 모드일 때는 모든 영역의 접근이 허용된다.

  • Windows 에서 운영체제 차원에서 제공되는 시스템 함수들 중 일부는 호출시 커널 모드로 동작한다.
    주의할 점은 모드의 전환은 시스템에 부담을 준다.

  • 커널 모드와 유저 모드를 제공하는 대상은 Windows운영체제가 아닌 프로세서(Process)이다.
    즉 메모리 보호 기능이 CPU에 달려있다.

2. 커널 레벨 쓰레드와 유저 레벨 쓰레드

  • 커널 레벨 쓰레드와 유저 레벨 쓰레드는 생성 주체가 누구냐에 따라 구분된다.

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

  • 커널이 쓰레드 모델을 지원하지 않거나 제공하는 쓰레드 모델이 마음에 들지 않을 경우,
    커널에 의존적이지 않은 형태로 쓰레드의 기능을 제공하는 라이브러리를 활용할 수 있는데
    이러한 방식으로 제공되는 쓰레드가 유저 레벨(User Level) 쓰레드이다.

3. 커널 레벨 쓰레드와 유저 레벨 쓰레드 장/단점

  • 커널 레벨 쓰레드의 장점은 커널이 직접 제공해 주기 때문에 안정성과 다양한 기능이 제공된다.

  • 커널 레벨 쓰레드의 단점은 유저 모드에서 커널 모드로의 전환이 빈번하게 이뤄져 성능 저하가 발생한다.

  • 유저 레벨 쓰레드의 장점은 커널은 쓰레드의 존재조차 모르기 때문에 모드 간의 전환이 없고 성능 이득이 발생한다.

  • 유저 레벨 쓰레드의 단점은 하나의 스레드가 커널에 의해 블로킹 되면 프로세스 전체가 블로킹되고,
    이를 해결하려면 프로그래밍이 어려워지고 커널 레벨 쓰레드에 비해 결과 예측이 어려워진다.