스레드의 유형
사용자 수준 스레드와 커널 수준 스레드
사용자 수준 스레드(ULT: user-level thread)
작동 방식
- Thread2
- B를 블록시키는 함수 호출 -> 커널로 제어 이동
- 커널
- 입출력 작업 -> 프로세스 B 블록
- (b) -> Thread2는 수행 상태가 아니지만 라이브러리에서는 수행 상태로 인식
- 프로세스 B 할당 시간 소모
- 준비 상태로 전이
- Thread2는 여전히 수행 상태
- Thread2는 Thread1에 의해 블록
- 프로세스 B는 여전히 수행 상태
특징
- 스레드 관리와 관계된 모든 일은 응용이 수행하며 커널은 스레드의 존재를 알지 못함
- 커널은 프로세스 단위로 스케줄하며 프로세스에게 어떤 수행 상태를 할당
- ULT 관리 루틴들도 구성된 패키지인 스레드 라이브러리를 이용하여 모든 응용을 멀티스레드 기반으로 프로그래밍 가능
- 스레드 라이브러리
- 스레드의 생성과 제거, 스레드 간 메시지와 데이터 전달, 스레드 수행의 스케줄링, 스레드 문맥의 저장과 복구 등을 위한 코드
- 모든 작업은 사용자 공간과 단일 프로세스 내에서 이루어짐
장점
- 스레드 관리를 위한 모든 자료구조가 프로세스의 사용자 주소 공간에 있음
=> 스레드 교환에 따른 커널 모드 권한 요청 불필요
- 응용에 맞게 구성될 수 있는 스케줄링
- 어떠한 운영체제에도 적용
단점
- 대부분의 시스템 호출은 해당 스레드를 블록
=> 프로세스 내의 모든 스레드가 블록
- 멀티프로세싱의 장점을 살릴 수 없음
- 임의 시점에 단일 프로세스 내에서 하나의 스레드만을 수행
- 응용의 수행 속도를 향상시킬 수 있음
단점의 해결방법
- 응용을 멀티스레딩 대신 멀티프로세서로 작성
=> 프로세스 교환을 함으로써 각 교환마다 오버헤드 증가, 스레드의 장점을 살리지 못함 ❌
- 자켓팅(jacketing) -> 블록형 시스템 호출을 비블록형(nonblocking) 시스템 호출로 변환
커널 수준 스레드(KLT: kernel-level thread)
특징
- 스레드 관리와 관련된 모든 작업이 커널에 의해 이루어짐
- 커널이 전체 프로세스에 대한 문맥 정보 및 각 프로세스 내 스레드에 대한 문맥 정보 유지
장점
- 사용자 모드 스레드의 단점 모두 극복
- 커널은 여러 처리기에게 같은 프로세스 내의 여러 스레드를 동시에 스케줄
- 한 프로세스의 스레드가 블록되도 커널이 같은 프로세스에서 다른 스레드를 스케줄할 수 있음
단점
- 같은 프로세스 내의 한 스레드에서 다른 스레드로 제어를 넘길 때 커널로의 모드 전환 필요
- 커널 모드 진입으로 인한 오버헤드 발생(연산지연 발생)
연산 | 사용사 수준 스레드 | 커널 수준 스레드 | 프로세스 |
---|
Null Fork(Null 프로시저를 호출하는 프로세스/스레드의 생성,스케줄,수행,완료까지 걸린 시간) | 34 | 948 | 11,300 |
Signal-Wait(프로세스/스레드가 대기 중인 한 프로세스/스레드에게 신호를 보낸 다음 특정 조건을 기다리는데 걸리는 시간) | 37 | 441 | 1,840 |
=> KLT 멀티스레드의 이용으로 속도 향상, ULR를 이용한 추가적인 속도 향상(응용의 특성 따라 다름)
두 모드를 결합한 형태
특징
- 스레드 생성이 완전히 사용자 공간에서 이루어짐
- 한 응용 내의 스레드들에 대한 스케줄링 및 동기화가 대부분 사용자 공간에서 이루어짐
- ULR들이 KLT에 사상(mapping)
- 한 응용의 스레드들이 다수의 처리기에서 병렬 수행 가능
- 블록형 시스템 호출이 전체 프로세스를 블록시키지 않음
- 예) Solaris(ULT:KLT = 1:1)
장점
순수 ULR 및 KLT 방식의 장점을 모두 살릴 수 있음
단점
설계가 어려워서 대부분 안 씀
다른 배합
단일 프로세스에 여러 스레드를 제공하는 다대일(M:1) 관계와 더불어 다대다(M:N) 관계와 일대다(1:M) 관계의 조합 또한 연구중
스레드:프로세스 | 설 명 | 시스템 예 |
---|
1:1 | 수행 중인 각 스레드는 자신의 주소 공간과 자원을 갖는 유일한 프로세스 | 대부분의 UNIX 시스템 |
M:1 | 프로세스는 주소 공간과 동적인 자원 소유권을 정의하며, 여러 스레드가 해당 프로세스 내에서 생성 및 수행될 수 있음 | Windows NT, Solaris, Linux, OS/2, OS/390 등 |
1:M | 스레드는 한 프로세스 환경에서 다른 프로세스 환경으로 이동 가능 -> 스레드가 다른 시스템 간을 쉽게 이동할 수 있음 | Ra(Clouds), Emerald |
M:N | 1:M과 M:1의 특성 혼합 | TRIX |