Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП_2006_З.doc
Скачиваний:
3
Добавлен:
29.04.2019
Размер:
1.03 Mб
Скачать

Режимы работы мп i80386

1 Сброс и инициализация

При появлении на входе RESET положительного импульса микропроцессор прекращает выполнение текущей команды или выходит из состояния "Индикация останова" и устанавливается в исходное состояние. Если на падающем фронте RESET вход BUSY находится в состоянии низкого уровня, микропроцессор выполняет самопроверку. На тестирование приблизительно половины оборудования i80386 затрачивается 219 тактов. Результат самопроверки (сигнатура) заносится в регистр ЕАХ. Если самопроверка прошла успешно, содержимое регистра равно OOOOOOOOh.

В табл. 1.1 показано содержимое регистров микропроцессора перед выполнением первой команды.

Таблица 1.1

Регистр

Значение

ЕАХ

00000000h

ЕВХ

xxxxxxxxh

ЕСХ

xxxxxxxxh

EDX

xxxx03uuh

ESI

xxxxxxxxh

EDI

xxxxxxxxh

ЕВР

xxxxxxxxh

ESP

xxxxxxxxh

EIP

0000FFF0h

EFLAGS

00000002h

CRO

000000u0h

Дескриптор CS: базовый адрес

FFFF0000h

ограничитель

FFFFh

CS

F000h

DS

0000h

SS

0000h

ES

0000h

FS

0000h

GS

0000h

Обозначения в таблице:

x - биты устанавливаются произвольно;

u - биты устанавливаются в зависимости от условий:

в регистре DX младшие 8 разрядов содержат двоичное число, отражающее номер модификации микропроцессора (устанавливается фирмой); старшие 8 разря­дов содержат идентификатор компонента i80386, равный 03h;

в регистре CRO бит ЕТ устанавливается в соответствии с типом сопроцессо­ра.

В персональных ЭВМ типа IBM PC 386/AT, как правило, предусматривается возможность установки сопроцессора 180387 или 180287. Определив наличие сопроцессора 180387 по низкому уровню сигнала на входе ERROR во время падающего фронта сигнала RESET, микропроцессор i80386 устанавливает бит ЕТ. Наличие сопроцессора 180287 определяется программным способом с помощью команд:

FNINIT (программный сброс сопроцессора, инициализация регистров управления), FSTSW АХ (загрузка содержимого регистра состояния в регистр АХ i80386). Если в младших 8 разрядах регистра АХ будет хотя бы одна единица, то сопроцессора 180287 в ПЭВМ нет.

Предлагается следующая программа, реализующая определение наличия сопроцессора 180287:

FNINIT ; Инициализация 180287

FSTSW AX ; Загрузка в регистр АХ значения ; регистра состояния 180287

OR AL, AL ; Определение наличия единиц в; младшем байте регистра состояния

JNZ Ml ; Проверка условия

SMSW АХ ; Загрузка MSW в регистр АХ

OR AL, 02h ; Установка бита МР

LMSW АХ ; Загрузка MSW значением АХ

JMP M2 ; Переход в программу - ,

Ml: SMSW АХ ; Загрузка MSW в регистр АХ

OR AL, 04h ; Установка бита ЕМ

LMSW АХ ; Загрузка MSW значением АХ

M2: ; Продолжение программы

После сброса МП формирует адрес первой команды - физический адрес FFFFFFFOh. Если первой командой является команда внутрисегментного перехода (вызова), то будет выполняться программа, расположенная в верхней 64-Кбайтной зоне 4-Гбайтного физического адресного пространства до тех пор, пока не встре­тится команда межсегментного перехода (вызова). При выполнении этой команды разряды А20-А31 шины адреса устанавливаются в нуль для циклов обращения к сегментам программ. При этом физическое адресное пространство микропроцессо­ра сжимается до одного Мбайта.

В персональных ЭВМ типа IBM PC 386/AT базовая система в/в (BIOS), записанная в ПЗУ, располагается в верхних адресах (зарезервировано 128 Кбайт) первого Мбайта физического адресного пространства (см. рис. 1.1). Первая команда межсегментного перехода должна быть расположена в адресном пространстве BIOS (производится переадресация при считывании ее из памяти).

Рис. 1.1 - Адресное пространство памяти ПЭВМ PC 386/AT

После сброса и выполнения команды межсегментного перехода МП i80386 начинает работать в реальном режиме, почти идентичном режиму работы 18086.

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

Согласно концепции развития архитектуры семейства микропроцессоров i80x86 (обеспечение совместимости снизу-вверх) реальный режим дает возмож­ность выполнять программы, созданные для МП 18086/8088. Поэтому он широко используется в персональных компьютерах PC AT/386, работающих под управлением операционной системы MS-DOS. Однако в МП i80386 имеются дополнительные возможности, обеспечивающие более быстрое выполнение программ в реальном режиме, которые показаны в разделе 2.2.

