Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционные системы. Часть 2. Учебное пособие
.pdf
страницу, осуществляет ее подкачку в память и возобновляет
нормальную работу программы.
Регистр cr3 также используется при страничной организации памяти. Это так называемый регистр каталога страниц первого уровня. Он содержит 20-битный физический базовый адрес
каталога страниц текущей задачи. Этот каталог содержит 1024
32-битных дескриптора, каждый из которых содержит адрес
таблицы страниц второго уровня. В свою очередь каждая из
таблиц страниц второго уровня содержит 1024 32-битных дескриптора, адресующих страничные кадры в памяти. Размер страничного кадра — 4 Кбайт.
Регистры системных адресов. Эти регистры еще называют регистрами управления памятью. Они предназначены для
защиты программ и данных в мультизадачном режиме работы
микропроцессора.
При работе в защищенном режиме микропроцессора адресное пространство делится:
– на глобальное — общее для всех задач;
– локальное — отдельное для каждой задачи.
Этим разделением и объясняется присутствие в архитектуре микропроцессора следующих системных регистров:
– регистра таблицы глобальных дескрипторов gdtr (Global
Descriptor Table Register), имеющего размер 48 бит и содержа-
щего 32-битовый (биты 16—47) базовый адрес глобальной дескрипторной таблицы GDT и 16-битовое (биты 0—15) значение
предела, представляющее собой размер в байтах таблицы GDT;
– регистра таблицы локальных дескрипторов ldtr (Local
Descriptor Table Register), имеющего размер 16 бит и содержа-
щего так называемый селектор дескриптора локальной дескрипторной таблицы LDT. Этот селектор является указателем в таблице GDT, который и описывает сегмент, содержащий локальную дескрипторную таблицу LDT;
– регистра таблицы дескрипторов прерываний idtr (Interrupt
Descriptor Table Register), имеющего размер 48 бит и содержа-
щего 32-битовый (биты 16–47) базовый адрес дескрипторной
таблицы прерываний IDT и 16-битовое (биты 0—15) значение
предела, представляющее собой размер в байтах таблицы IDT;
101

– 16-битового регистра задачи tr (Task Register), который по-
добно регистру ldtr, содержит селектор, то есть указатель на дескриптор в таблице GDT. Этот дескриптор описывает текущий
сегмент состояния задачи (TSS — Task Segment Status). Этот
сегмент создается для каждой задачи в системе, имеет жестко
регламентированную структуру и содержит контекст (текущее
состояние) задачи. Основное назначение сегментов TSS — сохранять текущее состояние задачи в момент переключения на
другую задачу.
Регистры отладки. Это группа регистров, предназначен-
ных для аппаратной отладки. Средства аппаратной отладки
впервые появились в микропроцессоре i486. Аппаратно микропроцессор содержит восемь регистров отладки, но реально из
них используются только 6.
Регистры dr0, dr1, dr2, dr3 имеют разрядность 32 бита и
предназначены для задания линейных адресов четырех точек
прерывания. Используемый при этом механизм следующий:
любой формируемый текущей программой адрес сравнивается с
адресами в регистрах dr0...dr3, и при совпадении генерируется
исключение отладки с номером 1.
Регистр dr6 называется регистром состояния отладки. Биты этого регистра устанавливаются в соответствии с причинами,
которые вызвали возникновение последнего исключения с номером 1.
Регистр dr7 называется регистром управления отладкой. В
нем для каждого из четырех регистров контрольных точек отладки имеются поля, с помощью которых можно уточнить следующие условия, при которых следует сгенерировать прерывание:
– место регистрации контрольной точки — только в текущей
задаче или в любой задаче;
– тип доступа, по которому инициируется прерывание: только при выборке команды, при записи или при записи/чтении
данных.
102

