Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

4.3 Multithreading Models 본문

OS/OS Design

4.3 Multithreading Models

알 수 없는 사용자 2024. 4. 13. 18:20

 지금까지 스레드를 일반적인 의미로 취급했지만, 스레드는 또한 두 가지 의미로 볼 수도 있다. 스레드 지원은 사용자 수준에서 제공될 수도 있으며(user threads), 또는 커널에서 제공될 수도 있다(kernel threads). User threads는 커널 위에서 지원되며 커널의 지원 없이 관리된다. 반면에 Kernel threads는 운영 체제에 의해 직접 지원 및 관리된다. 현대의 거의 모든 운영 체제(Windows, Linux, macOS) 는 커널 스레드를 지원한다. 최종적으로 사용자 스레드와 커널 스레드 사이에는 관계가 있어야 한다. 이 관계를 수립하는 세 가지 일반적인 모델을 살펴보자.

 

4.3.1 Many-to-One Model

 다대일 모델은 여러 사용자 수준 스레드를 하나의 커널 스레드에 매핑한다. 스레드 관리는 사용자 공간의 스레드 라이브러리에서 수행되므로 효율적이지만, 스레드가 차단 시스템 호출을 하면 전체 프로세스가 차단된다. 또한, 한 번에 하나의 스레드만 커널에 액세스할 수 있기 때문에 다중 스레드는 다중 코어 시스템에서 병렬로 실행될 수 없다. Green threadsSolaris 시스템에서 사용할 수 있는 스레드 라이브러리로, 초기 버전의 Java에서 채택되었지만 대부분의 컴퓨터 시스템에서 표준이 된 다중 처리 코어의 장점을 활용할 수 없기 때문에 이 모델을 사용하는 시스템은 매우 적다.

 

4.3.2 One-to-One Model

 일대일 모델은 각 사용자 스레드를 커널 스레드에 매핑한다. 이 모델은 다대일 모델보다 더 많은 concurrency 를 제공하며, 스레드가 차단 시스템 호출을 할 때에도 다른 스레드가 실행되도록 하고, 다중 프로세서에서 여러 스레드가 병렬로 실행될 수 있도록 한다. 이 모델의 유일한 단점은 사용자 스레드를 생성하려면 해당하는 커널 스레드를 생성해야 하고, 많은 수의 커널 스레드가 시스템의 성능에 부하를 줄 수 있다. 대부분 리눅스와 윈도우 계열 운영 체제는 일대일 모델을 구현한다.

 

4.3.3 Many-to-Many Model

 다대다 모델은 많은 사용자 수준 스레드를 더 작거나 동일한 수의 커널 스레드로 다중화한다. 커널 스레드의 수는 특정 응용 프로그램이나 특정 시스템(예: 8개의 처리 코어가 있는 시스템에서는 응용 프로그램에 더 많은 커널 스레드가 할당될 수 있음)에 따라 다르다.

 다대일 모델은 개발자가 원하는 만큼 많은 사용자 스레드를 생성할 수 있지만, 커널은 한 번에 "하나의 커널 스레드만" 스케줄할 수 있으므로 병렬성을 가져오지 않는다. 즉, 스케줄링하면서 동시에 여러 개의 커널 스레드를 실행시킬 수 없다. 일대일 모델은 더 큰 동시성을 허용하지만, 개발자는 응용 프로그램 내에서 너무 많은 스레드를 생성하지 않도록 주의해야 한다(실제로 일부 시스템에서는 생성할 수 있는 스레드 수에 제한이 있을 수 있음). 하지만 다대다 모델은 이러한 단점이 없다. 개발자는 필요한 만큼 많은 사용자 스레드를 생성할 수 있으며, 해당하는 커널 스레드는 다중 처리기에서 병렬로 실행될 수 있다. 또한, 스레드가 차단 시스템 호출을 수행할 때 다른 스레드를 실행하기 위해 커널이 스케줄할 수 있다.

 다대다 모델의 변형은 여전히 많은 사용자 수준 스레드를 더 작거나 동일한 수의 커널 스레드로 다중화하지만 사용자 수준 스레드를 커널 스레드에 바인딩할 수 있도록 허용한다. 이 변형을 보통 two-level model이라고 한다. 다루어진 모델 중에서 다대다 모델이 가장 유연한 것으로 보이지만, 실제로는 구현이 어렵고, 대부분의 시스템에 점점 더 많은 처리 코어가 나타나면서 커널 스레드의 수를 제한하는 것이 덜 중요해졌다. 결과적으로 대부분의 운영 체제는 현재 일대일 모델을 사용한다. 그러나 일부 현대적인 동시성 라이브러리는 개발자가 작업을 식별한 다음 많대많 모델을 사용하여 스레드에 매핑하도록 한다.

'OS > OS Design' 카테고리의 다른 글

4.5 Implicit Threading  (0) 2024.05.06
4.4 Thread Libraries  (0) 2024.04.13
4.2 Multicore Programming  (0) 2024.04.13
4.1 Thread & Concurrency Overview  (0) 2024.04.13
3.7 Examples of IPC Systems  (1) 2024.04.13
Comments