2.1 Адресация памяти

В реальном режиме страничное преобразование адреса запрещено, и линейные адреса соответствуют физическим.

Сегменты имеют длину 64 Кбайта и могут перекрываться. 32-разрядный физический адрес формируется из двух компонент (см. рис.2.1):

- 16-разрядного эффективного адреса;

- содержимого соответствующего сегментного регистра, сдвинутого влево на ' 4 разряда (20-разрядного адреса).

Эффективный адрес в общем случае вычисляется как сумма трех 16-разряд­ных составляющих: базы, смещения и индекса. .

Способы адресации в 16-разрядном режиме показаны в табл. 2.1

Поле R/M определяет либо один из восьми регистров общего назначения, либо один из способов адресации (в зависимости от поля MOD).

В поле REG двухоперандной команды находится номер одного из восьми регистров, содержащего второй операнд; в однооперандных командах это поле используется для расширения поля кода операции.

Поле MOD значением 11 задает регистровую адресацию (оба операнда - в регистрах), в остальных трех случаях используется для выбора трех групп (каждая по восемь) способов адресации.

Табл. 2.2 определяет поля MOD и R/M во всех 16-разрядных способах адресации. Нужно заметить, что для адресации памяти используются только регистры ВХ, SI, DI и ВР (регистр SP неявно используется для адресации памяти командами PUSH, POP, PUSHA, POPA. CALL и INT n).

Рис. 2.1 - Формирование физического адреса в реальном режиме

Таблица 2.1 - Способы адресации в 16-разрядном режиме

NN пп

Наименование способа адресации

Компоненты адреса

Пример

1

Непосредственная

Константа

MOV AX, 0002h

2

Прямая

d (смещение)

MOV BX, [25A6h]

3

Регистровая

AX, BX, CX, DX, SI, DI, SP

MOV BX, AX

4

Косвенная регистровая

[BX],[BP],.[SI],[DI],

MOV AX. [ВХ1

5

Базовая или индексная со смещением

[ВХ, ВР, SI, Dl]+d

MOV AX, [BP+12]

6

Базовая индексная без смещения

BP+DI], [BX+SI], BP+Sl], [BX+Dl]

MOV BX, [BP+SI]

7

Базовая индексная со смещением

BP+DI]+d,[BP+SI]+d, BX+Sll+d.lBX+Dll+d

MOV AX, [BP+SI+20]

Таблица 2.2. - Поля MOD и R/M во всех 16-разрядных способах адресации

REG

Операнд 1

MOD

R/M

Операнд 2

000

Регистр EAX/AX/AL

00

000

Память DS[BX+SI]

001

Регистр ECX/CX/CL

00

001

Память DS:[BX+DI]

010

Регистр EDX/DX/DL

00

010

Память SS:[BP+SI]

Oil

Регистр EBX/BX/BL

00

011

Память SS:[BP+DI]

100

Регистр ESP/SP/AH

00

100

Память DS:[SI]

101

Регистр ЕВР/ВР/СН

00

101

Память DS:[DI]

110

Регистр ESI/SI/DH

00

110

Память DS dl6

111

Регистр EDI/DI/BH

00

111

Память DS:[ВХ]

01

000

Память DS:[BX+SI+d8]

01

001

Память DS:[BX+DI+d8]

01

010

Память SS:[BP+SI+d8]

01

011

Память SS:[BP+DI+dS]

01

100

Память DS:[SI+d8]

01

101

Память DS:[DI+d8]

01

110

Память SS:[BP+d8]

01

111

Память DS:[BX+d8]

10

000

Память DS:[BX+SI+dl6]

10

001

Память DS:[BX+DI+dl6]

10

010

Память SS:[BP+SI+dl6]

10

011

Память SS:[BP+DI+dl6]

10

100

Память DS:[SI+dl6]

10

101

Память DS:[DI+dl6]

10

110

Память SS:[BP+dl6]

10

111

Память DS:[BX+dl6]

11

000

Регистр EAX/AX/AL

11

001

Регистр ECX/CX/CL

11

010

Регистр EDX/DX/DL

11

011

Регистр EBX/BX/BL

11

100

Регистр ESP/SP/AH

11

101

Регистр ЕВР/ВР/СН

11

110

Регистр ESI/SI/DH

11

111

Регистр EDI/DI/BH

Команда обращается за операндами в соответствии с байтом MOD R/M, следующим за кодом операции и имеющим следующий формат:

Когда способ адресации задает только базовый регистр, он может использовать любой из регистров - DX, SI, DI или ВР. Если в формировании адреса участвуют базовый и индексный регистры, то такими парами могут быть BX+SI, BX+DI, BP+SI, BP+DI. Смещение может быть задано 16-разрядным или 8-разрядным (со знаком).

