2022. 2. 2. 14:10ㆍOperatingSystem
학습목표
1. Windows XP에서 쓰레드를 어떻게 구현하는지 학습
2. Linux에서 쓰레드를 어떻게 구현하는지 학습
5.1 Windows XP Thread
쓰레드의 일반적인 구성요소는 다음과 같습니다.
- 쓰레드 ID : 각각의 쓰레드를 유일하게 식별
- 레지스터 집합 : 처리기의 상태를 나타냄
- 사용자 스택 : 사용자 모드에서 실행할 때 저장공간
- 커널 스택 : 커널 모드에서 실행할 때 저장공간
- 쓰레드별 데이터 : 각각의 쓰레드만이 갖고 있는 저장 영역
쓰레드의 자료구조
- ETHREAD : 실행 쓰레드 블록(executive thread block)
- KTHREAD : 커널 쓰레드 블록(kernel thread block)
- TEB : 쓰레드 환경 블록(thread environment block)
ETHREAD
ETHREAD의 주요 내용으로는 그 쓰레드가 속한 프로세스를 가리키는 포인터와 그 쓰레드가 실행을 시작해얗 할 루틴의 주소 등이 있습니다. 이외에도 ETHREAD는 KTHREAD에 대한 포인터도 가지고 있습니다.
KTHREAD
쓰레드의 스케줄링 및 동기화 정보를 가지고 있습니다. 그리고 커널 스택과 TEB에 대한 포인터를 가지고 있습니다.
TEB
사용자 모드에서 실행될 때 접근되는 사용자 공간 자료 구조이다. 쓰레드 ID, 유저 스택, 쓰레드별 데이터를 갖고 있습니다.
아래의 그림은 Windows XP 쓰레드의 자료구조입니다. ETHREAD와 KTHREAD는 모두 커널 영역 안에 존재하고 커널만이 접근할 수 있습니다.
5.2 Linux Thread
Linux는 fork() 시스템 콜을 이용하여 프로세스를 복제하거나 clone() 시스템 콜을 이용하여 쓰레드를 생성할 수 있는 기능을 제공합니다. 그러나 Linux는 프로세스와 쓰레드를 구별하지 않습니다. Linux는 프로그램 내의 흐름을 나타내기 위하여 프로세스나 쓰레드보다 테스크라는 용어를 사용합니다. clone() 시스템 콜이 호출될 때, 플래그의 집합이 전달되고 이 플래그들이 부모와 자식 테스크간의 얼마만큼의 공유를 허용하는지 결정합니다. 그 중 일부 플래그들이 아래에 나열되어 있습니다.
플래그 | 의미 |
CLONE_FS | 파일 시스템 정보가 공유됨 |
CLONE_VM | 같은 메모리 공간이 공유됨 |
CLONE_SIGHAND | 신호 처리기가 공유됨 |
CLONE_FILES | 열린 파일의 집합이 공유됨 |
Linux 커널이 테스크를 표현하는 방식 때문에 다양한 공유 수준이 가능합니다. 시스템의 테스크마다 고유한 커널 자료구조가 존재합니다. 이 자료 구조는 테스크의 자료를 저장하는 것이 아니라 저료가 저장되어 있는 다른 자료 구조를 가리키는 포인터를 포합합니다.
References
Operating System Concepts, 7th Ed. feat. by Silberschatz et al.
[인프런] 운영체제 공룡책 강의
'OperatingSystem' 카테고리의 다른 글
[운영체제][프로세스관리] CPU Scheduling #2 스케줄링 알고리즘(Scheduling Algorithm), FCFS, SJF (0) | 2022.02.21 |
---|---|
[운영체제][프로세스관리] CPU Scheduling #1 CPU Scheduling의 개념 및 기준 (0) | 2022.02.17 |
[운영체제][프로세스관리] 쓰레드 #4 쓰레드와 관련된 문제들(Threading Issues) (0) | 2022.02.02 |
[운영체제][프로세스관리] 쓰레드 #3 쓰레드 라이브러리(Thread Library) (0) | 2022.01.26 |
[운영체제][프로세스관리] 쓰레드 #2 다중 쓰레드 모델(Multithreading Model) (0) | 2022.01.25 |