Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M8 / Исполнительная среда Itanium.doc
Скачиваний:
36
Добавлен:
16.04.2013
Размер:
340.48 Кб
Скачать

3.2. Память

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

Система просмотра памяти и управление виртуальной памятью даны в части 4 «Адресация и защита» второго тома. Инструкции IA-32 устанавливающие просмотр памяти и управление виртуальной памятью даны в разделе 10.6 во втором томе.

3.2.1. Модель адресации прикладной памяти

Память адресуется байтами и доступна через 64-битовые указатели. Модель 32-битного указателя без аппаратного режима поддерживается архитектурно. Указатель, который имеет 32 бита, загружается и помещается в 64-битный регистр. Перед использованием, программа должна явно преобразовать 32-битовый указатель в 64-битовый. Детальнее о 32-битовой адресации см. раздел 4.1.9 «32-битовая виртуальная адресация» во втором томе.

3.2.2. Адресация блоков и выравнивание

Память может быть доступна в виде блоков в 1, 2, 4, 8, 10 16 байтов.

Рекомендуется, чтобы все адресуемые блоки выравнивались по своим естественным границам. Аппаратура и/или программное обеспечение операционной системы могут поддерживать и не выровненные блоки, но при этом возможна некоторая потеря производительности. Значения 10-байтных чисел с плавающей точкой должны запоминаться с выравниванием по 16-байтным границам.

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

Связки инструкций (по 3 инструкции в связке) являются 16-байтовыми блоками, которые всегда выровнены по 16-байтовым границам.

3.2.3. Упорядочивание байтов

Бит UM.beв маске пользователя управляет тем, в каком порядке байтыItaniumкода будут загружаться и сохраняться – по возрастанию (big-endian) или по убыванию (little-endian). Если битUM.beравен 0, то загрузка и сохранение нескольких байтов выполняется по убыванию (байты с младшими адресами памяти соответствуют младшим байтам регистра). Если битUM.beравен 1, то загрузка и сохранение нескольких байтов выполняется по возрастанию (байты с младшими адресами памяти соответствуют более старшим байтам регистра). Загрузка и сохранение только одного байта не связана с битомUM.be. БитUM.beне связан с выборкой инструкций, обращениямиIA-32 или сRSE. Инструкции всегда доступны процессору в виде элементов выстроенных по убыванию. Когда к инструкциям обращаются как к данным, выстроенным по возрастанию, инструкции будут казаться зарезервированными в регистре.

На рис. 3.13 показана загрузка переменных в формате по убыванию. На рис. 3.14 показана загрузка переменных в формате по возрастанию. Восстановление не показано, но проводится аналогично.

память

адрес

7

0

0

A

1

B

2

C

3

D

4

E

5

F

6

G

7

H

Регистры

63

0

LD1[1] =>

0

0

0

0

0

0

0

B

63

0

LD2[2] =>

0

0

0

0

0

0

D

C

63

0

LD4[4] =>

0

0

0

0

H

G

F

E

63

0

LD8[0] =>

H

G

F

E

D

C

B

A

Рис.3.13. Выполнение загрузок по убыванию.

память

адрес

7

0

0

A

1

B

2

C

3

D

4

E

5

F

6

G

7

H

Регистры

63

0

LD1[1] =>

0

0

0

0

0

0

0

B

63

0

LD2[2] =>

0

0

0

0

0

0

C

D

63

0

LD4[4] =>

0

0

0

0

E

F

G

H

63

0

LD8[0] =>

A

B

C

D

E

F

G

H

Рис.3.14. Выполнение загрузок по возрастанию.

Соседние файлы в папке M8