2013-08-20 4 views
1

누구나 세그먼트 설명 자와 게이트 설명 자 사이의 정확한 차이점을 설명해 주시겠습니까? 인텔 설명서를 통과하려하지만 정확히 왜 게이트 설명자가 필요한지 알아낼 수 없습니까? 세그먼트 기술 어 이외의 다른 시설 또는 지원 메커니즘은 무엇입니까? 세그먼트 설명자에 액세스하려고 할 때 권한 수준 검사를 수행 할 수 있습니까? 또한 리눅스와 Windows는 Call Gate Descriptor를 사용하지 않습니다. 아니면 세그먼트 디스크립터에 액세스하기 전에 하나 이상의 보호 레이어가 입니까? 게이트 디스크립터의 정확한 차이점과 필요성을 알고 싶습니다.세그먼트 설명자 대 게이트 설명자

답변

2

세그먼트 설명자는 주소 지정에 사용할 세그먼트를 지정합니다. 세그먼트는 명령 양식 (예 : bp 어드레싱은 ss을 기반으로 함)에 의해 미리 정의되거나 세그먼트 오버라이드 접두어으로 재정의 된 지침서 (movsb, scasb)로 미리 정의됩니다. 세그먼트 설명자는 (G|L)DT에 저장됩니다.

게이트 디스크립터는 일반적으로 IDT의 문제입니다. 우리는 인터럽트 게이트 (HW에 사용됨), 트랩 게이트 (프로세서 예외 및 소프트웨어 인터럽트 용) 및 태스크 게이트 (HW 태스크 전환에 사용됨)를 알고 있습니다. 그들 사이의 차이는 매우 작습니다 (인터럽트 게이트는 실제가 완료 될 때까지 다른 인터럽트를 금지합니다). 그러나 IDT에서는 비트 표현이 다릅니다.

콜 게이트는 다른 장입니다. 이들은 LDT/GDT에 있으며 IDT에는 존재하지 않습니다. 유형 비트 필드는 1100b으로 설정해야하며 baselimit은 아니지만 코드에 사용해야하는 다른 세그먼트 선택기와 해당 세그먼트에 offset이 있어야합니다. 콜 게이트 기본 기능 : 최소한의 특권 코드에 의해 이용 될 수있는 절차

  • 엔트리 포인트

    1. 대상 코드 세그먼트 (다른 ​​디스크립터 테이블에 저장된 세그먼트 기술자의 인덱스) ... 지정 (offset 필드를 사용하여) 단계는 선택적 파라미터
    2. 번호가 스택에 값
    3. 사이즈 (16/(5 비트 값이 31 인 맥스.이 목적을 위해 예약 된) 태스크 스위치가 발생할 때 스택 사이 복사 할 32 비트)

    기능 목록은 here입니다.

    최신 운영 체제는 일반적으로 호출 게이트를 사용하지 않지만 IDT에 저장된 트랩 게이트는 속도가 빠르기 때문에 사용합니다. 이러한 "트랩"은 int 또는 sysenter을 사용하여 호출되며 iret/iretd 또는 sysexit을 사용하여 반환됩니다. 콜 게이트를 사용하려면 GDT/LDT, jump far에 게이트 설명자가 필요하며 콜 게이트에 들어가려면 ret far으로 돌아 가야합니다. sysentersysexit 명령어는 커널 링 (0)과 사용자 링 (3) 사이의 전송 제어 만 수행하지만 호출 게이트에는 이러한 제한이 없습니다.