- •3.3. Организация памяти
- •3.3.1 Модели памяти ia-32
- •3.3.2 Пейджинг и виртуальная память
- •3.3.3 Организация памяти в 64-битном режиме
- •3.3.4. Режимы работы против модели памяти
- •3.3.6 Расширенная физическая адресация в защищенном режиме
- •3.3.7 Расчет адресов в 64-битном режиме
- •3.3.7.1 Каноническая адресация
- •3.4 Основные регистры выполнения программы
- •3.4.1 Регистры общего назначения
- •3.4.1.1 Регистры общего назначения в 64-битном режиме
В оставшейся части этой главы описывается организация памяти и адресного пространства, основных регистров выполнения программы и режимов адресации. Обратитесь к следующим главам этого тома для описания других ресурсов выполнения программы, показанных на рисунке 3-1:
• x87 FPU-регистры - см. Главу 8 «Программирование с помощью FDA» x87.
• Регистры MMX - см. Главу 9, «Программирование с помощью технологии Intel® MMX ™».
• Регистры XMM - см. Главу 10 «Программирование с помощью Intel® Streaming SIMD Extensions (Intel® SSE)», «Глава 11», «Программирование с помощью потоковых мультимедийных расширений Intel® 2 (Intel® SSE2)» и главы 12 «Программирование с Intel ® SSE3, SSSE3, Intel® SSE4 и Intel® AESNI ».
• Регистры YMM - см. Главу 14, «Программирование с помощью AVX, FMA и AVX2».
• Регистры BND, BNDCFGU, BNDSTATUS - См. Главу 13 «Управление состоянием с использованием набора функций XSAVE» и Глава 17 «Intel® MPX».
• Выполнение вызовов стека и процедуры - см. Главу 6, «Процедурные вызовы, прерывания и исключения».
3.2.1. Режим выполнения 64-битного режима
Среда выполнения для 64-битного режима аналогична среде выполнения, описанной в разделе 3.2. В следующих параграфах описываются различия, которые применяются.
• Адресное пространство. Задача или программа, работающая в 64-битном режиме на процессоре IA-32, может определять линейное адресное пространство до 264 байтов (с учетом требования канонической адресации, описанного в разделе 3.3.7.1), и физическое адресное пространство вверх до 246 байт. Программное обеспечение может запрашивать CPUID для размера физического адреса, поддерживаемого процессором.
• Базовые регистры выполнения программы. Число доступных регистров общего назначения (GPRs) равно 16. GPR имеют ширину 64 бит и поддерживают операции по байтам, словам, двойным словам и целым числам quadword. Доступ к байтовым регистрам осуществляется равномерно до 8 разрядов. Регистр указателя инструкций становится 64 битами. Регистр EFLAGS расширяется до 64 бит в ширину и называется регистром RFLAGS. Верхние 32 бита RFLAGS зарезервированы. Нижние 32 бита RFLAGS такие же, как EFLAGS. См. Рисунок 3-2.
• Регистры XMM. Для SIMD-операций имеется 16 регистров данных XMM. См. Раздел 10.2 «Программирование SSE
Окружающая среда ", для получения дополнительной информации об этих регистрах.
• Регистры YMM. Для SIMD-операций имеется 16 регистров данных YMM. См. Главу 14 «Программирование с помощью
AVX, FMA и AVX2 "для получения дополнительной информации об этих регистрах.
• Регистры BND, BNDCFGU, BNDSTATUS - См. Главу 13, «Управление состоянием с использованием набора функций XSAVE»,
и главу 17 «Intel® MPX».
• Stack - размер указателя стека составляет 64 бита. Размер стека не контролируется бит в дескрипторе SS (как в
не 64-битные режимы), и размер указателя не может быть переопределен префиксом команды.
• Контрольные регистры - регистры управления расширяются до 64 бит. Новый регистр управления (регистр приоритета задачи: CR8
или TPR). См. Главу 2 «Архитектуры Intel® 64 и IA-32» в этом томе.
• Регистры отладки - регистры отладки расширяются до 64 бит. См. Главу 17 «Отладка, профиль филиала, TSC и
Качество обслуживания ", в Руководстве разработчика программного обеспечения Intel® 64 и IA-32, том 3A.
Регистры дескрипторной таблицы. Регистр таблицы глобального дескриптора (GDTR) и регистр таблицы дескриптора прерывания (IDTR) расширяются до 10 байтов, так что они могут содержать полный 64-разрядный базовый адрес. Регистр таблицы локального дескриптора (LDTR) и регистр задач (TR) также расширяются для хранения полного 64-разрядного базового адреса.
3.3. Организация памяти
Память, которую процессор адресует на своей шине, называется физической памятью. Физическая память организована как последовательность 8-битных байтов. Каждому байту присваивается уникальный адрес, называемый физическим адресом. Физическое адресное пространство колеблется от нуля до максимума 236 - 1 (64 ГБ), если процессор не поддерживает архитектуру Intel 64. Архитектура Intel 64 представляет изменения в физическом и линейном адресном пространстве; они описаны в разделе 3.3.3, разделе 3.3.4 и разделе 3.3.7.
Практически любая операционная система или исполнительный директор, предназначенные для работы с процессором IA-32 или Intel 64, будут использовать средства управления памятью процессора для доступа к памяти. Эти средства предоставляют такие функции, как сегментация и пейджинг, которые позволяют эффективно и надежно управлять памятью. Управление памятью подробно описано в главе 3 «Управление памятью с защищенным режимом» в Руководстве разработчика программного обеспечения Intel® 64 и IA-32, том 3A. В следующих параграфах описываются основные методы адресации памяти при использовании управления памятью.
3.3.1 Модели памяти ia-32
При использовании средств управления памятью процессора программы напрямую не адресуют физическую память. Вместо этого они получают доступ к памяти с использованием одной из трех моделей памяти: плоский, сегментированный или реальный адресный режим:
• Модель с плоской памятью. Память отображается программой как единое непрерывное адресное пространство (рисунок 3-3). Это пространство называется линейным адресным пространством. Код, данные и стеки содержатся в этом адресном пространстве. Линейное адресное пространство является адресным адресом, с адресами, последовательно идущими от 0 до 232 - 1 (если не в режиме 64 бит). Адрес для любого байта в линейном адресном пространстве называется линейным адресом.
• Сегментированная модель памяти. Память появляется в программе как группа независимых адресных пространств, называемых сегментами. Код, данные и стеки обычно содержатся в отдельных сегментах. Для обращения к байту в сегменте программа выдает логический адрес. Это состоит из селектора сегментов и смещения (логические адреса часто называются дальними указателями). Селектор сегментов идентифицирует сегмент, к которому нужно получить доступ, и смещение идентифицирует байт в адресном пространстве сегмента. Программы, запущенные на процессоре IA-32, могут обрабатывать до 16383 сегментов разных размеров и типов, а каждый сегмент может достигать 232 байта.
Внутри все сегменты, определенные для системы, отображаются в линейное адресное пространство процессора. Чтобы получить доступ к памяти, процессор таким образом переводит каждый логический адрес в линейный адрес. Этот перевод является прозрачным для прикладной программы.
Основной причиной использования сегментированной памяти является повышение надежности программ и систем. Например, размещение стека программы в отдельном сегменте предотвращает рост стека в пространство кода или данных и инструкции или данные перезаписи соответственно.
• Модель памяти режима реального времени. Это модель памяти для процессора Intel 8086. Он поддерживается для обеспечения совместимости с существующими программами, написанными для работы на процессоре Intel 8086. Режим realaddress использует определенную реализацию сегментированной памяти, в которой линейное адресное пространство для программы и операционной системы / исполнительной системы состоит из массива сегментов размером до 64 Кбайт каждый. Максимальный размер линейного адресного пространства в режиме реального адреса составляет 220 байт.
См. Также: Глава 20, «Эмуляция 8086», Руководство разработчика программного обеспечения Intel® 64 и IA-32, том 3B.
