R&D/OS

[Gate] Task Gate, Trap Gate, Interrupt Gate, Call Gate

sunshout 2013. 12. 5. 00:45

OS에 대해서 심도있게 내려가다 보면, Ring, Privilege Level, Gate라는 단어를 만나게 된다.


ㅇ Gate 란?

- 현재의 낮은 특권(Privileges Level, ex Ring 3) 에서 높은 특권(Ring 0)로 전환할 수 있는 통로


ㅇ Gate의 종류

- Task Gate

- Trap Gate

- Interrupt Gate

- Call Gate


ㅇ 특징

* Gate를 통과하기 않고, 낮은 특권에서 높은 특권으로 전환시, General-Protection Exception(#GP)가 발생한다.

* 모든 gate descriptor는 2bit 의 DPL(Descriptor Privilege Level) field를 가지고 있으며, gate를 통한 전환시 DPL을 통해서 access right를 검사할 수 있다.

  . 하지만 실제적으로 software call (call gate, trap gate) 에서만 사용검사를 한다.(해당 명령어 : call, jmp, int)


ㅇ Task Gate

- Hardware적으로 Task switching을 지원하기 위해서 사용됨

- 하지만 현재 아무도 사용하지 않고 있다.


ㅇ Trap Gate

- IDT에 저장되며, int 명령어를 통해서 호출 된다.

- system call, exception handling, APIC을 사용하는 interrupt handle에서 사용됨


ㅇ Interrupt Gate

- IDT에 저장되며, int 명령어를 통해서 호출 된다.

- Trap Gate와 유사하나, 실행시 추가로 발생하는 Interrupt 를 disable시키는 차이를 가진다. (EFLAGS의 IF를 자동으로 clear함)

- PIC을 사용하는 Interrupt 처리에서 사용됨

- cf) APIC을 사용하는 Interrupt 는 Interrupt nesting 이나 Interrupt의 Priority를 줄 수 있기 때문에 Interrupt Gate가 아닌, Trap Gate를 사용할 수 밖에 없다.


ㅇ Call Gate

- Trap Gate와 유사하며, GDT, LDT를 사용하고, call, jmp 명령어를 통해서 호출된다.

- Trap Gate와의 차이는 Trap Gate보다 많은 parameter를 전달가능하다.

 . 하지만 OS 입장에서는 portability가 부족하고, Trap Gate를 통해서도 구현가능하기 때문에 잘 사용되지 않는다.