다중 스레드 모델(MultiThreading Model)
수준 차이에 따른 스레드 지원
사용자 스레드(user threads)
: 사용자 수준에서 지원하는 스레드- 커널 위에서 지원되고 커널의 지원 없이 관리
- 커널 위에서 지원되고 커널의 지원 없이 관리
커널 스레드(ker-nel threads)
: 커널 수준에서 제공되는 스레드- 커널 스레드는 운영체제에 의해 직접 지원되고 관리
- 거의 모든 현대 운영체제들은 커널 스레드를 지원
- 궁극적으로 사용자 스레드와 커널 스레드에는 어떤 연관 관계가 존재해야 함.
다대일 모델(Many-to-One Model)
- 많은 사용자 수준 스레드가 하나의 커널 스레드를 사상함
- 장점
- 스레드 관리는 사용자 공간의 스레드 라이브러리에 의해 행해짐 → 효율적
- 스레드 관리는 사용자 공간의 스레드 라이브러리에 의해 행해짐 → 효율적
- 단점
- 한 스레드가 봉쇄형 시스템 콜할 경우, 전체 프로세스가 봉쇄
- 한 번에 하나의 스레드만 커널에 접근 가능
→ 다중 스레드가 다중 코어 시스템에서 병렬 실행 불가능
→ 다중 처리 코어의 이점을 살릴 수 없음
→ 현재 이 모델을 사용하는 시스템 거의 없음
- 그린 스레드(green thread)가 다대일 모델 사용
- Solaris 시스템을 위한 스레드 라이브러리
일대일 모델(One-to-One Model)
- 각 사용자 스레드를 각각 하나의 커널 스레드가 사상
- 장점
- 하나의 스레드가 봉쇄적 시스템 콜을 호출해도 다른 스레드가 실행될 수 있음
→ 다대일 모델보다 더 많은 병렬성 제공 - 다중 처리기에서 다중 스레드가 병렬로 수행되는 것을 허용
- 하나의 스레드가 봉쇄적 시스템 콜을 호출해도 다른 스레드가 실행될 수 있음
- 단점
- 사용자 스레드를 만들려면 해당 커널 스레드를 만들어야 함
→ 많은 수의 커널 스레드가 시스템 성능에 부담을 줄 수 있다.
- 사용자 스레드를 만들려면 해당 커널 스레드를 만들어야 함
- Linux, Windows 운영체제 제품군은 일대일 모델을 구현
- 대부분의 운영체제는 일대일 모델을 사용
다대다 모델(Many-to-Many-Model)
- 여러 개의 사용자 수준 스레드를 그보다 작은 수, 혹은 같은 수의 커널 스레드로 멀티플렉스함
- 커널 스레드의 수는 응용 프로그램이나 특정 기계에 따라 결정
- 응용 프로그램은 4개의 코어 시스템보다 8개의 코어 시스템에서
더 많은 커널 스레드를 할당받을 수 있음
- 응용 프로그램은 4개의 코어 시스템보다 8개의 코어 시스템에서
- 장점
- 개발자는 필요한 만큼 사용자 수준 스레드를 생성할 수 있고,
상응하는 커널 스레드가 다중 처리기에서 병렬로 수행될 수 있다. - 스레드가 봉쇄형 시스템 콜을 발생시켰을 때, 커널이 다른 스레드의 수행을 스케줄 할 수 있다.
- 개발자는 필요한 만큼 사용자 수준 스레드를 생성할 수 있고,
- 단점
- 구현하기가 어렵다.
- 구현할 필요가 딱히 없다. ← 커널 스레드 수를 제한하는 것의 중요성이 줄어듦
← 대부분의 시스템에서 처리 코어 수가 증가했기 때문
다대다 모델의 변형 - 두 수준 모델(two-level model)
- 많은 사용자 스레드를 적거나 같은 수의 커널 스레드로 멀티플렉스 시키지만,
한 사용자 스레드가 하나의 커널 스레드에만 연관되는 것을 허용