>

PC에서 여러가지 일을 한번에 할 수 있게 해주는 것이 Task Switching 이다.

Kernel에서의 Task Switching은 TSS와 TSS Descriptor 가 사용되고 jmp 방식과 call 방식이 있다. 이러한 방식을 선점형 방식이라고 한다.

기본 원리는 CPU에서 수행되는 프로그램의 모든 레지스터 값을 일단 보존 시키고 돌아올 때 복원시켜 멈췄던 부분부터 다시 재개하는 것이다. 보존시킬 때는 RAM 상에 모든 레지스터 값이 보존될 영역이 있어야하는데 이 영역을 TSS(Task State Segment)라고 부른다.

또한 이 TSS를 지정하는 TSS 디스크립터가 GDT에 지정되어 있어야 한다.


* 출처 : http://onestep.tistory.com/31

Previous Task Link : 이전에 동작하던 프로그램의 TSS 영역의 세그먼트 셀렉터 값이 들어간다. call 명령으로 Task Switching 할 시 사용된다.

ESP0, SS0 ~ ESP2, SS2 : CPU가 사용하는 시스템 레벨별로 스택이 따로 존재한다. 0과 3만 사용하는데 3은 유저레벨 스택으로 SS칸에 지정한다.


LTR : CPU에 있는 TR 레지스터에 TSS 디스크립터 셀렉터 값을 넣는 명령. Task Switching이 되면 현 Task를 LTR로 지정한 TSS 영역에 저장하라는 뜻


call 명령으로 Task Switching을 할 때, EFLAGS의 B비트와 NT 비트가 각 Task를 하나의 체인으로 묶게 하는 역할을 한다.

이전 Task에서 다음 Task로 넘어갈 때, 다음 Task의 NT 비트는 무조건 1로 설정되고 B비트는 0에서 1로 설정된다. 그리고 이전 Task의 Previous Task Link에 이전 Task 셀렉터를 저장한다. 후에 iret 명령으로 돌아갈 때 현 Task의 NT비트와 B비트를 0으로 clear한다.

(이전 Task의 B비트와 다음 Task B비트가 1이여야 iret이 interrupt 처리가 아닌 Task Switching의 복귀로 인식한다.)

'Study > Kenrel' 카테고리의 다른 글

유저모드 Task Switching  (0) 2015.10.01
Protected Mode에서의 보호  (0) 2015.09.30
PIC 초기화  (0) 2015.09.24
IDT(Interrupt Descriptor Table)  (0) 2015.09.24
Protected Mode 진입  (0) 2015.09.23
Posted by Mungsul
,