Вопрос

Краткое резюме: в режиме X86-64 на дальше прыжках, как медленные, как в режиме x86-32?

На процессоре X86 прыжки падают на три типа:

  • Короткие, с зачетом ПК +/- 127 байтов (2-х байтовая инструкция)
  • Рядом, с компенсацией +/- 32K, что «бросается вокруг» текущего сегмента (3-х байтовая инструкция)
  • Далеко, который может прыгать где угодно (5 байтовых инструкций)

Короткие и близкие прыжки принимают 1-2 тактовые циклы, в то время как дальние прыжки принимают 50-80 часов, в зависимости от процессора. Из моего чтения документации это потому, что они «выходят за пределы CS, текущий сегмент кода».

В режиме X86-64 сегменты кода не используются - сегмент эффектно всегда 0..infinity. Эрго, не должно быть наказание за выезд за пределы сегмента.

Таким образом, вопрос: изменяется ли количество тактовых циклов для дальнего прыжка, если процессор находится в режиме X86-64?

Соответствующие бонусные вопросы: большинство * NIX-подобных операционных системах, работающих в 32-битной защищенном режиме, явно устанавливают размеры сегмента до 0, ... Infinity и управлять линейным -> физическим переводом полностью через таблицы страниц. Получают ли они извлечения из этого с точки зрения времени для дальних вызовов (меньше тактных циклов), или является штрафом, действительно внутреннее наследие процессора из реестров сегментов размеров было с 8086?

Это было полезно?

Решение

CS используется не только для базы и ограничения, но и для разрешений. CPL кодируется там, а также другие поля, такие как:

  • D-бит - 32-битный или 16-битный размер сегмента по умолчанию
  • L-бит - выбирает совместимость или 64-битный режим для сегмента (и в этом случае основание и предел значительны)

Дальнее прыжков также может пройти через ворота задач, а дальние звонки также могут пройти через Call Gates. Все они должны быть обработаны, независимо от 64-битного режима.

Подводя итог, прыжок дальнего прыжка в 64-битном режиме не быстрее, чем в 32-битном режиме. На самом деле, учитывая, что когда 64-битный режим включен, дескрипторы сегментов в два раза больше, чем когда 64-битный режим отключен, все доступности таблицы дескриптора удваиваются, что может удлинить время прыжка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top