Возможны различные комбинации компонент адреса при использовании байта MOD R/M.

2.2. Команды и префиксы реального режима

В реальном режиме команды МП i80386 оперируют над 8- и 16-разрядными операндами, обеспечивая совместимость с МП 18086 на уровне объектных кодов.

В систему команд МП i80386 входят, кроме команд i8086, дополнительные команды, доступные в реальном режиме:

Не все команды i80386 разрешены в реальном режиме: девять команд защи­щенного режима в случае их использования в реальном режиме вызывают исклю­чительную ситуацию:

LTR, STR, LLDT, SLDT, ARPL, LSL, LAR, VERR, VERW.

Все префиксы i80386, показанные на рис. 2.9, доступны в реальном режиме. Префиксы размера операнда и размера адреса, в частности, могут добавить новые возможности в реальном режиме, позволяя использовать 32-разрядные операнды и адреса.

Префикс размера операнда позволяет манипулировать 32-разрядными опе­рандами. Например, использование префикса размера операнда позволяет i80386 в реальном режиме выполнять арифметические операции над 32-разрядными операн­дами и обрабатывать строки по 32 разряда за одну операцию (ADD ЕАХ, ЕВХ).

Доступный в реальном режиме префикс размера адреса обеспечивает доступ к 32-разрядным способам адресации, рассмотренным в разделе 2.5.3 (MOV AX, [ЕВХ]). Правильное использование префикса размера адреса в реальном режиме требует большой осторожности, потому что необходимо избегать формирования больших эффективных адресов - больше 65535: в реальном режиме граница сег-

мента фиксирована и равна 65535.

Поэтому 32-разрядный размер адреса и данных предпочтительно использо­вать для защищенного режима работы i80386, в котором размеры сегмента и про­странства линейных адресов много больше, чем в реальном режиме.

Следует также обратить внимание на то, что в МП 18086 максимальное значение физического адреса составляет FFFFFh (1 Мбайт). В МП i80386 в реальном режиме максимальное значение физического адреса - сумма селектора и смещения:

селектор (сдвинутый): F F F F(0)

смещение: F F F F

адрес: 1 О F F E F (1,064 Мбайта)

Таким образом, может возникнуть ситуация, когда адрес пересечет границу первого Мбайта памяти. В программах, написанных для МП i8086/88, используется факт "заворачивания" адреса вокруг границы сегмента. Чтобы обеспечить их правильное выполнение в персональных ЭВ М на базе МП i80386, осуществляется аппаратная блокировка адресной линии А20 (А20=0) с помощью порта в контроллере клавиатуры, состоянием которого можно управлять программно.

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

В защищенном режиме аппаратные средства МП i80386 позволяют защитить операционную систему от несанкционированного доступа со стороны программ пользователя, а также изолировать задачи друг от друга. Обеспечивается автомати­ческое переключение с одной задачи на другую за сравнительно короткое время. По сравнению с реальным режимом значительно увеличено линейное адресное пространство (до 4 Гбайт).

В защищенном режиме может быть использована как сегментная, так и страничная организация памяти.

Схема формирования физического адреса приведена на рис. 3.1

3.1 Сегментная организация памяти

3.1.1 Формирование физического адреса

В защищенном режиме для формирования линейного адреса используются две компоненты (см. рис. 3.1):

Рис. 3.1 - Схема формирования физического адреса

Рис. 3.2 - Схема формирования линейного адреса

- 16-разрядный селектор для определения линейного базового адреса сегмента;

- 16- или 32-разрядный эффективный адрес.

Селектор сегментного регистра содержит три поля:

- RPL - запрашиваемый уровень привилегии;

- TI - индикатор таблицы;

- ИНДЕКС.

Поле RPL используется для реализации защиты сегментов. Индекс селектора и поле TI позволяют определить соответствующий дескриптор, который может быть расположен в глобальной таблице дескрипторов GDT (Т1=0) или в локаль­ной таблице дескрипторов LDT (TIM). При изменении селектора в сегментном ре­гистре (например, при выполнении команды межсегментного перехода) дескрипторавтоматически загружается из таблицы в регистр дескриптора. Дескрипторы имеют длину 8 байтов и содержат 24- или 32-разрядный базовый адрес, размер которого зависит от режима адресации. Назначение остальных полей дескриптора показано в разделе 3.1.2.

Базовый адрес сегмента, содержащегося в дескрипторе, суммируется с эффективным адресом; в результате образуется линейный адрес.

Процесс формирования эффективного адреса зависит от режима, способа адресации и наличия в команде байта SIB (в случае 32-разрядного режима адресации) .

Микропроцессор i80386 поддерживает 16-разрядный, совместимый с МП i80286, и 32-разрядный режимы адресации.

