Multithreading Models
스레드에 대한 지원은 두가지 level이 있다
- 사용자 스레드 : 커널 위에서 지원되며 커널 지원 없이 관리 된다.
- 커널 스레드 : 운영 체제에서 직접 지원 및 관리된다.
Wiridows XP, Linux, Mac OS X, Solaris 및 Tru64 UNIX(이전의 Digital UNIX)를 포함한 거의 모든 최신 운영 체제는 커널 스레드를 지원한다.
사용자 스레드와 커널 스레드 간에 관계에 따라 세가지로 분류된다.
- Many-to-One
- One-to-One
- Many-to-Many
1. Many-to-One Model
다대일 모델은 많은 사용자 수준 스레드를 하나의 커널 스레드에 매핑한다.
스레드 관리는 사용자 공간의 스레드 라이브러리에 의해 수행되므로 효율적이다.
그러나 스레드가 차단 시스템 호출을 하면 전체 프로세스가 차단된다.
한 번에 하나의 스레드만 커널에 액세스할 수 있으므로 다중 프로세서에서 여러 스레드를 병렬로 실행할 수 없다.
이 시스템을 선택하는 모델은 적다!
사용 : Solaris Green Threads, GNU Portable Threads
2. One-to-One Model
일대일 모델은 각 사용자 스레드를 커널 스레드에 매핑한다.
스레드가 차단 시스템 호출을 만들 때 다른 스레드가 실행되도록 허용하여 다대일 모델보다 더 많은 동시성을 제공한다.
다중 스레드가 다중 프로세서에서 병렬로 실행될 수 있다.
이 모델의 유일한 단점은 사용자 스레드를 생성하려면 해당 커널 스레드를 생성해야 한다.
커널 스레드 생성의 오버헤드는 애플리케이션의 성능에 부담을 줄 수 있기 때문에 이 모델의 대부분의 구현은 시스템에서 지원하는 스레드 수를 제한한다.
사용 : Linux, Window
3. Many-to-Many Model
다대다 모델은 많은 사용자 수준 스레드를 더 작거나 같은 수의 커널 스레드로 다중화한다.
커널 스레드의 수는 특정 응용 프로그램이나 특정 시스템에 따라 다를 수 있다.
다대일 모델을 사용하면 개발자가 원하는 만큼 사용자 스레드를 생성할 수 있지만 커널은 한 번에 하나의 스레드만 예약할 수 있기 때문에 진정한 동시성은 얻을 수 없다.
일대일 모델은 더 큰 동시성을 허용하지만 개발자는 애플리케이션 내에서 너무 많은 스레드를 생성하지 않도록 주의해야 한다.
(어떤 경우에는 생성할 수 있는 스레드 수가 제한될 수 있음)
개발자는 필요한 만큼 사용자 스레드를 생성할 수 있고 해당 커널 스레드는 다중 프로세서에서 병렬로 실행할 수 있다.
스레드가 차단 시스템 호출을 수행할 때 커널은 실행을 위해 다른 스레드를 예약할 수 있다.
4. Two-level Model
2단계 모델이라 하고 변형.. 정도
다대다 모델과 비슷하지만 사용자 스레드가 커널 스레드에 바인딩되는 것을 허용한다.
사용 : IRlX, HP-UX 및 Tru64 UNIX
( Solaris 운영 체제는 Solaris 9 이전 버전에서 2단계 모델을 지원했으나 Solaris 9부터 이 시스템은 일대일 모델을 사용)
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 페이징 : 페이지 테이블과 주소 변환 (0) | 2022.04.10 |
---|---|
[운영체제] 세마포어 : 세마포어를 사용한 프로세스 동기화 (0) | 2022.04.07 |
[운영체제] 스레드 상태 Thread status (0) | 2022.03.20 |