Upload
sumi
View
83
Download
3
Embed Size (px)
DESCRIPTION
이제 태스크 스위칭에대해서만 !! 한번 생각해보자 !!!. 태스크 스위칭이 뭘까 ????. 태스크를 스위칭하는 것이다 !!!. 대기중인 쓰레 드. 실행중인 쓰레드. Thread. Thread. Thread. Task Switching. Thread. Thread. Thread. 그럼 ! Task 라는게 뭘까 ????. 태스크라면 … 이런정보들이 있다 !!!. CS 와 IP 를 가지고 있다. Data Segment 를 가지고 있다. 커널 스택 / 유저 스택을 가지고 있다. - PowerPoint PPT Presentation
Citation preview
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
음…프로세스와
쓰레드에 대해서 그리고 태스크 스위칭 하는
방법에 대해서감이 오는가 ??????