При 16-разрядном режиме адресации используются те же способы адресации и компоненты для формирования эффективного адреса, что и в реальном режиме работы.

Если определен 32-разрядный режим адресации при отсутствии в команде байта SIB, в качестве компонентов эффективного адреса используется содержимое одного из регистров общего назначения (ЕАХ, ЕСХ, EDX, ЕВХ, ЕВР, ESI, EDI) и смещение.

Эффективный адрес вычисляется в соответствии со значением байта MOD R/M, следующего за кодом операции и имеющего формат:

Поле R/M определяет либо один из восьми регистров общего назначения, либо один из способов адресации (в зависимости от поля MOD (см. табл. 3.1).

В поле REG двухоперандной команды находится номер одного из восьми ре­гистров, содержащего второй операнд; в однооперандных командах это поле используется для расширения кода операции.

Поле MOD задает вид адресации операндов:

MOD=11 - регистровая адресация (оба операнда находятся в регистрах); в остальных трех случаях MOD определяет разрядность смещения при адресации операнда в памяти:

00 - смещение отсутствует,

01 - смещение 8-разрядное,

10 - смещение 32-разрядное.

Значение R/M = 100 указывает, что за байтом MOD R/M следует байт SIB.

Таблица 3.1. Значения MOD R/M

REG

Операнд 1

MOD

R/M

Операнд 2

000 001 010 O1l 100 101 110 111

Регистр EAX/AX/AL Регистр ECX/CX/CL Регистр EDX/DX/DL Регистр EBX/BX/BL Регистр ESP/SP/AH Регистр ЕВР/ВР/СН Регистр ESI/SI/DH Регистр EDI/DI/BH

00 00 00 00 00 00 00 00

000 001 010 011 100 101 110

111

Память DS:[EAX]

Память DS:[ECX]

Память DS:[EDX]

Память DS:[EBX]

SIB

Память DS:[d32]

Память DS:[ESI]

Память DS:[EDI]

01 01 01 01 01 01 01 01

000 001 010 011 100 101 110

111

Память DS:[EAX + d8] Память DS:[ECX + d8] Память DS:[EDX + d8]

Память DS:[EBX + d8]

SIB

Память SS:[EBP + d8] Память DS:[ESI + d8] Память DS:[EDI + d8]

Продолжение таблицы 3.1

10 10 10 10 10 10 10 10

000 001 010 011 100 101 110

111

Память DS:[EAX + d32] Память DS:[ECX + d32] Память DS:[EDX + d32]

Память DS:[EBX + d32]

SIB

Память SS:[EBP + d32] Память DS:[ESI + d32] Память DS:[EDI + d32]

11 11 11 11 11 11 11 11

000 001 010 011 100 101 110

111

Регистр EAX/AX/AL

Регистр ECX/CX/CL

Регистр EDX/DX/DL

Регистр EBX/BX/BL

Регистр ESP/SP/AH

Регистр ЕВР/ВР/СН

Регистр ESI/SI/DH

Регистр EDI/DI/BH

Формат байта SIB:

Поле BASE (В) определяет базовый регистр. Поле INDEX (I) определяет индексный регистр.

Поле SS (S) определяет масштаб (1, 2,4 или 8), на который умножается со­держимое индексного регистра. Способы адресации приведены в таблице 3.2. Кодировка байта SIB показана в табл. 3.3.

Таблица 3.2 - Способы адресации в 32-разрядном режиме

N

Способ адресации

Компоненты адреса

Пример

1

Непосредственная

Константа

MOV ЕАХ. 00000002h

2

Прямая

d

ADD ЕВХ, [00025364h]

3

Регистровая

ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ESP

SUB ЕВХ, ЕАХ

4

Косвенная

регистровая

[ЕАХ], [ЕВХ]

[ЕСХ], [EDX]

[ESI], [EDI] [ESP]

MOV ЕАХ, [ЕВХ]

5

Базовая со

смещением

[B]+d

СМР ЕАХ, [EBP+12A2451Bh]

6

Базовая индекс­

ная без смещения

[B+I*S]

MOV ЕВХ, [EBP+ESI*4]

7

Базовая индекс­

ная со смещением

[B+I*S]+d

MOV ЕАХ, [EBP+ESI*8+35h]

Таблица 3.3 – Кодировка байта SIB

REG

Операнд 1

MOD

BASE

Операнд 2

000

Регистр EAX/AX/AL

00

000

Память DS:[ЕАХ+(ss*iii)]

001

Регистр ECX/CX/CL

00

001

Память DS:[ЕСХ+(ss*iii)]

010

Регистр EDX/DX/DL

00

010

Память DS:[ЕDХ+(ss*iii)]

011

Регистр EBX/BX/BL

00

011

Память DS:[ЕBХ+(ss*iii)]

100

Регистр ESP/SP/AH

00

100

Память DS:[ЕSP+(ss*iii)]

101

Регистр ЕВР/ВР/СН

00

101

Память DS:[d32+(ss*iii)]

110

Регистр ESI/SI/DH

00

110

Память DS:[ЕSI+(ss*iii)]

111

Регистр EDI/DI/BH

00

111

Память DS:[EDI+(ss*iii)]

01

000

Память DS:[ЕАХ+(ss*iii)+d8]

01

001

Память DS:[ЕСХ+(ss*iii)+d8]

01

010

Память DS:[ЕDХ+(ss*iii)+d8]

01

011

Память DS:[ЕBХ+(ss*iii)+d8]

01

100

Память DS:[ЕSP+(ss*iii)+d8]

01

101

Память DS:[d32+(ss*iii)+d8]

01

110

Память DS:[ЕSI+(ss*iii)+d8]

01

111

Память DS:[EDI+(ss*iii)+d8]

10

000

Память DS:[ЕАХ+(ss*iii)+d32]

10

001

Память DS:[ЕСХ+(ss*iii)+d32]

10

010

Память DS:[ЕDХ+(ss*iii)+d32]

10

011

Память DS:[ЕBХ+(ss*iii)+d32]

10

100

Память DS:[ЕSP+(ss*iii)+d32]

10

101

Память DS:[d32+(ss*iii)+d32]

10

110

Память DS:[ЕSI+(ss*iii)+d32]

10

111

Память DS:[EDI+(ss*iii)+d32]

11

000

Регистр EAX/AX/AL

11

001

Регистр ECX/CX/CL

11

010

Регистр EDX/DX/DL

11

011

Регистр EBX/BX/BL

11

100

Регистр ESP/SP/AH

11

101

Регистр ЕВР/ВР/СН

11

110

Регистр ESI/SI/DH

11

111

Регистр EDI/DI/BH

Таблица 3.3 (продолжение).

MOD

SS

INDEX

00,01,

10,11

SS

Масштабный множитель

iii Индексный регистр


SS

Масштабный множитель

00 01 10 11

х 1

х 2

х 4

х 8

INDEX

Индексный регистр

000 001 010 011 100 101 110 111

ЕАХ

ЕСХ

EDX

ЕВХ

ЕВР

ESI

EDI


3.1.2 Таблицы и дескрипторы сегментов

В i80386 определены 3 типа таблиц дескрипторов:

- таблица глобальных дескрипторов (GDT);

- таблица локальных дескрипторов (LDT);

- таблица дескрипторов прерываний (IDT).

Каждая таблица может содержать до 8192 8-байтных дескрипторов.

Для определения таблиц МП содержит соответствующие регистры (GDTR, LDTR, IDTR). Загрузка этих регистров производится командами защищенного режима LGDT, LLDT и LIDT.

Таблицы GDT и LDT могут содержать дескрипторы и вентили, IDT только

вентили (см. табл. 3.4).

Таблица 3.4. Распределение дескрипторов и вентилей

Тип дескриптора, вентиля

Таблица дескрипторов

GDT

LDT

IDT

Дескрипторы сегментов программ Дескрипторы сегментов данных

Дескрипторы сегментов состояния задач Вентили вызова

Вентили задач

Вентили прерываний

Вентили ловушек

*

*

*

*

*

*

*

*

*

*

*

*

* - таблица может содержать данный дескриптор или вентиль

Дескрипторы сегментов - специальные 8-байтовые структуры (два двойных слова, далее обозначенные адресами О и 4), содержащие базовый адрес, размер и атрибуты сегментов. Определены четыре типа дескрипторов сегментов:

- дескрипторы сегментов программ;

- дескрипторы сегментов данных;

- дескрипторы сегментов состояния задач;

- дескрипторы таблиц локальных дескрипторов.

С учетом различных типов сегментов (совместимые с сегментами микропроцессора i80286, 32-разрядные - i80386) дескрипторы могут быть для 16- или 32-разрядного режима (см. рис. 3.3 - 3.6).

Дескриптор содержит следующие поля:

- База сегмента - 24/32-разрядное значение.

- Предел сегмента (limit) - 20-разрядное поле, определяющее максимальное смещение (offset) сегмента; может иметь байтовую или страничную гранулярность (4096 byte granular).

- G (Granularity) показывает гранулярность предела сегмента: 0=0 - байто­вая гранулярность, предел может быть определен с точностью до байта (макси­мальный размер сегмента 1 Мбайт); G=1 - страничная гранулярность, предел опре­деляется с точностью до страницы (максимальный размер сегмента 4 Гбайта).

- D (Default) указывает разрядность операндов и эффективных адресов: при D==0 допустимы 16-разрядные операнды и режимы 16-разрядной "адресации; при D=1 - 32-разрядные. Поэтому все существующие сегменты программ i80286 вы­полняются на i80386 в предположении, что D=0. По умолчанию 32-разрядный ре­жим использует 32-разрядный размер операндов и 32-разрядные адреса, а 16-раз­рядный режим - 16-разрядный размер операндов и 16-разрядные адреса. Интерп­ретация бита D изменяется, если в команде используются префиксы размера дан­ных и адреса (см. табл. 3.5).

- Е (Expansion Direction) определен только для сегментов данных и показы­вает, где содержится сегмент - в диапазоне адресов от базы сегмента вверх до его границы включительно (Е=0), или от максимального смещения (offset) вниз до границы, не включая ее (Е=1). Большинство сегментов данных имеет Е=0 ("Рас­ширение вверх"). Сегмент данных, который поддерживает динамически расширяе­мый стек, должен иметь Е=1 ("Расширение вниз"). Стек данных растет вниз в на­правлении младших адресов памяти.

- В (Big, разряд 22) используется только для сегментов данных и влияет на сегменты, расширяемые вниз, и показывает максимальное смещение сегмента. При В=0 максимальное смещение расширяемого вниз сегмента данных имеет значение OOOOFFFFh, при В=1 - FFFFFFFFh.

  • В (Busy, разряд 9) используется только в дескрипторах сегментов состоя­ния задач. В=1 означает, что данная задача в настоящее время выполняется другим процессором.

Рис. 3.3 - Дескрипторы сегмента программ

Рис. 3.4 - Дескрипторы сегмента данных

Рис. 3.5 - Дескрипторы сегмента состояния задачи

Рис. 3.6 - Дескриптор таблицы локальных дескрипторов (LDT)

Таблица 3.5 Интерпретация бита D

Значение D в деск­рипторе сегмента

0

0

0

0

1

1

1

1

Наличие префикса размера операнда

*

*

*

*

Наличие префикса размера адреса

*

*

*

*

Размер операнда

8/16

8/16

8/32

8/32

8/32

8/32

8/16

8/16

Размер адреса

16

32

16

32

32

16

32

16

* - данный префикс присутствует в команде

Далее описываются поля, определяющие права доступа - условия доступа к сегментам, в том числе уровни привилегии и защиту от записи или чтения. Если нарушаются условия доступа к сегментам, i80386 генерирует ИС13 или ИС12 (при обращении к сегменту стека).

- Р (Present) указывает на присутствие (Р==1) или отсутствие (РЮ) сегмента в физической памяти. В персональной ЭВМ реализован принцип виртуальной па­мяти. При выполнении программы в оперативной памяти находятся только некото­рые ее сегменты, а остальные хранятся на диске. Если происходит обращение к сегменту, который в данный момент отсутствует в памяти (Р=0), то операционная система осуществляет подкачку (свопинг) нужного сегмента с диска в оперативную память ПЭВМ.

- DPL (Descriptor Privilege Level) показывает уровень привилегии сегмента (от 0 до 3):

DPL

Уровень привилегии

00

01

10

11

0 - наиболее привилегированный (ядро ОС)

1

2

3 - наименее привилегированный (пользователь)

Уровень привилегии текущего сегмента программ (DPL) определяет текущий уровень привилегии (CPL).

Введение уровней привилегии позволяет защитить программы операционной системы и ответственную информацию (общую базу данных) от несанкциониро­ванного доступа программ пользователя.

- A (Accessed) показывает, было ли обращение к сегменту. При обращении к сегменту бит автоматически устанавливается в 1. Операционная система, перио­дически анализируя его состояние в дескрипторах сегментов, может определить ча­стоту обращения к сегменту.

- R (Readable) определен только для сегмента программ. Показывает, разре­шено чтение сегмента (R=1) или не разрешено (R'=0). Обычно сегменты программ доступны только для выборки команд, и R=0; попытка произвести чтение из сег­мента вызывает исключительную ситуацию.

- С (Conforming) используется только в сегментах программ. Если С=1, то сегмент программ считается подчиненным, и текущий уровень привилегии задачи (CPL) не изменяется при передаче управления этому сегменту.

  • - W (Writable) определен только для сегментов данных. Показывает, разре-

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

3.1.2. Вентили

. Вентили - специальные восьмибайтовые структуры данных, необходимые в защищенном режиме для определения точек входа в сегменты программ. В i80386 определены четыре типа вентилей:

- вентили вызова (call gates);

- вентили ловушек (trap gates);

- вентили прерываний (interrupt gates);

- вентили задач (task gates).

Формат всех типов вентилей идентичен. Дескрипторы вентилей вызова, ло­вушек и прерываний содержат селектор и смещение, определяющие точку входа в сегмент программ, и права доступа; дескрипторы вентилей задач содержат только селектор, а смещение (EIP) считывается из сегмента состояния задачи (TSS).

Вентили вызова могут быть расположены только в GDT и LDT. Переход к сегменту программ на текущем уровне привилегии через вентиль вызова можно осуществить командой межсегментного перехода (JMP) или вызова (CALL); пере­ход на более высокий уровень привилегии можно выполнить только командой межсегментного вызова (CALL). Таким образом, вентиль вызова обеспечивает до­ступ к сегментам, находящимся на более высоком уровне привилегии.

Вентили прерываний и ловушек могут располагаться только в IDT. Через них обрабатываются аппаратные, программные прерывания и исключительные си­туации. Формат и назначение вентилей прерываний и ловушек приведен в разде­ле 2.4.3.

Вентили задач могут содержаться в GDT, LDT или IDT. Переключиться на другую задачу через вентиль, расположенный в GDT или LDT, можно командой CALL или JMP. В случае размещения в IDT переключение задач может быть вы­звано аппаратным или программным прерыванием, а также исключительной ситуа­цией.

3.2 Страничная организация памяти

Страничная организация памяти (в отличие от сегментированной, которая образует сегменты программ и данных различной длины) устанавливает фиксиро­ванный размер областей программ и данных. Расположенный на кристалле стра­ничный диспетчер памяти обеспечивает следующие возможности:

- предоставляет пользователю возможность работать с большим адресным пространством (виртуальной памятью);

- обеспечивает защиту операционной системы и программного обеспечения пользователя;

- реализует быструю трансляцию адреса.

Линейное адресное пространство памяти (4 Гбайта) при страничной органи­зации разбито на 1048576 страниц по 4096 байт каждая. Фиксированный размер всех страниц позволяет загружать любую требуемую виртуальную страницу в лю­бую физическую страницу, что делает страничную организацию предпочтительным способом реализации виртуальной памяти.

Страничная трансляция адреса включается в защищенном режиме установ­кой в 1 разряда 31 регистра управления CRO и выключается его сбросом.

i80386 использует два уровня таблиц для трансляции адреса: каталог страниц и таблицу страниц.

Для определения начала каталога страниц в памяти в регистр CR3 заносится физический адрес. Для того, чтобы каталог был выровнен на границе страницы, младшие 12 разрядов CR3 должны быть установлены в нуль. Каждая строка ката­лога указывает на страницу, содержащую таблицу страниц. В свою очередь, каж­дая строка таблицы страниц указывает на страницу физической памяти.

Каталог таблиц страниц содержит 1024 строки, каждая из которых указывает на таблицу страниц и содержит перечень ее атрибутов (см. рис. 3.7).

Строка каталога и строка таблицы страниц имеют одинаковый формат и содержит следующие поля:

Рис. 3.7 - Пример трансляции линейного адреса в физический

- Адрес таблицы страниц (адрес страницы) определяет старшие 20 разря­дов физического базового адреса таблицы страниц (страницы). Поскольку таблица страниц выровнена по границе страницы в физической памяти (т.е. по 4096-байто­вой границе), младшие 12 разрядов ее базового адреса - нули.

- Для OS-3 разряда, выделенные под использование операционной систе­мой (OS) и автоматически не изменяющиеся. Дополнительно к трем разрядам для хранения всей информации о таблицах страниц (страницах) операционная система может создать отдельный массив в памяти.

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

- Бит А показывает, производилось ли обращение (чтение или запись) по крайней мере к одной из 1024 страниц (к данной странице) (А=1) или нет (А=Ю). Служит для набора операционной системой статистики об использовании страниц.

- Бит U/S ("Пользователь/Супервизор") в общем случае указывает статус защиты, который присвоен 1024 страницам (присвоенный странице), описываемым соответствующей таблицей страниц. Полная интерпретация представлена в табл. 3.6.

Таблица 3.6 Защита, обеспечиваемая битами U/S и R/W

U/S

R/W

Доступ, разрешенный из уровня пользователя (CPL=3)

Доступ, разрешенный из уровня супервизора (DPL=2, 1 или 0)

0

0

1

1

0

1

0

1

Не разрешен

Не разрешен

Только чтение

Чтение и запись

Чтение и запись

Чтение и запись

Чтение и запись

Чтение и запись

- Бит R/W в общем случае обеспечивает защиту от записи для 1024 страниц (страницы), описываемых соответствующей таблицей страниц. Для полной интерп­ретации этот бит должен быть рассмотрен совместно с битом U/S (см. табл. 2.19).

  • Бит Р ("Наличие") указывает, находится ли в физической памяти соответ­ствующая таблица страниц (страница) (Р=1) или нет (Р=0).

Таблица страниц содержит 1024 строки.

Разряды, заполненные нулями, должны быть сформированы во время созда­ния таблицы страниц в памяти. Они не изменяются микропроцессором и зарезер­вированы для будущего применения.

В строке каталога таблиц страниц разряды U/S и R/W используются в каче­стве атрибутов защиты всех страниц в таблице страниц каталога. В строке таблицы страниц разряды U/S и R/W обеспечивают подобную защиту для страницы.

Правила доступа к сегментам также применяются ко всем обращениям в па­мять. В итоге используются самые ограничивающие правила, независимо от того, являются ли они правилами обращения к сегментам или к страницам. Нужно заме­тить, что защита по принципу "исключительно выполнение" задается только пра­вилами сегментного доступа.

Например, если данные размещены в сегменте данных, который можно толь­ко читать, а страница сегмента разрешена для чтения и записи, то доступ к данным разрешен только для чтения. Другой пример: если сегмент программы уровня 3 со­держит страницы, помеченные как "уровень супервизора", то при CPD=3 могут быть выполнены только те страницы, которые помечены как "пользовательский уровень".

Любое обращение к памяти, выполняемое i80386, должно пройти контроль защиты на уровне сегментной и на уровне страничной адресации. Контрольные процедуры проверяют, что CPL имеет адекватный уровень привилегии для доступа к сегменту с заданным DPL и к странице с заданным уровнем U/S.

Механизм страничной организации i80386 может быть легко использован для организации виртуальной памяти. Страничную виртуальную организацию па­мяти поддерживает бит Р. В системе с виртуальной памятью он должен точно ото­бражать местонахождение виртуальной страницы (в памяти, на диске).. Операцион­ная система должна следить за состоянием битов Р. МП i80386 не изменяет, но автоматически проверяет его состояние в каталоге таблиц страниц и в таблице страниц при каждом обращении в память. Если и в каталоге, и в таблице Р=1, то страница находится в оперативной памяти, и производится трансляция адреса. Если в каталоге или в таблице Р=0, обращение к памяти не выполняется, ситуация ква­лифицируется как ошибка страницы, и микропроцессор генерирует исключитель­ную ситуацию. Выполнение команды, вызвавшей исключительную ситуацию, мо­жет быть возобновлено после того, как нужная страница будет загружена в физи­ческую память, а в таблицу трансляции будет помещен адрес физической страницы и установлен бит Р.

Когда механизм страничной адресации используется для обеспечения вирту­альной памяти, большая часть линейного адресного пространства в физической па-мяти отсутствует. Однако некоторые программы и данные должны всегда находить­ся в оперативной памяти.

В системе со страничной памятью в ОП должен оставаться каталог таблиц страниц, к которому, как к таблице первого уровня, обращаются, когда требуются таблицы страниц.

В ОП должна находиться программа, которая переносит необходимые стра­ницы в физическую память. В противном случае ни одна страница не сможет быть перенесена в физическую память без того, чтобы не вызвать исключительную си­туацию "Ошибка страницы" (ИС14), программа обслуживания которой также дол­жна быть в памяти.

В оперативной памяти должны быть IDT (там расположены вентили вызова программ обработки исключительной ситуации), GDT (содержит дескрипторы сег­ментов программы обслуживания и данных), TSS (содержит указатель стека для уровня привилегии О), сам стек и таблицы страниц, используемые при трансляции адреса для IDT, GDT, TSS, стека уровня О и сегментов программы обслуживания и данных. Все эти структуры можно расположить в одной таблице страниц.

Для ускорения процесса трансляции адреса i80386 имеет быструю кэш-па­мять, содержащую последние (по времени использования) результаты трансляции адреса и называемую буфером ускорения трансляции TLB (Translation Lookaside Buffer). TLB хранит 32 значения оттранслированных номеров страниц, соответст­вующих 32-м номерам виртуальных страниц. При этом приблизительно в 98-99 % случаях обращения в память трансляция адреса страницы может быть заменена бы­строй ассоциативной выборкой из TLB.

^ В i80386 предусмотрены средства, обеспечивающие тестирование TLB с по­мощью двух регистров - TR6 и TR7, подробное описание которых дано в разде­ле 2.1.2.4.

Перед тестированием нужно отключить механизм страничной трансляции (сбросить бит PG в регистре CRO).

Тестирование начинается с подготовки TLB: командой MOV TR7, Rn в ре­гистр TR7 загружается физический адрес (при этом PL=1, a REP равен номеру блока), а в регистр TR6 командой MOV TR6, Rn - линейный адрес (при С=Ю) и соответствующие атрибуты проверки.

Для инициализации режима поиска в TLB в регистр TR6 загружается линей­ный адрес, по которому осуществляется проверка (при 0=1). Анализ содержимого регистров (TR6 и TR7) позволяет сделать вывод о правильности функционирова­ния TLB (при PL=1).