Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Архитектура часть 6..doc
Скачиваний:
42
Добавлен:
16.04.2013
Размер:
480 Кб
Скачать

6.3. Обзор моделей памяти

Виртуальные адреса в наборах инструкций Itanium или IA-32 определены для адресации одних и тех же мест памяти. Инструкции Itanium прямо генерируют 64-битные виртуальные адреса. Инструкции IA-32 генерируют 16-ти или 32-битные эффективные адреса, которые затем преобразуются в 32-битные виртуальные адреса, с помощью IA-32 сегментации. Далее, 32-битные виртуальные адреса преобразуются в 64-битные виртуальные адреса, путем расширения нулями до 64 бит. Расширение нулями размещает все IA-32 обращения к памяти в младших 4G-байтах 64 битного виртуального адресного пространства, в пределах виртуального региона 0. Виртуальные адреса сгенерированные любым набором инструкций переводятся затем в физические адреса, используя механизмы управления памятью описанные в главе 4 «Адресация и защита» во втором томе.

16/32-битный эффективный адрес

32-битный виртуальный адрес

64-битный виртуальный адрес

Б аза

С егментация

Р асширение нулями

IA-32

И ндекс

+

С мещение

Архитектура

База

Intel Itanium

Рис. 6.14. Модель адресации памяти

6.3.1. Упорядочивание памяти

Целочисленные типы данных памяти и типы данных с плавающей точкой (IEEE) являются двоично-совместимыми между наборами инструкций IA-32 и Itanium. Приложения и операционные системы типа Itanium, которые взаимодействуют с кодом IA-32, должны использовать обращения упорядоченные «по убыванию», чтобы гарантировать, что форматы данных будут теми же самыми. Все IA-32 данные инструкций и обращения к памяти инструкций принудительно являются упорядоченными «по убыванию».

6.3.2. Сегментация ia-32

Сегментация не используется для обращений к памяти набора инструкций Itanium. Сегментация, выполняемая при обращении к памяти набора инструкций IA-32, основывается на состоянии EFLAG.vm и CFLG.pe. Правила сегментации реального, защищенного и VM86 режимов, следуют спецификациям, заданным в Intel Architecture Software Developer's Manual:

  • Эффективный адрес 16/32-битных данных IA-32: 16- или 32-битные эффективные адреса генерируются на основании битов CSD.d, SSD.b и переопределений префиксов, с помощью сложения базового регистра, масштабированного индексного регистра и 16/32-битного значения смещения. Начало эффективного адреса (первый байт многобайтного операнда) превышающего 16 или 32 бита, усекается до 16 или 32 битов. Окончание (последний байт многобайтного операнда) 16-битного эффективного адреса может простираться за 64К-байтную границу, однако окончание 32-битного эффективного адреса усекается до 32 бит и не может простираться за 4G-байтную границу эффективного адреса. Полная детализация условий свертки дается в Intel Architecture Software Developer's Manual.

  • Эффективный адрес 16/32-битного кода IA-32: 16- или 32-битный EIP основывающийся на CSD.d, используется как эффективный адрес. Начальное значение EIP (первый байт многобайтной инструкции) превышающего 16 или 32 бита, усекается до 16 или 32 битов. Окончание (последний байт многобайтной инструкции) 16-битного эффективного адреса может простираться за 64К-байтную границу, однако окончание 32-битного значения EIP усекается до 32 бит и не может простираться за 4G-байтную границу эффективного адреса.

  • Генерация 32-битного виртуального адреса IA-32: Результирующий 16- или 32-битный эффективный адрес отображается в 32-битное виртуальное адресное пространство, путем прибавления базы сегмента. Полные проверки границы и защиты сегмента проводятся так, как это задано в Intel Architecture Software Developer's Manual, а дополнительные проверки так, как задано в этом разделе.

  • Генерация 64-битного адреса IA-32: Результирующий 32-битный виртуальный адрес преобразуется в 64-битный виртуальный адрес путем расширения нулями до 64 бит, при этом все обращения к памяти набора инструкций IA-32 оказываются в первых 4G байтах 64-битного виртуального адресного пространства, внутри виртуального региона 0.

Если код IA-32 использует плоскую сегментированную модель (начала всех сегментов установлены в 0), то коды типа Itanium или типа IA-32 могут свободно обмениваться указателями, после того как указатель будет расширен нулями до 64 бит. Для сегментированного кода IA-32, указатели эффективного адреса должны быть прежде преобразованы в виртуальный адрес до того, как они будут совместно использоваться кодом типа Itanium.