Файл: А. В. Гордеев А. Ю. Молчанов системное программное обеспечение электронный вариант книги издательства Питер СанктПетербург Челябинск юургу каф. Автоматика и управление 2002 2 Предисловие Настоящий учебник.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 1019
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Контрольные вопросы и задачи
Вопросы для проверки
Перечислите и поясните основные функции ОС, которые связаны с управлени- ем задачами.
1 Какие дисциплины диспетчеризации задач вы знаете? Опишите их.
2 Что такое «гарантия обслуживания»? Как её можно реализовать?
3 Сравните механизмы диспетчеризации задач в ОС Windows NT и OS/2. В
чём заключаются основные различия?
4 Опишите механизм динамической диспетчеризации, реализованный в UNIX- системах.
119 5 Что такое «виртуальный адрес», «виртуальное адресное пространство»? Чем
(в общем случае) определяется максимально возможный объём виртуального ад- ресного пространства программы?
6 Что такое «фрагментация памяти»? Какой метод распределения памяти по- зволяет добиться минимальной фрагментации?
7 Что такое «уплотнение памяти»? Когда оно применяется?
8 Объясните сегментный способ организации виртуальной памяти. Что пред- ставляет собой (в общем случае) дескриптор сегмента?
9 Сравните сегментный и страничный способы организации виртуальной па- мяти. Перечислите достоинства и недостатки каждого.
10 Какие дисциплины применяются для решения задачи замещения страниц?
Какие из них являются наиболее эффективными и как они реализуются?
11 Что такое «рабочее множество»? Что позволяет разрешить реализация это- го понятия?
12 Изложите принципы распределения памяти в MS-DOS.
13 Что означает термин «плоская модель памяти»? В чём заключаются досто- инства (и недостатки, если они есть) использования этой модели?
ГЛАВА 3
Особенности архитектуры микропроцессоров i80x86
В рамках данного учебного пособия мы, естественно, не будем рассматривать все многообразие современных 32-разрядных микропроцессоров, используемых в
ПК и иных вычислительных системах. Здесь мы ограничимся рассмотрением толь- ко архитектурных, а не технических характеристик микропроцессоров. Под обо- значением i80x86 будем понимать любые 32-битовые микропроцессоры, имеющие такой же основной набор команд, как и в первом 32-битовом микропроцессоре Intel
80386, и те же архитектурные решения, что и в микропроцессорах фирмы Intel.
120
Реальный и защищённый режимы работы
процессора
Широко известно, что первым микропроцессором, на базе которого была соз- дана IBM PC, был Intel 8088. Этот микропроцессор отличался от первого 16- разрядного микропроцессора фирмы Intel – 8086 – прежде всего тем, что у него была 8-битовая шина данных, а не 16-битовая (как у 8086). Оба эти микропроцес- сора предназначались для создания вычислительных устройств, которые бы рабо- тали в однозадачном режиме, то есть специальных аппаратных средств для под- держки надёжных и эффективных мультипрограммных ОС в них не было.
Однако к тому времени, когда разработчики осознали необходимость включе- ния в микропроцессор специальной аппаратной поддержки для мультипрограмм- ных вычислений, уже было создано очень много программных продуктов. Поэтому для совместимости с первыми компьютерами в последующих версиях микропро- цессоров была реализована возможность использовать их в двух режимах – реаль-
ном (real mode – так назвали режим работы первых 16-битовых микропроцессоров)
и защищённом (protected mode – означает, что параллельные вычисления могут быть защищёны аппаратно-программными механизмами).
Подробно рассматривать архитектуру первых 16-битовых микропроцессоров i8086/i8088 мы не будем, поскольку этот материал должен изучаться в предыдущих дисциплинах учебного плана. Для тех же, кто с ним не знаком, можно реко- мендовать такие книги, как [52, 73], и многие другие. Однако напомним, что в этих микропроцессорах (а значит, и в остальных микропроцессорах семейства i80x86
при работе их в реальном режиме) обращение к памяти с возможным адресным пространством в 1 Мбайт осуществляется посредством механизма сегментной ад- ресации (рис. 3.1). Этот механизм был использован для увеличения количества разрядов, участвующих в указании адреса ячейки памяти, с которой в данный мо- мент осуществляется работа, с 16 до 20 и тем самым увеличения объёма памяти.
Конкретизируем задачу и ограничимся рассмотрением определения адреса ко- манды. Для адресации операндов используется аналогичный механизм, только уча- ствуют в этом случае другие сегментные регистры. Напомним, что для опре-
121
деления физического адреса команды содержимое сегментного регистра CS (code segment) умножается на 16 за счёт добавления справа (к младшим битам) четырех нулей, после чего к полученному значению прибавляется содержимое указателя команд (регистр IP, instruction pointer). Получается двадцатибитовое значение, ко- торое и позволяет указать любой байт из 2 20 1
Рис. 3.1. Схема определения физического адреса для процессора 8086
В защищённом режиме работы определение физического адреса осуществля- ется совершенно иначе. Прежде всего используется сегментный механизм для ор- ганизации виртуальной памяти. При этом адреса задаются 32-битовыми значения- ми. Кроме этого, возможна страничная трансляция адресов, также с 32-битовыми значениями. Наконец, при работе в защищённом режиме, который по умолчанию предполагает 32-битовый код, возможно исполнение двоичных программ, создан- ных для работы микропроцессора в 16-битовом режиме. Для этого введён режим виртуальной 16-битовой машины и 20-битовые адреса реального режима трансли- руются с помощью страничного механизма в 32-битовые значения защищённого режима. Наконец, есть ещё один режим – 16-битовый защищённый, позволяющий
32-битовым микропроцессорам выполнять защищённый 16-битовый код, который был характерен для микропроцессора 80286. Правда, следует отметить, что этот
1
На самом деле, поскольку происходит именно сложение и каждое из слагаемых может иметь значение в интервале от нуля до 2 16
-1 = 65535= 64К, мы можем указать адрес начала сегмента, равный FFFFFFFF00H, и к нему прибавить смещение FFFFFFFFH. В этом случае мы получим переполнение разрядной сетки, но для современных 32-битовых процессоров (и для уже забытого i80286) имеется возможность указать первые 64 Кбайт выше первого мегабайта.
0
0
0
0
Регистр CS
Регистр IP
Значение регистра CS
0
15
+
0
15
Физический адрес
0
19
=
122
последний режим практически не используется, поскольку программ, созданных для него, не так уж и много.
Для изучения этих возможностей рассмотрим сначала новые архитектурные возможности микропроцессоров i80x86.
Новые системные регистры
микропроцессоров i80x86
Основные регистры микропроцессора i80x86, знание которых необходимо для понимания защищённого режима работы, приведены на рис. 3.2. Следует обратить внимание на следующее:
| указатель команды EIP – 32 битовый регистр, младшие 16 разрядов этого ре- гистра есть регистр IP;
| регистр флагов EFLAGS – 32 бита, младшие 16 разрядов представляют ре- гистр FLAGS;
| регистры общего назначения ЕАХ, ЕВХ. ЕСХ, EDX, а также ESP, ЕВР, ESI,
EDI – 32-битовые, однако их младшие 16 разрядов представляют собой известные регистры AX, BX, CX, DX, SP, ВР, SI, DI;
| сегментные регистры CS, SS, DS, ES, FS, GS – 16-битовые. При каждом из регистров CS, SS, DS, ES, FS, GS изображены пунктиром скрытые от про- граммистов (недоступны никому, кроме собственно микропроцессора) 64-битовые регистры, в которые загружаются дескрипторы соответствующих сегментов;
| регистр-указатель на локальную таблицу сегментов текущей задачи – LDTR
(16 битов). При этом регистре также имеется «теневой» (скрытый от программи- ста) 64-битовый регистр, в который микропроцессор заносит дескриптор, указы- вающий на таблицу дескрипторов сегментов задачи, описывающих её локальное виртуальное адресное пространство;
| регистр-указатель задачи TR
1
(16 битов). Указывает на дескриптор в гло- бальной таблице дескрипторов, позволяющий получить доступ к дескриптору за-
1
TR – task register.
123
дачи TSS
2
– информационной структуре, которую поддерживает микропроцессор для управления задачами;
| регистр GDTR
1
(48 битов) глобальной таблицы GDT, содержащей как деск- рипторы общих сегментов, так и специальные системные дескрипторы. В ча- стности, в GDTR находятся дескрипторы, с помощь которых можно получить дос- туп к сегментам TSS;
| регистр IDTR (48 битов) таблицы дескрипторов прерываний. Содержит ин- формацию, необходимую для доступа к «таблице прерываний» IDT;
2
TSS – task state segment.
EIP
IP
EFLAGS
FLAGS
31
ESP
SP
EBP
BP
ESI
SI
16 15
0
EDI
DI
31
EAX
AX
EBX
BX
ECX
CX
16 15
0
EDX
DX
CS
SS
DS
15
0
ES
FS
GS
LDTR
TR
Права доступа
Базовый адрес
Длина сегмента
0
15
47
63
16
48
Базовый адрес
Длина сегмента
GDTR
IDTR
Рис. 3.2. Основные системные регистры микропроцессоров i80х86
CR3
CR2
CR1
31
CR0
0
124
| управляющие регистры CR0 – CR3 (32-битовые) и некоторые другие реги- стры.
Управляющий регистр CR0 содержит целый ряд флагов, которые определяют режимы работы микропроцессора. Подробно об этих флагах можно прочитать в книгах [2, 22, 48]. Мы же просто ограничимся тем фактом, что самый младший бит
(РЕ, protect enable) этого регистра определяет режим работы процессора. При РЕ=0
процессор функционирует в реальном режиме работы, а при единичном значении микропроцессор переключается в защищённый режим. Самый старший бит реги- стра CR0 (бит PG, paging) определяет, включен (PG=l) или нет (PG=0) режим стра- ничного преобразования адресов.
Регистр CR2 предназначен для размещения в нем адреса подпрограммы обра- ботки страничного исключения, то есть в случае использования страничного меха- низма отображения памяти обращение к отсутствующей странице будет вызывать переход на соответствующую подпрограмму диспетчера памяти, и для определе- ния этой подпрограммы будет задействован регистр CR2.
Регистр CR3 содержит номер физической страницы, в которой располагается таблица каталогов таблиц страниц текущей задачи. Очевидно, что, приписав к это- му номеру нули, мы попадем на начало этой страницы.
Адресация в 32-разрядных микропроцессорах
i80х86 при работе в защищённом режиме
Поддержка сегментного способа организации виртуальной памяти
Как мы уже знаем, для организации эффективной и надёжной работы вычис- лительной системы в мультипрограммном режиме необходимо иметь соответст- вующие аппаратные механизмы, поддерживающие независимость адресных про- странств каждой задачи и в то же время позволяющие организовать обмен данны- ми и разделение кода. Для этого желательно выполнение следующих двух требо- ваний:
1
GDTR – global descriptor table register.
125
| чтобы у каждого вычислительного процесса могло быть свое собственное
(личное, локальное) адресное пространство, которое никак не может пересекаться с адресными пространствами других задач;
| чтобы существовало общее (разделяемое) адресное пространство.
Поэтому в микропроцессорах i80x86 реализован сегментный способ организа- ции распределения памяти. Помимо этого, в этих микропроцессорах может быть задействована и страничная трансляция. Поскольку для каждого сегмента нужен дескриптор, устройство управления памятью поддерживает соответствующую ин- формационную структуру. Формат дескриптора сегмента приведен на рис. 3.3.
Поля дескриптора (базовый адрес, поле предела) размещены в дескрипторе не непрерывно, а в разбивку, во-первых, из-за того, что разработчики постарались ми- нимизировать количество перекрестных соединений в полупроводниковой струк- туре микропроцессора, а во-вторых – вследствие необходимости обеспечить пол- ную совместимость
1
микропроцессоров (предыдущий микропроцессор i80286 ра- ботал с 16-битовым кодом и тоже поддерживал сегментный механизм реализации виртуальной памяти). Необходимо заметить, что формат дескриптора сегмента,
изображенный на рис.3.3, справедлив только для случая нахождения соответст- вующего сегмента в оперативной памяти. Если же бит присутствия в поле прав доступа равен нулю (сегмент отсутствует в памяти), то все биты, за исключением поля прав доступа, считаются неопределенными и могут использоваться систем- ными программистами (для указания адреса сегмента во внешней памяти) произ- вольным образом.
Локальное адресное пространство задачи определяется через таблицу LDT
(local descriptor table). У каждой задачи может быть свое локальное адресное про- странство. Общее или глобальное адресное пространство определяется через таб- лицу GDT (global descriptor table). Само собой, что работу с этими таблицами (их заполнение и последующую модификацию) должна осуществлять операционная
1
Естественно, совместимость обеспечена только «снизу вверх», то есть программы, разработанные для предыдущих версий микропроцессора, должны выполняться на последующих без какой-либо переделки.
126
система. Доступ к таблицам LDT и GDT со стороны прикладных задач должен быть исключен.
Рис.3.3. Дескриптор сегмента
При переключении микропроцессора в защищённый режим он начинает со- вершенно другим образом, чем в реальном режиме, вычислять физические адреса команд и операндов. Прежде всего, содержимое сегментных регистров интерпре- тируется иначе: считается, что там содержится не адрес начала сегмента, а номер соответствующего сегмента. Для того чтобы подчеркнуть этот факт, сегментные регистры CS, SS, DS, ES, FS, GS в таком случае даже называются иначе – селек-
торами сегментов. При этом каждый селекторный регистр разбивается на сле- дующие три поля (рис. 3.4):
| поле индекса (index) – старшие 13 битов (3-15). Определяет собственно но- мер сегмента (его индекс в соответствующей таблице дескрипторов);
| поле индикатора таблицы сегментов (table index, TI) – бит с номером 2. Оп- ределяет часть виртуального адресного пространства (общее или принадлежащее только данной задаче). Если ТI=0, то Index указывает на элемент в глобальной таб- лице дескрипторов GDT, то есть идёт обращение к общей памяти. Если TI=1, то идёт обращение к локальной области памяти текущей задачи; это пространство описывается локальной таблицей дескрипторов LDT;
Старшее двойное слово дескриптора
База сегмента
(биты 31-24)
G
D
0
0
Биты 19-16
поля Limit
P
DPL
S
Type
A
База сегмента
(биты 23-16)
Базовый адрес сегмента (биты 15-0)
Байт прав доступа
Limit-размер (предел) сегмента
(биты 15-0)
Первое (младшее) двойное слово дескриптора
31
23
19
15
11
7
31
15
0
127
| поле уровня привилегий – биты 0 и 1. Указывает запрашиваемый уровень привилегий (RPL, requested privilege level).
Операционная система в процессе своего запуска инициализирует многие ре- гистры и, прежде всего, GDTR. Этот регистр содержит начальный адрес глобаль- ной таблицы дескрипторов (GDT) и её размер. Как мы уже знаем, в GDT находятся дескрипторы глобальных сегментов и системные дескрипторы.
Рис.3.4. Селектор сегмента
Для манипулирования задачами ОС имеет информационную структуру, кото- рую мы уже определили как дескриптор задачи (см. раздел «Понятия вычисли- тельного процесса и ресурса», глава 1). Микропроцессор поддерживает работу с наиболее важной частью дескриптора задачи, которая меньше всего зависит от операционной системы. Эта инвариантная часть дескриптора, с которой и работает микропроцессор, названа сегментом состояния задачи (task state segment, TSS).
Перечень полей TSS изображен на рис. 3.5. Видно, что в основном этот сегмент со- держит контекст задачи. Процессор получает доступ к этой структуре с помощью регистра задачи (task register, TR).
Регистр TR содержит индекс (селектор) элемента в GDT. Этот элемент пред- ставляет собой дескриптор сегмента TSS. Дескриптор заносится в теневую часть регистра (см. рис. 3.2). К рассмотрению TSS мы ещё вернемся, а сейчас заметим,
что в одном из полей TSS содержится указатель (селектор) на локальную таблицу дескрипторов данной задачи. При переходе процессора с одной задачи на другую содержимое поля LDTR заносится микропроцессором в одноименный регистр.
Инициализировать регистр TR можно и явным образом.
Итак, регистр LDTR содержит селектор, указывающий на один из дескрипто- ров глобальной таблицы GDT. Этот дескриптор заносится микропроцессором в те- невую часть регистра LDTR и описывает таблицу LDT для текущей задачи. Теперь,
когда у нас определены как глобальная, так и локальная таблица дескрипторов,
Index (номер дескриптора)
TI
RPL
0
1
2
3
15
128
можно рассмотреть процесс определения линейного
1
адреса. Для примера рассмот- рим процесс получения адреса команды. Адреса операндов определяются по ана- логии, но задействованы будут другие регистры.
Микропроцессор анализирует бит TI селектора кода и в зависимости от его значения, извлекает из таблицы GDT или LDT дескриптор сегмента кода с номером
(индексом), который равен полю index (биты 3-15 селектора, см. рис. 3.4). Этот де- скриптор заносится в теневую (скрытую) часть регистра CS. Далее микропроцессор сравнивает значение регистра EIP
2
с полем размера сегмента, содержащегося в из- влеченном дескрипторе, и если смещение относительно начала сегмента не пре- вышает размера предела, то значение EIP прибавляется к значению поля начала сегмента и мы получаем искомый линейный адрес команды.
Вопросы для проверки
Перечислите и поясните основные функции ОС, которые связаны с управлени- ем задачами.
1 Какие дисциплины диспетчеризации задач вы знаете? Опишите их.
2 Что такое «гарантия обслуживания»? Как её можно реализовать?
3 Сравните механизмы диспетчеризации задач в ОС Windows NT и OS/2. В
чём заключаются основные различия?
4 Опишите механизм динамической диспетчеризации, реализованный в UNIX- системах.
119 5 Что такое «виртуальный адрес», «виртуальное адресное пространство»? Чем
(в общем случае) определяется максимально возможный объём виртуального ад- ресного пространства программы?
6 Что такое «фрагментация памяти»? Какой метод распределения памяти по- зволяет добиться минимальной фрагментации?
7 Что такое «уплотнение памяти»? Когда оно применяется?
8 Объясните сегментный способ организации виртуальной памяти. Что пред- ставляет собой (в общем случае) дескриптор сегмента?
9 Сравните сегментный и страничный способы организации виртуальной па- мяти. Перечислите достоинства и недостатки каждого.
10 Какие дисциплины применяются для решения задачи замещения страниц?
Какие из них являются наиболее эффективными и как они реализуются?
11 Что такое «рабочее множество»? Что позволяет разрешить реализация это- го понятия?
12 Изложите принципы распределения памяти в MS-DOS.
13 Что означает термин «плоская модель памяти»? В чём заключаются досто- инства (и недостатки, если они есть) использования этой модели?
ГЛАВА 3
Особенности архитектуры микропроцессоров i80x86
В рамках данного учебного пособия мы, естественно, не будем рассматривать все многообразие современных 32-разрядных микропроцессоров, используемых в
ПК и иных вычислительных системах. Здесь мы ограничимся рассмотрением толь- ко архитектурных, а не технических характеристик микропроцессоров. Под обо- значением i80x86 будем понимать любые 32-битовые микропроцессоры, имеющие такой же основной набор команд, как и в первом 32-битовом микропроцессоре Intel
80386, и те же архитектурные решения, что и в микропроцессорах фирмы Intel.
120
Реальный и защищённый режимы работы
процессора
Широко известно, что первым микропроцессором, на базе которого была соз- дана IBM PC, был Intel 8088. Этот микропроцессор отличался от первого 16- разрядного микропроцессора фирмы Intel – 8086 – прежде всего тем, что у него была 8-битовая шина данных, а не 16-битовая (как у 8086). Оба эти микропроцес- сора предназначались для создания вычислительных устройств, которые бы рабо- тали в однозадачном режиме, то есть специальных аппаратных средств для под- держки надёжных и эффективных мультипрограммных ОС в них не было.
Однако к тому времени, когда разработчики осознали необходимость включе- ния в микропроцессор специальной аппаратной поддержки для мультипрограмм- ных вычислений, уже было создано очень много программных продуктов. Поэтому для совместимости с первыми компьютерами в последующих версиях микропро- цессоров была реализована возможность использовать их в двух режимах – реаль-
ном (real mode – так назвали режим работы первых 16-битовых микропроцессоров)
и защищённом (protected mode – означает, что параллельные вычисления могут быть защищёны аппаратно-программными механизмами).
Подробно рассматривать архитектуру первых 16-битовых микропроцессоров i8086/i8088 мы не будем, поскольку этот материал должен изучаться в предыдущих дисциплинах учебного плана. Для тех же, кто с ним не знаком, можно реко- мендовать такие книги, как [52, 73], и многие другие. Однако напомним, что в этих микропроцессорах (а значит, и в остальных микропроцессорах семейства i80x86
при работе их в реальном режиме) обращение к памяти с возможным адресным пространством в 1 Мбайт осуществляется посредством механизма сегментной ад- ресации (рис. 3.1). Этот механизм был использован для увеличения количества разрядов, участвующих в указании адреса ячейки памяти, с которой в данный мо- мент осуществляется работа, с 16 до 20 и тем самым увеличения объёма памяти.
Конкретизируем задачу и ограничимся рассмотрением определения адреса ко- манды. Для адресации операндов используется аналогичный механизм, только уча- ствуют в этом случае другие сегментные регистры. Напомним, что для опре-
121
деления физического адреса команды содержимое сегментного регистра CS (code segment) умножается на 16 за счёт добавления справа (к младшим битам) четырех нулей, после чего к полученному значению прибавляется содержимое указателя команд (регистр IP, instruction pointer). Получается двадцатибитовое значение, ко- торое и позволяет указать любой байт из 2 20 1
Рис. 3.1. Схема определения физического адреса для процессора 8086
В защищённом режиме работы определение физического адреса осуществля- ется совершенно иначе. Прежде всего используется сегментный механизм для ор- ганизации виртуальной памяти. При этом адреса задаются 32-битовыми значения- ми. Кроме этого, возможна страничная трансляция адресов, также с 32-битовыми значениями. Наконец, при работе в защищённом режиме, который по умолчанию предполагает 32-битовый код, возможно исполнение двоичных программ, создан- ных для работы микропроцессора в 16-битовом режиме. Для этого введён режим виртуальной 16-битовой машины и 20-битовые адреса реального режима трансли- руются с помощью страничного механизма в 32-битовые значения защищённого режима. Наконец, есть ещё один режим – 16-битовый защищённый, позволяющий
32-битовым микропроцессорам выполнять защищённый 16-битовый код, который был характерен для микропроцессора 80286. Правда, следует отметить, что этот
1
На самом деле, поскольку происходит именно сложение и каждое из слагаемых может иметь значение в интервале от нуля до 2 16
-1 = 65535= 64К, мы можем указать адрес начала сегмента, равный FFFFFFFF00H, и к нему прибавить смещение FFFFFFFFH. В этом случае мы получим переполнение разрядной сетки, но для современных 32-битовых процессоров (и для уже забытого i80286) имеется возможность указать первые 64 Кбайт выше первого мегабайта.
0
0
0
0
Регистр CS
Регистр IP
Значение регистра CS
0
15
+
0
15
Физический адрес
0
19
=
122
последний режим практически не используется, поскольку программ, созданных для него, не так уж и много.
Для изучения этих возможностей рассмотрим сначала новые архитектурные возможности микропроцессоров i80x86.
Новые системные регистры
микропроцессоров i80x86
Основные регистры микропроцессора i80x86, знание которых необходимо для понимания защищённого режима работы, приведены на рис. 3.2. Следует обратить внимание на следующее:
| указатель команды EIP – 32 битовый регистр, младшие 16 разрядов этого ре- гистра есть регистр IP;
| регистр флагов EFLAGS – 32 бита, младшие 16 разрядов представляют ре- гистр FLAGS;
| регистры общего назначения ЕАХ, ЕВХ. ЕСХ, EDX, а также ESP, ЕВР, ESI,
EDI – 32-битовые, однако их младшие 16 разрядов представляют собой известные регистры AX, BX, CX, DX, SP, ВР, SI, DI;
| сегментные регистры CS, SS, DS, ES, FS, GS – 16-битовые. При каждом из регистров CS, SS, DS, ES, FS, GS изображены пунктиром скрытые от про- граммистов (недоступны никому, кроме собственно микропроцессора) 64-битовые регистры, в которые загружаются дескрипторы соответствующих сегментов;
| регистр-указатель на локальную таблицу сегментов текущей задачи – LDTR
(16 битов). При этом регистре также имеется «теневой» (скрытый от программи- ста) 64-битовый регистр, в который микропроцессор заносит дескриптор, указы- вающий на таблицу дескрипторов сегментов задачи, описывающих её локальное виртуальное адресное пространство;
| регистр-указатель задачи TR
1
(16 битов). Указывает на дескриптор в гло- бальной таблице дескрипторов, позволяющий получить доступ к дескриптору за-
1
TR – task register.
123
дачи TSS
2
– информационной структуре, которую поддерживает микропроцессор для управления задачами;
| регистр GDTR
1
(48 битов) глобальной таблицы GDT, содержащей как деск- рипторы общих сегментов, так и специальные системные дескрипторы. В ча- стности, в GDTR находятся дескрипторы, с помощь которых можно получить дос- туп к сегментам TSS;
| регистр IDTR (48 битов) таблицы дескрипторов прерываний. Содержит ин- формацию, необходимую для доступа к «таблице прерываний» IDT;
2
TSS – task state segment.
EIP
IP
EFLAGS
FLAGS
31
ESP
SP
EBP
BP
ESI
SI
16 15
0
EDI
DI
31
EAX
AX
EBX
BX
ECX
CX
16 15
0
EDX
DX
CS
SS
DS
15
0
ES
FS
GS
LDTR
TR
Права доступа
Базовый адрес
Длина сегмента
0
15
47
63
16
48
Базовый адрес
Длина сегмента
GDTR
IDTR
Рис. 3.2. Основные системные регистры микропроцессоров i80х86
CR3
CR2
CR1
31
CR0
0
124
| управляющие регистры CR0 – CR3 (32-битовые) и некоторые другие реги- стры.
Управляющий регистр CR0 содержит целый ряд флагов, которые определяют режимы работы микропроцессора. Подробно об этих флагах можно прочитать в книгах [2, 22, 48]. Мы же просто ограничимся тем фактом, что самый младший бит
(РЕ, protect enable) этого регистра определяет режим работы процессора. При РЕ=0
процессор функционирует в реальном режиме работы, а при единичном значении микропроцессор переключается в защищённый режим. Самый старший бит реги- стра CR0 (бит PG, paging) определяет, включен (PG=l) или нет (PG=0) режим стра- ничного преобразования адресов.
Регистр CR2 предназначен для размещения в нем адреса подпрограммы обра- ботки страничного исключения, то есть в случае использования страничного меха- низма отображения памяти обращение к отсутствующей странице будет вызывать переход на соответствующую подпрограмму диспетчера памяти, и для определе- ния этой подпрограммы будет задействован регистр CR2.
Регистр CR3 содержит номер физической страницы, в которой располагается таблица каталогов таблиц страниц текущей задачи. Очевидно, что, приписав к это- му номеру нули, мы попадем на начало этой страницы.
Адресация в 32-разрядных микропроцессорах
i80х86 при работе в защищённом режиме
Поддержка сегментного способа организации виртуальной памяти
Как мы уже знаем, для организации эффективной и надёжной работы вычис- лительной системы в мультипрограммном режиме необходимо иметь соответст- вующие аппаратные механизмы, поддерживающие независимость адресных про- странств каждой задачи и в то же время позволяющие организовать обмен данны- ми и разделение кода. Для этого желательно выполнение следующих двух требо- ваний:
1
GDTR – global descriptor table register.
125
| чтобы у каждого вычислительного процесса могло быть свое собственное
(личное, локальное) адресное пространство, которое никак не может пересекаться с адресными пространствами других задач;
| чтобы существовало общее (разделяемое) адресное пространство.
Поэтому в микропроцессорах i80x86 реализован сегментный способ организа- ции распределения памяти. Помимо этого, в этих микропроцессорах может быть задействована и страничная трансляция. Поскольку для каждого сегмента нужен дескриптор, устройство управления памятью поддерживает соответствующую ин- формационную структуру. Формат дескриптора сегмента приведен на рис. 3.3.
Поля дескриптора (базовый адрес, поле предела) размещены в дескрипторе не непрерывно, а в разбивку, во-первых, из-за того, что разработчики постарались ми- нимизировать количество перекрестных соединений в полупроводниковой струк- туре микропроцессора, а во-вторых – вследствие необходимости обеспечить пол- ную совместимость
1
микропроцессоров (предыдущий микропроцессор i80286 ра- ботал с 16-битовым кодом и тоже поддерживал сегментный механизм реализации виртуальной памяти). Необходимо заметить, что формат дескриптора сегмента,
изображенный на рис.3.3, справедлив только для случая нахождения соответст- вующего сегмента в оперативной памяти. Если же бит присутствия в поле прав доступа равен нулю (сегмент отсутствует в памяти), то все биты, за исключением поля прав доступа, считаются неопределенными и могут использоваться систем- ными программистами (для указания адреса сегмента во внешней памяти) произ- вольным образом.
Локальное адресное пространство задачи определяется через таблицу LDT
(local descriptor table). У каждой задачи может быть свое локальное адресное про- странство. Общее или глобальное адресное пространство определяется через таб- лицу GDT (global descriptor table). Само собой, что работу с этими таблицами (их заполнение и последующую модификацию) должна осуществлять операционная
1
Естественно, совместимость обеспечена только «снизу вверх», то есть программы, разработанные для предыдущих версий микропроцессора, должны выполняться на последующих без какой-либо переделки.
126
система. Доступ к таблицам LDT и GDT со стороны прикладных задач должен быть исключен.
Рис.3.3. Дескриптор сегмента
При переключении микропроцессора в защищённый режим он начинает со- вершенно другим образом, чем в реальном режиме, вычислять физические адреса команд и операндов. Прежде всего, содержимое сегментных регистров интерпре- тируется иначе: считается, что там содержится не адрес начала сегмента, а номер соответствующего сегмента. Для того чтобы подчеркнуть этот факт, сегментные регистры CS, SS, DS, ES, FS, GS в таком случае даже называются иначе – селек-
торами сегментов. При этом каждый селекторный регистр разбивается на сле- дующие три поля (рис. 3.4):
| поле индекса (index) – старшие 13 битов (3-15). Определяет собственно но- мер сегмента (его индекс в соответствующей таблице дескрипторов);
| поле индикатора таблицы сегментов (table index, TI) – бит с номером 2. Оп- ределяет часть виртуального адресного пространства (общее или принадлежащее только данной задаче). Если ТI=0, то Index указывает на элемент в глобальной таб- лице дескрипторов GDT, то есть идёт обращение к общей памяти. Если TI=1, то идёт обращение к локальной области памяти текущей задачи; это пространство описывается локальной таблицей дескрипторов LDT;
Старшее двойное слово дескриптора
База сегмента
(биты 31-24)
G
D
0
0
Биты 19-16
поля Limit
P
DPL
S
Type
A
База сегмента
(биты 23-16)
Базовый адрес сегмента (биты 15-0)
Байт прав доступа
Limit-размер (предел) сегмента
(биты 15-0)
Первое (младшее) двойное слово дескриптора
31
23
19
15
11
7
31
15
0
127
| поле уровня привилегий – биты 0 и 1. Указывает запрашиваемый уровень привилегий (RPL, requested privilege level).
Операционная система в процессе своего запуска инициализирует многие ре- гистры и, прежде всего, GDTR. Этот регистр содержит начальный адрес глобаль- ной таблицы дескрипторов (GDT) и её размер. Как мы уже знаем, в GDT находятся дескрипторы глобальных сегментов и системные дескрипторы.
Рис.3.4. Селектор сегмента
Для манипулирования задачами ОС имеет информационную структуру, кото- рую мы уже определили как дескриптор задачи (см. раздел «Понятия вычисли- тельного процесса и ресурса», глава 1). Микропроцессор поддерживает работу с наиболее важной частью дескриптора задачи, которая меньше всего зависит от операционной системы. Эта инвариантная часть дескриптора, с которой и работает микропроцессор, названа сегментом состояния задачи (task state segment, TSS).
Перечень полей TSS изображен на рис. 3.5. Видно, что в основном этот сегмент со- держит контекст задачи. Процессор получает доступ к этой структуре с помощью регистра задачи (task register, TR).
Регистр TR содержит индекс (селектор) элемента в GDT. Этот элемент пред- ставляет собой дескриптор сегмента TSS. Дескриптор заносится в теневую часть регистра (см. рис. 3.2). К рассмотрению TSS мы ещё вернемся, а сейчас заметим,
что в одном из полей TSS содержится указатель (селектор) на локальную таблицу дескрипторов данной задачи. При переходе процессора с одной задачи на другую содержимое поля LDTR заносится микропроцессором в одноименный регистр.
Инициализировать регистр TR можно и явным образом.
Итак, регистр LDTR содержит селектор, указывающий на один из дескрипто- ров глобальной таблицы GDT. Этот дескриптор заносится микропроцессором в те- невую часть регистра LDTR и описывает таблицу LDT для текущей задачи. Теперь,
когда у нас определены как глобальная, так и локальная таблица дескрипторов,
Index (номер дескриптора)
TI
RPL
0
1
2
3
15
128
можно рассмотреть процесс определения линейного
1
адреса. Для примера рассмот- рим процесс получения адреса команды. Адреса операндов определяются по ана- логии, но задействованы будут другие регистры.
Микропроцессор анализирует бит TI селектора кода и в зависимости от его значения, извлекает из таблицы GDT или LDT дескриптор сегмента кода с номером
(индексом), который равен полю index (биты 3-15 селектора, см. рис. 3.4). Этот де- скриптор заносится в теневую (скрытую) часть регистра CS. Далее микропроцессор сравнивает значение регистра EIP
2
с полем размера сегмента, содержащегося в из- влеченном дескрипторе, и если смещение относительно начала сегмента не пре- вышает размера предела, то значение EIP прибавляется к значению поля начала сегмента и мы получаем искомый линейный адрес команды.
1 ... 7 8 9 10 11 12 13 14 ... 37