콜 게이트
보이기
이 문서의 내용은 출처가 분명하지 않습니다. (2012년 3월) |
콜 게이트(call gate)는 CPU의 동작레벨이 낮은 상태에서 높은 레벨의 코드를 호출하기 위한 '입구(Gate)'를 제공하는 구조이다. 소프트웨어 인터럽트(트랩)와 더불어 API를 호출할 때에 사용자 모드에서 커널 모드로 진입하기 위한 방법 중 하나이다.
콜게이트는 컴퓨터 시작시에 운영체제에서 준비를 하는데, 콜게이트를 정의하려면 글로벌/로컬 디스크립터 테이블에 '게이트 디스크립터'를 만들어야 한다. 이 게이트 디스크립터는 8바이트로 실행을 시작하는 코드의 셀렉터값, 그 세그먼트에서의 오프셋, 게이트 속성이 저장되어 있다.
속성에는 게이트의 특권레벨을 나타내는 필드가 있어, CPU의 동작레벨이 여기에 지정된 값 이상이면 게이트를 경유해서 지정한 코드를 실행할 수 있다.
콜 게이트 서술자 포맷
[편집]typedef struct _CALL_GATE
{
USHORT OffsetLow;
USHORT Selector;
UCHAR NumberOfArguments:5;
UCHAR Reserved:3;
UCHAR Type:5;
UCHAR Dpl:2;
UCHAR Present:1;
USHORT OffsetHigh;
}CALL_GATE,*PCALL_GATE;