이제 태스크 스위칭에대해서만 !! 한번 생각해보자 !!!

Preview:

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

음…프로세스와

쓰레드에 대해서 그리고 태스크 스위칭 하는

방법에 대해서감이 오는가 ??????

Recommended