4-1. 커널 레벨 스레드와 사용자 레벨 스레드
스레드 스케줄링 주체에 따라 2 종류의 스레드로 구분
- 커널 레벨 스레드(kernel-level thread) : 커널에 의해 스케줄링되는 스레드
- 사용자 레벨 스레드(user-level thread) : 스레드 라이브러리에 의해 스케줄링되는 스레드
커널 레벨 스레드
- 응용 프로그램이 시스템 호출을 통해 커널 레벨 스레드 생성
- 스레드에 대한 정보(TCB)는 커널 공간에 생성되며 커널에 의해 소유됨
- 커널에 의해 스케줄
- 스레드 주소 공간(스레드 코드와 데이터) : 사용자 공간에 존재
- main 스레드는 커널 스레드
- 응용 프로그램을 적재하고 프로세스를 생성할 때 커널은 자동으로 main 스레드 생성
사용자 레벨 스레드
- 응용프로그램이 라이브러리 함수를 호출하여 사용자 레벨 스레드 생성
- 스레드 라이브러리가 스레드 정보(U-TCB)를 사용자 공간에 생성하고 소유
- 스레드 라이브러리는 사용자 공간에 존재
- 커널은 사용자 레벨 스레드의 존재에 대해 알 수 없음
- 스레드 라이브러리에 의해 스케줄
- 스레드 주소 공간(스레드 코드와 데이터) : 사용자 공간에 존재
4-2. 순수 커널 레벨 스레드
순수 커널 레벨 스레드(pure kernel-level thread)
- 부팅 때부터 커널의 기능을 돕기 위해 만들어진 스레드
- 커널 코드를 실행하는 커널 스레드
- 스래드의 주소 공간은 모두 커널 공간에 형성
- 사용자와 대화하지 않으며 백그라운드에서 실행됨
- 커널 모드에서 작동, 사용자 모드에서 실행되는 일은 없음
4-3. 사례 설명(1)
사례 개요 : 프로세스 2개, 커널 레벨 스레드 4개, 사용자 레벨 스레드 3개
2개의 순수 커널 레벨 스레드
- TCB1, TCB2
-이들 스레드의 주소 공간은 커널에 있음. 부팅 때부터 커널에서 실행되도록 만들어진 스레드
2개의 커널 레벨 스레드
- 프로세스당 하나의 커널 레벨 스레드(main 스레드) 자동 생성
- TCB3
- 커널은 단일 스레드 프로세스1을 적재할 때 자동으로 main 스레드 TCB3 생성
- 커널이 프로세스1을 실행시키기 위함
- TCB4
- 커널은 멀티스레드 프로세스2를 적재할 때 자동으로 main 스레드 TCB4 생성
- 커널이 프로세스2를 실행시키기 위함
3개의 사용자 레벨 스레드
- 프로세스2의 main()함수가 라이브러리 함수를 호출하여 자신을 사용자 레벨 스레드로 등록
- U-TCB1 생성
- 프로세스2의 main() 함수가 라이브러리 함수를 호출하여 2개의 사용자 레벨 스레드 추가 생성
- U-TCB2, U-TCB3 생성
4-4. 사례 설명(2)
스레드 스케줄링
- 커널에 의한 스케줄링
- 코어1 : TCB2 실행 (TCB2가 가리키는 커널 스레드 코드 2 실행)
- 코어2 : TCB4 실행(TCB4가 가리키는 프로세스 내의 코드 실행)
- 처음에는 프로세스 2의 main()함수에서 실행을 시작하지만 현재 어떤 함수의 코드를 실행하고 있는지 알 수 없음
- 커널은 프로세스 2 내에 하나의 스레드만 있다고 생각함
프로세스2에서의 사용자 스레드 스케줄링
스레드 라이브러리가 3개의 사용자 스레드 스케줄
- 예) main()함수가 스레드 라이브러리 yield()함수를 호출하면, 이 함수는 현재 대기중인 U-TCB2, U-TCB3 중에서 하나를 선택한다. 만약 U-TCB3이 선택되었다면, U-TCB1에 현재 실행 주소 등을 저장해두고, U-TCB3에 저장된 실행 시작 주소(스레드 코드 3)로 점프하여 실행을 시작한다. -> U-TCB3이 스케줄 되었음
4-5. 커널/사용자 레벨 스레드 장단점
컨텍스트 스위칭과 스레드 관리
컨텍스트 스위칭: 사용자 레벨 스레드가 더 효과적
커널 레벨 스레드 - 커널 내 자료구조 수정
- CPU 레지스터 -> 커널 내 TCB 저장
- TCB 리스트 수정
- 새 스레드가 실행되는 동안 CPU 캐시의 코드/데이터 교체
사용자 레벨 스레드 - 커널 진입 X
- 컨텍스트를 쓰거나 읽어오지 않음
- U-TCB 사이의 교체, U-TCB 리스트 조작 정도
- 스레드 생성 시간도 짧음
4-6. 커널/사용자 레벨 스레드 장단점
이식성 및 활용성
사용자 레벨 스레드가 우세
- 운영체제에 종속X
- 멀티스레드 지원하지 않는 운영체제에서도 스레드 라이브러리를 이용하여 멀티스레드 응용프로그램 작성 가능
실행 블록킹
사용자 레벨 스레드의 경우 blocked 상태가 될 때 같은 응용프로그램 내 다른 모든 사용자 레벨 스레드 실행 불가
병렬성
사용자 레벨 스레드들은 멀티 코어에서 병렬 실행 불가
'IT 공부 > 운영체제' 카테고리의 다른 글
5-6. 멀티 스레드에 관한 이슈 (0) | 2023.04.20 |
---|---|
5-5. 멀티 스레드 구현 (0) | 2023.04.20 |
5-3. 스레드 주소 공간과 컨텍스트 (0) | 2023.04.15 |
5-2. 스레드의 개념 (0) | 2023.04.15 |
5-1. 프로세스의 문제점 (0) | 2023.04.15 |