[운영체제] 다중쓰레드모델(Multithreading model)이란?

사용자 수준 쓰레드(User level Thread) vs 커널 레벨 쓰레드(Kernel Level Thread)

사용자 수준 쓰레드

  • 사용자 수준 쓰레드는 사용자 수준(user level)에서 실행되며 thread library에 의해 관리된다.
  • 커널 수준 쓰레드는 커널 수준(kernel level)에서 실행되며 커널에 의해 직접 관리된다. 이런 커널을 멀티쓰레드 커널(Multithreded kernel)이라고 부른다. - 현대 대부분의 OS가 멀티쓰레드 커널이다.
  • 사용자 수준 쓰레드와 커널 수준 쓰레드는 서로 맵핑(mapping)된다. 
    • non-multithreaded kernels에서 유저 수준 쓰레드는 일반적인 프로세스처럼 처리된다. 커널이 쓰레드를 인식할 수 없어 맵핑이 이루어지지 않기 때문이다.
    • multithreded kernels에서는 유저 쓰레드와 커널 쓰레드는 무조건 관계가 존재한다. 

다중 쓰레드 모델

1. Many to One model

many to one model

  • 많은(many) 유저 수준 쓰레드를 하나(one)의 커널 수준 쓰레드에 mapping한다. 
  • non-multithreaded kernel 에서 mapping이 일어나지 않았을 때와 비슷하게 작동한다.
  • concurrency는 얻을 수 있지만 parallelism을 얻을 수 없다.
  • 유저 수준 쓰레드는 유저 수준에 존재하는 thread library에 의해 관리된다.
  • 만약 유저 수준 쓰레드중 하나가 system call에 의해 block된다면 맵핑된 커널 수준 쓰레드도 block 되는 blocking 문제가 발생하게 된다.
  • 멀티코어(multi-core)나 멀티프로세스의 이점을 충분히 이용할 수 없다.

2. One to One model

one to one model

  • 하나(one)의 유저 수준 쓰레드를 하나(one)의 커널 수준 쓰레드에 매핑한다.
  • blocking 문제가 발생하지 않는다.
  • 멀티 코어나 멀티 프로세스의 이점을 활용할 수 있다.
  • 유저 수준의 쓰레드를 만드는 것은 곧 커널 수준 쓰레드를 만드는 것을 의미한다. 즉 커널 쓰레드들이 많이 생기게 되므로 성능상의 문제가 발생할 수 있다. 생성비용이 많이 들기 때문이다.
  • window, linux 등이 이 모델을 적용한다.

3. Many to Many model

many to many model

  • 많은(many) 유저 수준 쓰레드를 같은 수의, 혹은 더 적은 수의 커널 수준 쓰레드에 매핑한다.
  • blocking 문제가 발생하지 않는다.
  • 멀티 코어나 멀티 프로세스의 이점을 활용할 수 있다.
  • 가장 flexible 하지만 구현하기가 어려워 많은 OS들이 one to one 모델을 적용한다.
  • Two-level 모델은 many-to-many 모델의 변형 버전으로, many-to-many 방식과 one-to-one 방식이 함께 존재하는 모델이다.

반응형

댓글

Designed by JB FACTORY