103
2.3. Режимы функционирования
процессора Intel x86
2.3.1. Перечень режимов функционирования
процессора Intel x86
Режимы работы процессора. Процессоры семейства Intel
х86, начиная с 80286, имеют несколько режимов работы:
– Реальный режим. Предназначен для совместимости с
младшими моделями процессоров.
– Защищенный режим. Основной режим работы процессоров.
Именно в нем доступны все особенности новых моделей процессоров, такие, как многозадачность, защита программ пользователей, возможность работы с большим объемом памяти, виртуальная память и
– Режим системного управления (SMM). В этом режиме доступны дополнительные возможности процессора.
– Режим Virtual-86. Этот режим схож с реальным режимом,
однако может быть включен только в защищенном режиме. В
этом режиме возможно выполнение нескольких приложений
реального режима.
т.д.
2.3.2. Реальный режим работы
процессоров Intel x86
После рестарта процессор находится в реальном режиме.
Именно в реальном режиме функционирует базовая система
ввода/вывода, загрузчики операционных систем, а также и некоторые операционные системы, например MS DOS.
Адресация ячеек памяти в реальном режиме. В реаль-
ном режиме адрес имеет размер 20 бит и, следовательно, максимальный объем адресуемой памяти составляет 1 Мб. Для формирования 20-битового адреса в памяти используются два 16битовых регистра: сегментный регистр и регистр смещения
(рис. 2.3).
Сегментный регистр определяет базовый адрес сегмента.
В нем содержатся старшие 16 бит базового адреса сегмента,
младшие четыре бита предполагаются равными 0. В регистре

смещения находится смещение внутри сегмента (относительно
базового адреса сегмента). Смещение может также задаваться
непосредственной константой. Смещение добавляется к базовому адресу сегмента, и, таким образом, получается 20-битовый
адрес в памяти. Более просто можно описать вычисление следующим образом — 16-битовое значение сегментного регистра
сдвигается на 4 бита влево и к нему добавляется значение смещения, в результате получается 20-битовое значение. Именно
такая схема применялась в 8086 и 8088 процессорах.
104
Рис. 2.3. Преобразование логического адреса
в физический адрес в реальном режиме
Такое представление 20-битного адреса двумя 16битными числами в процессорах 8086/88 поддерживается и в
реальном режиме всех последующих процессоров х86.
Например, адрес начала области данных BIOS (Base Input
Output System) 00400h представляют как 0000:0400, так и
0040:0000 (шестнадцатеричное представление подразумевается).
Возможны и другие варианты, но их не используют.

Распределение оперативной памяти в MS DOS. Согласно сегментной модели исполнительный (линейный) адрес вычисляется по формуле, приведенной на рис. 2.3. Таким образом,
обеспечивался доступ к адресному пространству Addr = 00000
— FFFFFh при помощи пары 16-битных регистров.
Заметим, что при Seg = 0FFFFh и Offset = 0FFFFh данная
формула дает адрес 10FFEFh, но ввиду 20-битного ограничения
на шину адреса эта комбинация в физической памяти указывает
на 0FFEFh. Таким образом, адресное пространство как бы сворачивается в кольцо с небольшим «нахлестом». Начиная с процессора 80286, шина адреса была расширена до 24 бит, а впоследствии (в процессорах 386DX, 486 и выше) до 32 бит и даже
36 бит. В реальном режиме процессора, используемом в DOS,
применяется та же сегментная модель памяти, и формально был
доступен лишь 1 Мбайт памяти. Однако выяснилось, что процессоры 80286 в реальном режиме эмулируют 8086 с ошибкой:
та самая единица в бите А20, которая отбрасывалась в процессорах 8086/88, теперь попадает на шину адреса, и в результате максимально доступный линейный адрес в реальном режиме
достиг 10FFEFh. Дополнительные байты оперативной памяти
(64Кб — 16 б), адресуемой в реальном режиме, позволили освободить дефицитное пространство оперативной памяти для прикладных программ. В эту область (100000h — 10FFEFh), названную высокой памятью HMA (High Memory Area), стали
помещать часть операционной системы и небольшие резидентные программы.
Распределение памяти PC, непосредственно адресуемой
процессором, представляется следующим образом [15] (рис.
2.4):
– 00000h-9FFFFh — стандартная (базовая) память
(Conventional (Base) Memory) объемом 640 Кбайт — доступная
DOS и программам реального режима. В некоторых системах с
видеоадаптером MDA верхняя граница сдвигается к AFFFFh
(704 Кбайт). Иногда верхние 128 Кбайт стандартной памяти (область 80000h-9FFFFh) называют Extended Conventional Memory.
– A0000h-FFFFFh — верхняя память UMA (Upper Memory
Area) объемом 384 Кбайт, зарезервированная для системных
нужд. В ней размещаются области буферной памяти адаптеров
105

