[운영체제][프로세스관리] 쓰레드 #2 다중 쓰레드 모델(Multithreading Model)

2022. 1. 25. 19:18OperatingSystem

학습목표
1. 사용자 쓰레드와 커널 쓰레드는 어떤 연관 관계가 존재하는지 학습
2. 사용자 쓰레드와 커널 쓰레드간의 연관 관계를 확립하는 3가지 일반적인 방법 학습

 

2. 다중 쓰레드 모델(Multithreading Model)

 

사용자 쓰레드와 커널 쓰레드의 관계

사용자 쓰레드는 커널 영역의 상위에서 지원되며 일반적으로 사용자 수준의 라이브러리(POSIX의 pthread, Java 라이브러리 등)를 통해 구현됩니다. 사용자 쓰레드는 커널 위에서 지원되며 커널의 개입 없이 관리됩니다. 

 

반면 커널 쓰레드는 운영체제에 의해 직접 지원되고 관리됩니다. 거의 모든 운영체제들은 커널 쓰레드를 지원합니다.

 

사용자 쓰레드와 커널 쓰레드 간에는 연관 관계가 존재해야 하고 대표적으로 연관 관계를 확립하는 네 가지 일반적인 방법이 존재합니다.

  • 다대일 모델(Many-to-One Model)
  • 일대일 모델(One-to-One Model)
  • 다대다 모델(Many-to-Many Model)
  • 다대다 모델의 변형, 두 수준 모델(Two-Level Model)

 

2.1 다대일 모델(Many-to-One Model)

다대일 모델은 여러개의 사용자 수준 쓰레드를 하나의 커널 쓰레드에 매핑하는 모델입니다. 쓰레드 관리가 사용자 공간의 쓰레드 라이브러리에 의해 관리되는데 만약 한 쓰레드가 시스템 콜(System Call)에 의해 블록(Block)이 된다면 매핑된 커널 쓰레드도 블록된 상태가 되어 전체 프로세스가 봉쇄됩니다.

 

또한 한번에 하나의 사용자 쓰레드만이 커널에 접근할 수 있기 때문에 다중 쓰레드가 다중 처리기(Multiprocessor)에서 수행되도 병렬로 작동할 수 없습니다.

 

다대일 모델 특징

  • 여러개의 사용자 수준 쓰레드를 하나의 커널 쓰레드에 매핑
  • 하나의 사용자 쓰레드가 블록되면 전체 프로세스가 봉쇄됨
  • 다중 쓰레드가 다중 처리기에서 수행되도 병렬로 작동 불가능

 

 

 

2.2 일대일 모델(One-to-One Model)

일대일 모델은 각각의 사용자 쓰레드가 각각의 커널 쓰레드에 매핑합니다. 이 모델의 특징은 하나의 사용자 쓰레드가 시스템 콜에 의해서 블록(이에 매핑되는 커널 쓰레드도 블록됨)되어도 다른 사용자 쓰레드가 수행될 수 있기 때문에 다대일 모델보다 많은 병렬성을 제공할 수 있습니다.  그리고 다중 처리기에서 다중 쓰레드가 병렬로 수행되는 것을 허용합니다. 

 

일대일 모델의 특징

  • 각각의 사용자 쓰레드가 각각의 커널 쓰레드에 매핑
  • 하나의 쓰레드가 블록되어도 다른 쓰레드가 수행 가능하기 때문에 많은 병렬성 제공
  • 다중 처리기에서 다중 쓰레드가 병렬로 수행되는 것을 허용

 

 

일대일 모델의 단점

  • 사용자 쓰레드를 생성할 때 커널 쓰레드도 생성되기 때문에 응용 프로그램의 성능이 저하됨

 

 

일대일 모델을 사용하는 운영체제

  • Windows 계열
  • Linux

 

 

 

2.3 다대다 모델(Many-to-Many Model)

다대다 모델은 여러 개의 사용자 수준 쓰레드를 그보다 작은 수 혹은, 같은 수의 커널 쓰레드로 매핑합니다. 다대다 모델은 다대일 모델과 일대일 모델의 단점들을 어느정도 해결한 모델입니다. 개발자는 필요한 만큼의 사용자 수준 쓰레드를 생성할 수 있습니다. 그리고 상응하는 커널 쓰레드가 다중 처리기에서 병렬로 수행될 수 있습니다.

 

그리고 일대일 모델과 마찬가지로 한 쓰레드가 블록되어도 커널이 다른 쓰레드를 실행 할 수 있습니다.

 

다대다 모델 특징

  • 여러 개의 사용자 수준 쓰레드를 그보다 작거나 같은 수의 커널 쓰레드로 매핑함
  • 하나의 사용자 쓰레드가 블록되어도 다른 사용자 쓰레드를 실행 시킬수 있음 (병렬성)
  • 개발자가 필요한 만큼의 사용자 쓰레드를 생성할 수 있음

 

 

 

2.4 두 수준 모델(Two-Level Model)

두 수준 모델은 다대다 모델의 변형으로 많은 사용자 쓰레드를 적거나 같은 수의 커널 쓰레드로 매핑시키는 것을 유지하지만 하나의 사용자 쓰레드가 하나의 커널 쓰레드에 종속되도록 합니다. 저의 생각으로 두 수준 모델을 사용하는 이유는 일대일로 매핑한 사용자 쓰레드와 커널 쓰레드의 연관관계는 네트워크와 같은 지속적인 연결이 끊기면 안되는 관계에서 사용될 것 같습니다. 왜냐하면 다대다 모델에서 네트워크 연결과 같은 관계를 맺고 있다가 블록 같은 상황으로 인하여 다른 커널 쓰레드로 문맥 교환을 하는 과정에서 문제가 발생할 것 같습니다. 이는 제 개인적인 두 수준 모델을 사용하는 이유에 대해서 생각한 것입니다. 

 

두 수준 모델 특징

  • 다대다 모델의 변형
  • 하나의 사용자 쓰레드가 하나의 커널 쓰레드에만 종속되도록 함

 

 

 

References

source code : https://github.com/yonghwankim-dev/OperatingSystem_Study
Operating System Concepts, 7th Ed. feat. by Silberschatz et al.
[인프런] 운영체제 공룡책 강의