В компьютерной архитектуре x86-64 длинный режим — это режим, в котором 64-битная операционная система может получить доступ к 64-битным инструкциям и регистрам . 64-битные программы запускаются в подрежиме, называемом 64-битным режимом, а 32-битные программы и 16-битные программы защищенного режима выполняются в подрежиме, называемом режимом совместимости. Программы реального режима или виртуального режима 8086 не могут запускаться в длинном режиме.
Процессор x86-64 действует идентично процессору IA-32 при работе в реальном или защищенном режиме, которые поддерживаются, когда процессор не находится в длительном режиме.
Бит в поле расширенных атрибутов CPUID сообщает программам в реальном или защищенном режимах, может ли процессор перейти в длинный режим, что позволяет программе обнаружить процессор x86-64. Это похоже на бит атрибута CPUID, который процессоры Intel IA-64 используют, чтобы позволить программам определять, работают ли они в режиме эмуляции IA-32.
На компьютере с устаревшей версией BIOS BIOS и загрузчик работают в реальном режиме . После того, как выполнение переходит к ядру операционной системы , поддерживающему x86-64, ядро проверяет поддержку ЦП для длинного режима, а затем выполняет инструкции для входа в него. На компьютере под управлением UEFI прошивка UEFI (кроме CSM и устаревшего дополнительного ПЗУ ), любой загрузчик UEFI и ядро операционной системы работают в длинном режиме.
Хотя размеры регистров увеличились до 64 бит по сравнению с предыдущей архитектурой x86 , адресация памяти еще не увеличена до полных 64 бит. В настоящее время нецелесообразно оснащать компьютеры достаточной памятью, чтобы требовать полные 64 бита. Пока это так, блоки загрузки/хранения, теги кэша , MMU и TLB можно упростить без потери полезной памяти. Несмотря на это ограничение, программное обеспечение программируется с использованием полных 64-битных указателей и, следовательно, сможет использовать все большие адресные пространства по мере того, как они будут поддерживаться будущими процессорами и операционными системами.
Первые ЦП, реализующие архитектуру x86-64, а именно процессоры AMD Athlon 64 / Opteron (K8), имели 48-битную виртуальную [1] : 129–130 и 40-битную физическую адресацию . [1] : 4
Виртуальное адресное пространство этих процессоров разделено на две 47-битные области: одна начинается с наименьшего возможного адреса, а другая простирается вниз от наибольшего. Попытка использовать адреса, выходящие за пределы этого диапазона, приведет к общей ошибке защиты .
Предел физической адресации ограничивает объем установленной оперативной памяти , к которому компьютер может получить доступ. В многопроцессорной системе ccNUMA (Opteron) сюда входит память, установленная на удаленных узлах, поскольку процессоры могут напрямую обращаться (и кэшировать) ко всей памяти независимо от того, находится ли она на домашнем узле или на удаленном узле. Ограничение физической памяти K8 в 1 ТБ (40 бит) огромно по стандартным стандартам персональных компьютеров, но могло быть ограничением для использования в суперкомпьютерах. Следовательно, микроархитектура K10 (или «10h») реализует 48-битные физические адреса и поэтому может адресовать до 256 ТБ ОЗУ. [2]
При необходимости микроархитектуру можно расширять шаг за шагом без побочных эффектов со стороны программного обеспечения и одновременно экономить средства на ее внедрении. Для будущего расширения архитектура поддерживает расширение виртуального адресного пространства до 64 бит и адресацию физической памяти до 52 бит (ограничено форматом записи таблицы страниц ). [3] Это позволит процессору адресовать 2 64 байта (16 эксабайт ) виртуального адресного пространства и 2 52 байта (4 петабайта ) физического адресного пространства.
Физическое адресное пространство увеличено до 48 бит.
Руководство по новым функциям длинного режима