106
(например, видеопамять) и постоянная память (BIOS с расшире-
ниями). Эта область, обычно используемая не в полном объеме,
ставит непреодолимый архитектурный барьер на пути непрерывной (нефрагментированной) памяти, о которой мечтают программисты.
– Память выше 100000h — дополнительная (расширенная)
память Extended Memory, непосредственно доступная только в
защищенном режиме для компьютеров с процессорами i286 и
выше. В ней выделяется область 100000h-10FFEFh — высокая
память НМА.
16 M
16 M
15 M
15 M
1 M
1 M
640 K
640 K
(B IO S)
(B IO S)
XMS - EMS
HMA
BIOS
UMA
Conventional M em ory
0
0
100000 - 10FFEF
100000 - 10FFEF
FFFFFF
FFFFFF
F0000 - FFFFF
F0000 - FFFFF
A0000
A0000
9FFFF
9FFFF
00000
00000
Рис. 2.4. Распределение памяти в MS DOS
Стандартная память — Conventional memory. При работе в среде операционных систем типа MS DOS стандартная
память является самой дефицитной в PC. На ее небольшой объем (типовое значение 640 Кбайт) претендуют и BIOS, и ОС реального режима, а оставшаяся часть предназначена для прикладного ПО. Стандартная память распределяется следующим
образом [15]:

– 00000h-003FFh — Interrupt Vectors — векторы прерываний
(256 двойных слов);
– 00400h-004FFh — BIOS Data Area — область переменных
BIOS;
– 00500h-00xxxh — DOS Area — область DOS;
– 00xxxh-9FFFFh — User RAM — память, предоставляемая
пользователю (до 638 Кбайт); при использовании PS/2 Mouse
область 9FC00h-9FFFFh используется как расширение BIOS Data Area и размер User RAM уменьшается.
В процессорах семейства Intel предусмотрено 256 прерываний и соответственно 256 векторов прерываний. Все вектора
прерываний объединяются в таблицу, состоящую из 256 4байтовых элементов и занимающую 1 Кб. В реальном режиме
эта таблица находится в самом начале памяти по адресу
0000:0000 или просто по 0-му физическому адресу.
Каждый элемент таблицы состоит из двух полей. Первые
два байта представляют собой значение, заносимое в регистр IP,
последние два байта содержат значение, заносимое в регистр
CS.
Управление пользовательской памятью осуществляется с
использованием специализированных структур: таблицы таблиц
— list of list (таблица 2.2) и управляющих блоков памяти —
memory control block (таблица 2.3). Данные структуры являются
недокументированными.
Смещение Длина Содержимое
-2 2 Сегментный адрес первого блока управ-
ления памятью MCB (memory control
block)
0 4 Указатель на первый DPB (disk parameter
blockout)
+ 4 4 Указатель на список таблиц открытых
файлов
+ 8 4 Указатель на первый драйвер DOS
(CLOCK$)
… … …
107
Таблица 2.2. Структура таблицы таблиц

108
Таблица 2.3. Структура блока управления памятью
Смещение Длина Содержимое
+0 1 Тип блока:
'M' (4dH) — за этим блоком есть еще бло-
ки
'Z' (5aH) — данный блок является послед-
ним
+1 2 Владелец, параграф владельца (для
FreeMem); 0 = владеет собой
+3 2 Размер, число параграфов в этом блоке
распределения (1 параграф = 16 байт =
10h байт)
+5 0Bh Зарезервировано
+10h ? Блок памяти начинается здесь и имеет
длину (Размер*10h) байт
ЗАМЕЧАНИЯ:
– блоки памяти всегда выровнены на границу параграфа
(«сегмент блока»);
– блоки M-типа: следующий блок находится по адресу (Сег-
ментный адрес блока + Размер + 1):0000;
– блоки Z-типа: (Сегментный адрес блока + Размер + 1):0000
= конец памяти (a000H=640K).
– +1 при вычислении адреса следующего блока — это шапка
блока, равная 16 байтам или 10h (см. таблицу 2.3).
В любом MCB указан его владелец — сегментный адрес
префикса программного сегмента — PSP программы владельца
данного блока памяти. А в PSP есть ссылка на окружение данной программы, в котором можно найти имя программы — путь
ее запуска.
Следует помнить, что сама программа (и PSP в том числе)
и ее окружение сами располагаются в блоках памяти. Поэтому в
MCB блока памяти самой программы в качестве хозяина указан
собственный адрес самого себя.
Когда программа в реальном режиме начинает выполнение, DS:0000 и ES:0000 указывают на начало PSP этой програм-

