x86-64 и дальние вызовы / переходы

Быстрая сводка: в x86-64 режиме являются столь же медленными далекие переходы как в x86-32 режиме?

На x86 процессоре переходы попадают в три типа:

  • короткий, со смещенным ПК из +/-127 байты (2 байтовых команды)
  • рядом, с +/-32k смещение, которое "катается вокруг" текущего сегмента (3 байтовых команды)
  • далеко, который может перейти где угодно (5 байтовых команд)

короткие и близкие переходы берут 1-2 такта, в то время как далекие переходы берут 50-80 тактов, в зависимости от процессора. От моего чтения документации это вызвано тем, что они "выходят за пределы CS, текущий сегмент кода".

В x86-64 режиме сегменты кода не используются - сегмент является эффективно всегда 0.. бесконечность. Следовательно, не должно быть штрафа за выход наружу сегмента.

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

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

6
задан Shai 15 January 2013 в 08:31
поделиться

1 ответ

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

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

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

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

1
ответ дан 17 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: