본문 바로가기

IT 공부/운영체제

5-4. 커널 레벨 스레드와 사용자 레벨 스레드

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