2010-07-02 9 views
4

요약 : x86-64 모드에서 x86-32 모드에서와 같이 느린 속도로 점프하고 있습니까? +/- 32K와 x86-64 및 원거리 통화/점프

  • 근처 PC 오프셋 +/- 127 바이트 (2 바이트 명령)으로

    • 짧음 : 86 프로세서

      는 세 종류로 분류 점프 멀리 점프 50을하면서 "주위 롤"현재 세그먼트 어디서나 이동 가능 (3 바이트 명령)까지
    • (5 바이트 명령어)

    짧은 근처 점프는 1-2 개의 클록 사이클을 취하는 것이 오프셋 ~ 80 클럭 사이클,에 따라 프로세서. 문서를 읽었을 때, 이것은 그들이 "현재 코드 세그먼트 인 CS 외부로 나가기 때문"입니다.

    x86-64 모드에서 코드 세그먼트는 사용되지 않습니다. 세그먼트는 사실상 항상 0..∞입니다. Ergo, 세그먼트 외부로 나가면 벌칙이 있어서는 안됩니다.

    따라서 질문 : 프로세서가 x86-64 모드 인 경우 원거리 점프에 대한 클록 사이클 수가 변경됩니까?

    관련 보너스 : 32 비트 보호 모드에서 실행되는 대부분의 * nix 형 운영 체제는 세그먼트 크기를 0..infinity로 명시 적으로 설정하고 페이지 테이블을 통해 선형 -> 물리적 변환을 완전히 관리합니다. 그들은 멀리 호출 (적은 클럭 사이클)에 대한 시간 측면에서 이점을 얻는가, 아니면 8086 년 이후 레지스터가 실제로 사용 된 크기 세그먼트 레지스터의 페널티가 내부 CPU 레거시입니까?

  • +1

    \ * nix 시스템에 대한 귀하의 의견은 Windows, AFAIK에도 적용됩니다. 필자는 실제로 코드 세그먼트를 사용하는 * 모든 최신 운영 체제가 있다고 생각하지 않습니다. –

    답변

    1

    CS는 기본 및 제한뿐만 아니라 사용 권한에도 사용됩니다. CPL에 같은 다른 분야뿐만 아니라, 거기에 인코딩되어

    • D 비트 - 호환성 또는 64 비트 모드를 선택한다 - 32 비트 또는 16 비트의 기본 세그먼트 크기 L 비트
    • 세그먼트 (이 경우 기본 및 한계가 중요 함)

    원거리 점프는 작업 게이트를 통과 할 수도 있고 멀리있는 호출도 호출 게이트를 통과 할 수 있습니다. 이들 모두는 64 비트 모드와 상관없이 처리해야합니다.

    요약하면 64 비트 모드의 원거리 점프는 32 비트 모드보다 빠릅니다. 실제로 64 비트 모드가 활성화 된 경우 세그먼트 설명자가 64 비트 모드가 비활성화 된 경우의 두 배 크기 때문에 모든 디스크립터 테이블 액세스가 두 배로 증가하여 점프 시간이 길어질 수 있습니다.