мы. Информация PSP позволяет выделить имена файлов и опции из строки команд, узнать объем доступной памяти, определить окружение и т.д.
Более подробную информацию о структурах памяти можно получить из электронного справочника TECH Help!
Верхняя память — UMA (Upper Memory Area)
Верхняя память имеет области различного назначения, которые могут быть заполнены буферной памятью адаптеров, постоянной памятью или оставаться незаполненными. Первоначально эти «дыры» не использовали из-за сложности «фигурного выпиливания» адресуемого пространства. С появлением механизма страничной переадресации (у процессоров 386 и выше)
их стали по возможности заполнять «островками» оперативной
памяти, названными блоками верхней памяти UMB (Upper
Memory Block). Эти области доступны DOS для размещения резидентных программ и драйверов через драйвер EMM386, который отображает в них доступную дополнительную память.
Стандартное распределение верхней памяти выглядит следующим образом [15]:
– A0000h-BFFFFh — Video RAM (128 Кбайт) — видеопамять
(обычно используется не полностью);
– C0000h-DFFFFh — Adapter ROM, Adapter RAM (128 Кбайт)
— резерв для адаптеров, использующих собственные модули
ROM BIOS или/и специальное ОЗУ, совместно используемое с
системной шиной;
– E0000h-EFFFFh — свободная область (64 Кбайт), иногда
занятая под System BIOS;
– F0000h-FFFFFh — System BIOS (64 Кбайт) — системная
BIOS;
– FD000h-FDFFFh — ESCD (Extended System Configuration
Data) — область энергонезависимой памяти, используемая для
конфигурирования устройств Plug and Play. Эта область имеется
только при наличии PnP BIOS, ее положение и размер жестко не
заданы.
В области UMA практически всегда присутствует графический адаптер. В зависимости от модели он может занимать
разные адресные пространства.
109

Теневая память — Shadow ROM и Shadow RAM
В области верхней памяти UMA обычно располагаются
устройства с медленной памятью [15]:
– системная BIOS (System ROM BIOS);
– расширения BIOS на графическом адаптере (Video ROM
BIOS), на контроллерах дисков и интерфейсов (Adapter ROM);
– ПЗУ начальной загрузки на сетевой карте (Boot ROM);
– видеопамять (Video Memory Buffer).
Они, как правило, реализованы на 8- или 16-битных микросхемах с довольно большим временем доступа. Обращение к
полноразрядному системному ОЗУ выполняется гораздо быстрее. Для ускорения обращений к памяти этих устройств применяется теневая память (Shadow Memory), подменяющая память
устройств системным ОЗУ. Теневая память появилась на развитых моделях i286, где она была реализована аппаратно. Процессоры класса i386+ позволяют ее реализовать программно, с помощью страничной переадресации. Затенение ОЗУ и ПЗУ устройств выполняется по-разному.
При инициализации теневого ПЗУ (Shadow ROM) содержимое затеняемой области копируется в ОЗУ, и при дальнейшем чтении по этим адресам подставляется ОЗУ, а запись в эту
область блокируется.
При использовании теневого ОЗУ (Shadow RAM) запись
производится одновременно в физическую память затеняемой
области и в системное ОЗУ, наложенное на эту область. При
чтении затененной области обращение идет только к системной
памяти, что происходит достаточно быстро. Особенно велик
эффект от затенения видеопамяти старых графических адаптеров, которая по чтению бывает доступна только во время обратного хода развертки, и процессору приходится долго ждать этого момента. Однако затенение областей разделяемой памяти,
модифицируемых со стороны адаптеров, недопустимо: эти изменения не будут восприняты процессором. К разделяемой памяти относится буферная память сетевых адаптеров, видеопамять адаптеров с графическими сопроцессорами (акселераторами). Из этого следует, что затенение видеопамяти применимо
только к примитивным графическим картам, устанавливаемым в
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
