본문 바로가기
Computer Science/Operating System

Multi-threading

by Gofo 2021. 6. 18.

Thread의 구현

Thread 구현 방법에는 크게 두 가지가 있다.

  • user thread : user level 에서 구현해서 실행
  • kernel thread : kernel level 에서 구현해서 실행

 

User Thread

user space에 있는 라이브러리에 있는 api를 이용해서 thread를 생성/사용한다.

 

thread 생성/관리에 kernel의 개입이 필요하지 않기 때문에 create와 manage가 빠르다는 장점이 있다.

kernel mode로의 전환(mode switching)에 대한 비용을 절약할 수 있다.

 

그러나 kernel이 single thread라면, 여러 thread 중 한개의 thread라도 waiting으로 갔을 때 모든 thread가 scheduling에서 제외가 된다.

kernel은 user-level thread들을 single process로 보기 때문이다.

 

POSIX 등이 user thread를 지원한다.

 

Kernel Thread

kernel이 직접 thread management를 한다.

kernel space에서 thread create/scheduling/management이 수행된다.

 

windows, solaris, UNIX, linux 등이 kernel thread를 지원한다.

 


Multithreading Model

  • many-to-one
    • kernel이 보기에는 multithread들은 single process로 취급당한다.
    • 따라서 kernel과 user thread들은 many-to-one의 관계를 갖는다.
  • one-to-one
    • kernel이 보기에 kernel thread는 하나의 프로세스로 취급한다.
  • many-to-many
    • many-to-one과 one-to-one model을 혼합한 model 이다.
    • user thread도 만들고 kernel thread도 만든다.
    • kernel thread들을 virtual CPU라고도 한다.
    • user thread들은 상황에 맞는 kernel thread에 mapping 되서 동작하게 된다.

 


예시 : Solaris 2 Thread

User thread와 kernel thread를 모두 지원하고, many-to-many 모델을 사용한다.

User thread와 kernel thread는 각각 원하는 만큼 생성 가능하다.

 

Kernel thread라는 이름 대신 LWP(lightweight processes)라는 용어를 사용한다.

 

LWP는 user thread를 지원하는 kernel thread이다.

각 프로세스는 적어도 하나 이상의 LWP를 포함한다.

thread lirary는 LWP pool과 user thread를 many-to-many 방식으로 매핑한다.

 

  • kernel thread
    • 각 LWP는 하나의 kernel thread를 가진다.
    • kernel thread는 system 안에서 스케줄링 되는 유일한 대상이다.
    • CPU와 kernel thread도 many-to-many로 매핑되어있다.
  • user thread
    • bound
      • static bounding
      • user thread와 LWP가 1:1 로 매팽된다.
    • unbound (default)
      • dynamic bounding
      • user thread와 LWP가 many-to-many로 매핑된다. 

 

 

 

'Computer Science > Operating System' 카테고리의 다른 글

CPU Scheduling Algorithm  (0) 2021.06.19
CPU Scheduling  (0) 2021.06.19
Thread  (0) 2021.06.18
Cooperating Processes  (0) 2021.06.17
프로세스 생성/종료  (0) 2021.06.17

댓글