본문 바로가기
Study/운영체제

4. Threads - Multithreading models

by 이미뇨 2023. 4. 12.

1. Types of Threads

User thread: 사용자 수준의 스레드 라이브러리에서 지원되는 스레드

  • 라이브러리 함수 호출에 의해 생성됨 (not system call)
  • 커널은 사용자 스레드와 관련이 없음
  • 사용자 스레드 전환이 커널 스레드보다 빠름

 

Kernel thread: 커널에서 지원하는 스레드

  • 커널에 의해 생성 및 관리됨
  • 커널별로 Scheduled
  • 프로세스보다 비용이 저렴
  • user thread보다 더 비쌈

Kernel thread

2. Multithreading Models

Major issue:  user treads 와 kernel threads간의 조화

모델종류

 

Many-to-one model : 여러 개의 쓰레드가 하나의 커널 스레드에 의해 관리

  • 여러 쓰레드가 동시에 실행될 수 있지만, 커널은 실제로 하나의 코어에서 실행
  • 쓰레드 간 문맥 교환(Context Switching)이 빠르기 때문에 경량화(lightweight)된 모델
  • 커널 스레드가 하나 뿐이므로, 하나의 쓰레드가 시스템 호출(system call)을 하면 모든 쓰레드가 블록되어 버리는 상황이 발생할 수 있음

Many-to-one model

 

One-to-one model : 각 쓰레드가 하나의 커널 스레드에 의해 관리

  • 여러 개의 쓰레드가 병렬로 실행될 수 있음
  • 많은 쓰레드를 생성하면 많은 커널 스레드가 생성되기 때문에 오버헤드가 발생

One-to-one model

 

 

Many-to-Many model : 여러 개의 쓰레드가 여러 개의 커널 스레드에 의해 관리

  • Many-to-one과 One-to-one의 장점을 취합한 모델
  • 블로킹(blocking)되는 일이 없음
  • 쓰레드 간 문맥 교환(Context Switching)빠르게 수행

Many-to-Many model

 

Two-level model : Many-to-Many 모델과 유사하지만, 유저레벨 쓰레드(User-Level Thread)와 커널 스레드(Kernel-Level Thread) 간에 매핑이 존재

  • 쓰레드 라이브러리에서는 유저레벨 쓰레드를 관리하고, 커널 스레드는 운영체제에서 관리
  • 블로킹(blocking)되는 일이 없음
  • 유저레벨 쓰레드를 빠르게 생성
  • 커널 스레드를 조절하여 성능을 높일 수 있음

Two-level model

 

3. Scheduler Activation

  • many-to-many model 및 two-level model에서 커널과 스레드 라이브러리 간의 통신.
    • Scheduler activation : 사용자 스레드 라이브러리와 커널 간의 통신을 위한 하나의 체계
  • many-to-many model 및 two-level model에서 사용자 스레드는 LWP를 통해 커널 스레드와 연결

 

  • Lightweight process (LWP) : 프로세스와 스레드의 중간 지점에 있는 개념, 사용자 스레드를 커널 스레드에 연결하는 데이터 구조
    • 일반적인 프로세스와 달리, LWP는 운영 체제에 직접 소속되어 있으며 운영 체제 스케줄링을 직접 받음
    • LWP는 다른 LWP와 공유 메모리 영역을 가지므로 작업 간에 데이터를 공유하기도 쉬움
    • LWP는 스레드와 유사한 기능을 제공
    • 그러나 스레드보다 좀 더 가볍고 빠르며, 여러 개의 LWP가 한 프로세스 내에서 동시에 실행될 수 있음
    • 프로그래머가 직접 조작할 수 없음 (운영 체제가 이를 스케줄링하도록 지시)

Scheduler Activation and LWP

(커널이 주방이고 프로세스가 홀이면 LWP는 주문서 역할이다.)

 

 

Kernel-level threading에서의 Lightweight process(LWP)에 대한 설명

  • 운영체제는 가상 프로세서 집합(LWP)을 제공합니다. 이것들은 실제 코어가 아니라 스레드 스케줄링을 위한 가상 개념입니다.
  • 사용자 수준 스레드 라이브러리는 사용자 스레드를 가상 프로세서(LWP)에 스케줄링합니다.
  • 커널 스레드가 차단되거나 차단 해제되면, 커널은 이를 스레드 라이브러리에게 upcall이라는 인터럽트를 보내고, 이 upcall 핸들러는 적절하게 스케줄링합니다.
  • 커널 스레드가 차단되면, 해당 LWP를 다른 스레드에 할당합니다.
  • 커널 스레드가 차단 해제되면, LWP를 해당 스레드에 할당합니다.

즉, 사용자 수준 스레드 라이브러리와 커널이 함께 동작하여 프로세스 내의 스레드들을 스케줄링하는 방법이다.

이를 통해 사용자 수준에서 스레드를 관리하면서 커널의 오버헤드를 최소화할 수 있다.

'Study > 운영체제' 카테고리의 다른 글

4. Threads - Threading issues  (0) 2023.04.12
4. Threads - Thread libraries  (0) 2023.04.12
4. Threads - Overview  (0) 2023.04.12
3. Processes - Example of IPC system  (0) 2023.04.11
3. Processes - Inter-process communication  (0) 2023.04.11