590 likes | 921 Views
이제 태스크 스위칭에대해서만 !! 한번 생각해보자 !!!. 태스크 스위칭이 뭘까 ????. 태스크를 스위칭하는 것이다 !!!. 대기중인 쓰레 드. 실행중인 쓰레드. Thread. Thread. Thread. Task Switching. Thread. Thread. Thread. 그럼 ! Task 라는게 뭘까 ????. 태스크라면 … 이런정보들이 있다 !!!. CS 와 IP 를 가지고 있다. Data Segment 를 가지고 있다. 커널 스택 / 유저 스택을 가지고 있다.
E N D
이제 태스크 스위칭에대해서만!!한번 생각해보자!!!
대기중인 쓰레드 실행중인 쓰레드 Thread Thread Thread Task Switching Thread Thread Thread
태스크라면…이런정보들이 있다!!! CS 와 IP를 가지고 있다. Data Segment를 가지고 있다. 커널스택/ 유저 스택을 가지고 있다 일반사용 레지스터를 가지고 있다. FLAGS 레지스터를 가지고 있다.
Task Information 테스크 정보를 저장하는 구조체가 있다!!! TASK STATE SEGMENT TSS
각종 작업정보가 들어 있다. 쉽게 말하면 CPU에서 일을하는데 필요한 정보들은 다 들어 있다.
그러면 인텔 CPU는 TSS는 왜 만들었을까? 멀티 테스킹을지원 하기 위해 만들었다!
Task 1 TSS Task 2 TSS TR = 5번째 TR = 6번째
64비트 or 32비트 Base Address 32비트Limit Attributes Task Register (TR) TSS Selector GDT TSS Task State Segment TSS Descriptoer
Task Register (TR) TSS Selector
GDT TSS Descriptoer
GDT TSS Descriptoer
그럼 언제 이런 테스크스위칭을CPU에게 시킬수 있나?
CALL [TaskGateIndex]:0 GDT LDT Task Gate Task Gate JMP [TaskGateIndex]:0
CALL [TaskGateIndex]:0 GDT TSS Descriptor JMP [TaskGateIndex]:0
INT TaskGateIndex IDT TSS Descriptor
INT TaskGateIndex IDT TSS Descriptor
IRET TSS Task State Segment EFLGAS의 NT == 1
CPU단의 태스크 스위칭이 뭔지 정리되는가? TR(Task Register)가 변경되는것! TSS에 CPU레지스터 값을 저장하고 CPU의 레지스터 값을 새로운 TSS의 값으로 바꾸는 행위
그럼 태스크와 쓰레드 프로세스와는 뭐가 다른데!!!??????? 쓰레드와프로세스라는것은 이 CPU가 제공하는 일의 기본단위인 TASK를 추상화한것이다!!!!!
“프로세스”라는게 뭔가? 난! 쓰레드의 리스트를 프로세스라고하자!!!
그럼 “쓰레드”라는게 뭔가? 스택과 TSS를 가진놈이다! 라고 정의하자!!!!!!
이렇게 말이다!! 이걸 난 “쓰레드”라고 하겠다!!!
타이머 인터럽트가 들어오면쓰레드를 교환해주자!!!
일단!!! 타이머 인터럽트가 발생하면“TSS Descriptor”로 가도록하자!!!그러면 바로 TASK 스위칭이 일어날것이다! TSS Descriptor 타이머 Int발생 IDT
타이머 Int발생 TSS Descriptor IDT GDT TSS Task State Segment SW TSS Descriptor TM TSS Descriptor
타이머 Int발생 TSS Descriptor SW TSS Descriptor IDT GDT TSS Task State Segment SW TSS Descriptor TM TSS Descriptor
이렇게하고IRET하면 어떻게 될까??? SW TSS Descriptor BASE ADDRESS OLD NEW TSS Task State Segment TSS Task State Segment 쓰레드르 바꿔칠수 있는것이다!!!!
초비츠의 프로세스와 쓰레드를 구경해보자!!! 이게 초비츠 프로세스다!
초비츠의 프로세스와 쓰레드를 구경해보자!!! 이게 초비츠 프로세스다!