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

6.2.3.1. Сегменты данных и кода

При переключении в код IA-32, регистры дескрипторов и селекторов сегментовIA-32 (GDT,LDT,DS,ES,CS,SS,FSиGS) должны быть инициализированы кодом типаItanium, к требуемым значениям, основанным на соглашениях о вызовахIA-32 иItaniumи на используемой модели сегментации.

Код типа Itaniumможет вручную загрузить дескриптор, вызвав 8-байтый элемент изLDT/GDT, расшифровывая дескриптор и записывая базу, границу и атрибуты сегмента. Другой способ состоит в том, что программа типаItaniumможет переключиться в набор инструкцийIA-32 и выполнить требуемую загрузкуIA-32 инструкцией типаMov Sreg. Если код типаItaniumявно загружает сегментные дескрипторы, то он отвечает за целостность сегментного дескриптора.

Процессор не гарантирует когерентности между дескрипторами в памяти и дескрипторными регистрами, при этом, если сегментные регистры загружены Itaniumинструкциями, то процессор не устанавливает биты доступности сегмента вLDT/GDT.

6.2.3.2. Сегментный дескриптор и целостность среды

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

Если программа типа Itaniumпрямо загружает дескриптор, то она отвечает за правильность дескриптора и обеспечение целостностиIA-32 среды соответствующего режима (защищенного, реального илиVM86). Таблица 6.3 определяет программные рекомендации для инициализации средыIA-32. Процессор проверяет целостность средыIA-32 так, как это определено ниже в разделе 6.2.3.3 «Проверки целостности средыIA-32 во время выполнения». При переключении между кодамиIA-32 иItanium, процессор не изменяет значения базы, границы и атрибутов для любого дескриптора сегмента, и при этом нет изменений в уровне привилегий.

Табл. 6.3. Начальное состояние регистров среды IA-32

Регистр

Поле

Реальный режим

Защищенный режим

Режим VM86

PSR

cpl

0

уровень привилегий

3

EFLAG

vm

0

0

1

CR0

pe

0

1

1

CS

selector

base>>4A

selector

base>>4

base

selector <<4B

base

selector <<4

dpl

PSR.spl(0)

PSR.splC

PSR.spl(3)

d-бит

16 битD

16/32 бит

16 бит

type

R/Wданных, расширяемость

Выполняемый

R/Wданных, расширяемость

s-бит

1

1

1

p-бит

1

1

1

a-бит

1

1

1

g-бит/limit

0xFFFFE

limit

0xFFFF

SS

selector

base>>4A

selector

base>>4

base

selector <<4B

base

selector <<4

dpl

PSR.spl(0)

PSR.spl

PSR.spl(3)

d-бит

16 битD

16/32 бит

16 бит

type

R/Wданных, расширяемость

Типы данных

R/Wданных, расширяемость

s-бит

1

1

1

p-бит

1

1

1

a-бит

1

1

1

g-бит/limit

0xFFFFE

limit

0xFFFF

DS, ES,

FS, GS

selector

base>>4A

selector

base>>4

base

selector <<4B

base

selector <<4

dpl

dpl>=PSR.spl(0)

dpl>=PSR.spl

dpl>=PSR.spl(3)

d-бит

16 битD

16/32 бит

16 бит

type

R/Wданных, расширяемость

Типы данных

R/Wданных, расширяемость

s-бит

1

1

1

p-бит

1

1

1

a-бит

1

1/0F

1

g-бит/limit

0xFFFFE

limit

0xFFFF

LDT, GDT, TSS

selector

Не доступны

selector

base

base

dpl

dpl>=PSR.spl

d-бит

0

type

Типы для ldt, gdt, tss

s-бит

0

p-бит

1

a-бит

1

g-бит/limit

limit

  1. Селекторы должны быть установлены в значение 16* base, для нормальной работы реального режима.

  2. База сегмента должна быть установлена в значение selector/16, для нормальной работы реального режима.

  3. Если не задан соответствующий кодовый сегмент.

  4. Размер сегмента должен быть установлен в 16 бит, для нормальной работы реального режима.

  5. Граница сегмента должна быть установлена в 0xFFFF, для нормальной работы реального режима.

  6. Для действительных сегментов p-бит должен быть установлен в 1, для нулевых сегментовp-бит должен быть установлен в 0.