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를 통해서도 구현가능하기 때문에 잘 사용되지 않는다.