쓰레드는 두 가지 유형으로 나뉜다.
1) 유저 수준 쓰레드 ( ULT ; Uerser Level Thread )
2) 커널 수준 쓰레드 ( KLT ; Kerner Level Thread )
유저 수준 쓰레드 ( UTL )
OS 커널은 PCB를 통해 프로세스를 제어한다. 디스패처 프로그램으로 처리기 인터리빙을 구현하여 스케줄링을 제어하기도 한다. 이처럼 프로세스는 커널 영역 메모리에서 제어가 이루어진다. 그러나 쓰레드는 유저 영역 메모리 안에서도 충분히 제어를 할 수 있다.
스레드 API 라이브러리는 스레드를 제어할 자료구조와 알고리즘을 담고 있다. 라이브러리가 유저영역 메모리 안에 존재하므로 커널 모드로 전환되지 않아도 스레드를 제어할 수 있다. 커널영역에는 스레드 제어 블록을 포함한 제어 알고리즘이 존재하지 않으므로 유저 영역에서의 스레드에 간섭할 수 없다. 그러므로 커널 영역의 프로세스가 블록되어도 스레드는 죽지 않고 계속 돌아간다.
ULT는 커널 모드 전환이 필요없어 오버헤드가 없고 응용 프로그램에 맞는 스케줄링 구성이 가능하고 어떤 운영체제에도 호환이 된다는 장점이 있다.
반대로 단점도 있다. 커널이 스레드를 간섭하지 못하므로 멀티코어의 환경에서 다양한 스레드를 다양한 처리기에 할당할 수 없다. 커널은 이런 하드웨어적 장점을 살릴 수 없다. 또한 한 스레드가 입출력을 위해 시스템 콜을 하면 처리기가 하나이므로 다른 스레드도 모두 블록된다.
커널 수준 쓰레드 ( KLT )
커널이 스레드의 문맥을 유지하는 것이다. 스레드를 생성 및 제거하려면 커널의 제어가 필요하다. 응용 프로그램 영역에는 스레드 관리를 위한 코드가 없다.
이로써 커널은 여러 처리기에 접근할 수 있으므로, 같은 프로세스 내의 여러 스레드를 동시에 스케줄링 할 수 있다. 한 쓰레드가 블록되어도 다른 쓰레드를 스케줄링할 수 잇다.
그러나 잦은 모드 전환으로 오버헤드를 발생시킬 수 있다.
결합된 접근 방법
어떤 운영체제는 ULT와 KLT 구현이 결합된 형태를 제공한다. 커널 영역에서는 스레드 생성이 이루어지고 사용자 영역에서는 스레드 스케줄링 및 동기화를 한다. 대표적으로 Solaris가 있다.
참고자료
'CS > OS' 카테고리의 다른 글
[운영체제] 병행성 (0) | 2021.10.12 |
---|---|
[운영체제] Amdal의 법칙 , 구스타프슨 법칙 (0) | 2021.10.12 |
[운영체제] 쓰레드 ( Thread ) (0) | 2021.10.11 |
[운영체제] 프로세스 제어구조 (0) | 2021.10.11 |
[운영체제] 프로세스 상태 (0) | 2021.10.11 |