2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r 이이 태태태 태태태태태태태 태 !! 태태 태태태태 태 !!!
Jan 26, 2016
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
이제 태스크 스위칭에대해
서만 !!한번
생각해보자 !!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
태스크 스위칭이 뭘까 ????
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
태스크를 스위칭하는 것이다 ! ! !
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
Thread
ThreadThread
ThreadThread
Thread
대기중인 쓰레드실행중인
쓰레드
Task Switching
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
그럼 ! Task 라는게 뭘까 ????
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
태스크라면…이런정보들이 있다 !!!
CS 와 IP 를 가지고 있다 .
Data Segment 를 가지고 있다 .
커널 스택 / 유저 스택을 가지고 있다
일반사용 레지스터를 가지고 있다 .
FLAGS 레지스터를 가지고 있다 .
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
Task Information 테스크 정보를 저장하는
구조체가 있다 !!!TASK STATE SEGMENT
TSS
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
각종 작업정보가들어 있다 .쉽게 말하면CPU 에서
일을하는데 필요한
정보들은 다 들어 있다 .
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
인텔 CPU 메뉴얼을 함봐보자 ! ! !
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
IA64 TSS 는 어떻게 생겼을까 ???
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
X64 의 TSS 는 어떻게 생겼을까 ???
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
그러면 인텔 CPU 는 TSS 는 왜 만들었을까 ?
멀티 테스킹을 지원
하기 위해 만들었다 !
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
태스크 스위칭이 일어날때CPU 는 어떤짓을 하는가 ?
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
Task 1 TSS
Task 2 TSS
GDT
0 NULL Descriptor
1 RING 0 CS
2 RING 0 DS
3 RING 3 CS
4 RING 4 DS
5 TSS 1
6 TSS 2
TR = 5 번째 TR = 6 번째
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
테스크 관리 에 동원되는 것들은 ???
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
Task Register(TR)
TSS Selector GDTTSS Descriptoer
64 비트 or 32 비트 Base Ad-dress
32 비트 Limit Attributes
TSSTaskState
Segment
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
Task Register(TR)
TSS Selector
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
GDTTSS Descriptoer
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
GDTTSS Descriptoer
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
그럼 언제 이런 테스크 스위칭을
CPU 에게 시킬수 있나 ?
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
자 CPU 에게 태스크 스위칭을 해보라고해보자 !!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
GDTTask Gate
LDTTask Gate
CALL [TaskGateIndex]:0
JMP [TaskGateIndex]:0
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
GDTTSS Descriptor
CALL [TaskGateIndex]:0
JMP [TaskGateIndex]:0
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
IDTTSS Descriptor
INT TaskGateIndex
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
IDTTSS Descriptor
INT TaskGateIndex
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
TSSTaskState
Segment
IRET
EFLGAS 의 NT == 1
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
태스크 게이트를 사용한다는게 뭔말이냐 ?
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
태스크 게이트를 사용한다는게 뭔말이냐 ?
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
태스크 게이트를 사용한다는게 뭔말이냐 ?
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
CPU 단의 태스크 스위칭이 뭔지 정리되는가 ?
TR(Task Register) 가 변경되는것 !
TSS 에 CPU 레지스터 값을 저장하고CPU 의 레지스터 값을 새로운 TSS 의 값으로
바꾸는 행위
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
그럼 태스크와 쓰레드 프로세스와는
뭐가 다른데 !!!???????
쓰레드와 프로세스라는것은이 CPU 가 제공하는 일의
기본단위인TASK 를 추상화한것이다 !!!!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
자 그럼 프로세스와 쓰레드를
만들어보자 !!!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
“ 프로세스”라는게 뭔가 ?
난 ! 쓰레드의 리스트를
프로세스라고하자 !!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
그럼 “쓰레드”라는게 뭔가 ?
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
그럼 “쓰레드”라는게 뭔가 ?스택과
TSS 를 가진놈이다 !라고 정의하자 !!!!!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
이렇게 말이다 !!이걸 난 “쓰레드”라고 하겠
다 !!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
그럼 “쓰레드”교환을 어떻게 해줄까 ????
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
타이머 인터럽트가 들어오면
쓰레드를 교환해주자 !!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
어떻게 ????????
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
타이머 Int 발생
IDT
TSS Descriptor
일단 !!! 타이머 인터럽트가 발생하면
“ TSS Descriptor” 로 가도록하자 !!!
그러면 바로 TASK 스위칭이 일어날것이다 !
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
타이머 Int 발생
IDT
TSS Descriptor
GDTSW TSS Descriptor
TM TSS Descriptor
TSSTaskState
Segment
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
타이머 Int 발생
IDT
TSS Descriptor
GDTSW TSS Descriptor
TM TSS Descriptor
TSSTaskState
Segment
SW TSS Descriptor
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
SW TSS DescriptorBASE ADDRESS
TSSTaskState
Segment
OLD
TSSTaskState
Segment
NEW
이렇게하고
IRET하면
어떻게 될까 ???쓰레드르
바꿔칠수있는것이
다 !!!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
초비츠의 프로세스와 쓰레드를 구경해보자 !!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
초비츠의 프로세스와 쓰레드를 구경해보자 !!!
이게 초비츠 프로세스다 !
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
초비츠의 프로세스와 쓰레드를 구경해보자 !!!
이게 초비츠 프로세스다 !
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
초비츠의 쓰레드를 구경해보자 !!!
이게 초비츠 쓰레드다 !
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
타이머 Int 발생
IDT
Task Gate De-scriptor타이머 인터럽트가 발생하면
IDT 20 번째 Descriptor 를참고해서 인터럽트를 처리한다 .
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
GDTTASK_SW_SEG
TMR_TSS_SEG
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
GDTTASK_SW_SEG
TMR_TSS_SEG
태스크 스위칭하고 ..Iret 하면이전 task 로 다시스위칭 !!!!!된다 .!!!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
태스크 스위칭은 어떻게 하는가 ????
다음 실행시킬 쓰래드를 찾는다 .
TSS 의 Base 값을 바꿔친다 !!!!
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
GDTTASK_SW_SEG
TMR_TSS_SEG
이놈이이전 태스크상태를 처리하는놈이다 .
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
자그럼 프로세스만드는것을 해보자 !
별것없다 ..PCB 할당하고
초기값세팅해주고프로세스관리리스트에
추가하는것 말고는
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
자럼 이번엔 쓰레드를 만들자 !!!
이것도 별것 없다 .TCB 할당하고스택 할당하고
Entry 함수 알려주인자넘값포인터
알려주고 !리스트 추가하고 끝 !!!
덩말 간단하다 !
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m e n a r
음…프로세스와
쓰레드에 대해서 그리고 태스크 스위칭 하는
방법에 대해서감이 오는가 ??????