Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы. Часть 2. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
страницу, осуществляет ее подкачку в память и возобновляет нормальную работу программы.
Регистр 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 Da­ta 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