Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "이제 태스크 스위칭에대해서만!! 한번 생각해보자!!!"— Presentation transcript:

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

2 태스크 스위칭이 뭘까????

3 태스크를 스위칭하는 것이다!!!

4

5 대기중인 쓰레드 실행중인 쓰레드 Thread Thread Thread Task Switching Thread Thread Thread

6 그럼! Task라는게 뭘까????

7 태스크라면…이런정보들이 있다!!! CS 와 IP를 가지고 있다. Data Segment를 가지고 있다.
커널 스택/ 유저 스택을 가지고 있다 일반사용 레지스터를 가지고 있다. FLAGS 레지스터를 가지고 있다.

8 Task Information 테스크 정보를 저장하는 구조체가 있다!!! TASK STATE SEGMENT TSS

9 각종 작업정보가 들어 있다. 쉽게 말하면 CPU에서 일을하는데 필요한 정보들은 다 들어 있다.

10

11 인텔 CPU메뉴얼을 함봐보자!!!

12 IA64 TSS는 어떻게 생겼을까???

13 X64의 TSS는 어떻게 생겼을까???

14 그러면 인텔 CPU는 TSS는 왜 만들었을까? 멀티 테스킹을 지원 하기 위해 만들었다!

15 태스크 스위칭이 일어날때 CPU는 어떤짓을 하는가?

16 TR = 6번째 TR = 5번째 GDT NULL Descriptor 1 RING 0 CS 2 RING 0 DS 3
NULL Descriptor 1 RING 0 CS 2 RING 0 DS 3 RING 3 CS 4 RING 4 DS 5 TSS 1 6 TSS 2 Task 1 TSS Task 2 TSS TR = 6번째 TR = 5번째

17 테스크 관리 에 동원되는 것들은???

18 GDT TSS Task State Segment TSS Descriptoer 64비트 or 32비트 Base Address
32비트Limit Attributes Task Register (TR) TSS Selector TSS Task State Segment

19

20 Task Register (TR) TSS Selector

21 GDT TSS Descriptoer

22 GDT TSS Descriptoer

23 그럼 언제 이런 테스크 스위칭을 CPU에게 시킬수 있나?

24 자 CPU에게 태스크 스위칭을 해보라고해보자!!

25 CALL [TaskGateIndex]:0
GDT Task Gate LDT Task Gate CALL [TaskGateIndex]:0 JMP [TaskGateIndex]:0

26 CALL [TaskGateIndex]:0
GDT TSS Descriptor CALL [TaskGateIndex]:0 JMP [TaskGateIndex]:0

27 IDT TSS Descriptor INT TaskGateIndex

28 IDT TSS Descriptor INT TaskGateIndex

29 IRET TSS Task State Segment EFLGAS의 NT == 1

30 태스크 게이트를 사용한다는게 뭔말이냐?

31 태스크 게이트를 사용한다는게 뭔말이냐?

32 태스크 게이트를 사용한다는게 뭔말이냐?

33 CPU단의 태스크 스위칭이 뭔지 정리되는가? TR(Task Register)가 변경되는것!
TSS에 CPU레지스터 값을 저장하고 CPU의 레지스터 값을 새로운 TSS의 값으로 바꾸는 행위

34 그럼 태스크와 쓰레드 프로세스와는 뭐가 다른데!!!???????
그럼 태스크와 쓰레드 프로세스와는 뭐가 다른데!!!??????? 쓰레드와 프로세스라는것은 이 CPU가 제공하는 일의 기본단위인 TASK를 추상화한것이다!!!!!

35 자 그럼 프로세스와 쓰레드를 만들어보자!!!!

36 “프로세스”라는게 뭔가? 난! 쓰레드의 리스트를 프로세스라고하자!!!

37 그럼 “쓰레드”라는게 뭔가?

38 그럼 “쓰레드”라는게 뭔가? 스택과 TSS를 가진놈이다! 라고 정의하자!!!!!!

39 이렇게 말이다!! 이걸 난 “쓰레드”라고 하겠다!!!

40 그럼 “쓰레드”교환을 어떻게 해줄까????

41

42 타이머 인터럽트가 들어오면 쓰레드를 교환해주자!!!

43 어떻게 ????????

44 IDT TSS Descriptor 타이머 Int 발생 일단!!! 타이머 인터럽트가 발생하면 “TSS Descriptor”로 가도록하자!!! 그러면 바로 TASK 스위칭이 일어날것이다!

45 GDT IDT TSS Task State Segment 타이머 Int 발생 TSS Descriptor
SW TSS Descriptor TM TSS Descriptor IDT TSS Descriptor TSS Task State Segment

46 GDT IDT TSS Task State Segment 타이머 Int 발생 TSS Descriptor
SW TSS Descriptor TM TSS Descriptor IDT TSS Descriptor SW TSS Descriptor TSS Task State Segment

47 이렇게하고 IRET 하면 어떻게 될까??? 쓰레드르 바꿔칠수 있는것이다!!!! SW TSS Descriptor TSS Task
BASE ADDRESS 이렇게하고 IRET 하면 어떻게 될까??? TSS Task State Segment OLD TSS Task State Segment NEW 쓰레드르 바꿔칠수 있는것이다!!!!

48 초비츠의 프로세스와 쓰레드를 구경해보자!!!

49 초비츠의 프로세스와 쓰레드를 구경해보자!!! 이게 초비츠 프로세스다!

50 초비츠의 프로세스와 쓰레드를 구경해보자!!! 이게 초비츠 프로세스다!

51 초비츠의 쓰레드를 구경해보자!!! 이게 초비츠 쓰레드다!

52 IDT 타이머 인터럽트가 발생하면 IDT 20번째 Descriptor를 참고해서 인터럽트를 처리한다.
Task Gate Descriptor 타이머 인터럽트가 발생하면 IDT 20번째 Descriptor를 참고해서 인터럽트를 처리한다. 타이머 Int 발생

53 GDT TASK_SW_SEG TMR_TSS_SEG

54 GDT 태스크 스위칭하고.. Iret 하면 이전 task로 다시 스위칭!!!!!된다.!!!! TASK_SW_SEG
TMR_TSS_SEG 태스크 스위칭하고.. Iret 하면 이전 task로 다시 스위칭!!!!!된다.!!!!

55 태스크 스위칭은 어떻게 하는가???? 다음 실행시킬 쓰래드를 찾는다. TSS의 Base값을 바꿔친다!!!!

56 GDT TASK_SW_SEG TMR_TSS_SEG 이놈이 이전 태스크 상태를 처리하는 놈이다.

57 자그럼 프로세스만드는것을 해보자! 별것없다.. PCB할당하고 초기값세팅해주고 프로세스관리리스트에 추가하는것 말고는

58 자럼 이번엔 쓰레드를 만들자!!! 이것도 별것 없다. TCB할당하고 스택 할당하고 Entry 함수 알려주 인자넘값포인터
알려주고! 리스트 추가하고 끝!!! 덩말 간단하다!

59 음… 프로세스와 쓰레드에 대해서 그리고 태스크 스위칭 하는 방법에 대해서 감이 오는가??????
음… 프로세스와 쓰레드에 대해서 그리고 태스크 스위칭 하는 방법에 대해서 감이 오는가??????


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

Similar presentations


Ads by Google