x86-64 и дальние звонки / прыжки - PullRequest
4 голосов
/ 02 июля 2010

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

На процессоре x86 переходы делятся на три типа:

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

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

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

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

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

1 Ответ

1 голос
/ 03 июля 2010

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

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

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

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

...