программам, поскольку оперировать с ними могут только
привилегированные команды. (Особые случаи, страничные ошибки и
привилегированные команды рассматриваются далее в этой главе).

47 15 0
+-----------------------------+
| БАЗОВЫЙ АДРЕС | ПР. РАЗМЕР | ГЛОБАЛЬНАЯ ТАБЛИЦА
+----------------+------------+ ДЕСКРИПТОРОВ
| | | ТАБЛИЦА ДЕСКРИПТОРОВ
+-----------+----------------+------------+ ПРЕРЫВАНИЙ
| СЕЛЕКТОР | | | ЛОКАЛЬНАЯ ТАБЛИЦА
L-----------+----------------+------------- ДЕСКРИПТОРОВ
+-----------------------------------------+
СИСТЕМНЫЕ АДРЕСНЫЕ РЕГИСТРЫ

31 0
+-------------------------+
| | ВСПОМОГАТЕЛЬНЫЙ
+-------------------------|
| | РЕЗЕРВНЫЙ
+-------------------------|
| | ЛИНЕЙНЫЙ АДРЕС СТР. ОШИБКИ
+-------------------------|
| | БАЗОВЫЙ АДРЕС СПРАВОЧНИКА
| | СТРАНИЦ
+-------------------------+
СИСТЕМНЫЕ УПРАВЛЯЮЩИЕ РЕГИСТРЫ

3.2Обеспечение многозадачных операционных систем
Многие свойства системной архитектуры 80386 непосредственно
обеспечивают многозадачные операционные системы, хотя, конечно,
80386 может быть использован и в однозадачных системах с
повышенными требованиями. Многозадачная работа представляет собой
способ управления работой вычислительной системой в тех случаях,
когда работа системы состоит из нескольких видов деятельности;
тремя видами деятельности могут быть например, редактирование
одного файла, компиляция другого и передача третьего файла в
другую машину.
В многозадачной системе каждый вид деятельности, который может
осуществляться одновременно с другими, называется задачей. (В
данном материале термин "задача " эквивалентен термину "процесс").
Каждая задача выполняет программу, состоящую из команд и исходных
данных. Одна и та же программа может выполнятся несколькими
задачами; например, в многозадачной системе с разделением времени
несколько задач (по числу пользователей) могут использоваться
одним и тем же компилятором или редактором. Программы и задачи
соотносятся друг с другом подобно партитуре музыкального
произведения и его исполнению: программа - это текст, описывающий
алгоритм, а задача - это однократное исполнение этого алгоритма.
Программы, выполняемые задачами. Составлены так, как если бы
они выполнялись на отдельных процессорах с общей памятью, т.е.
Используя паузы, необходимые для связи или синхронизации с другими
задачами, теоретически каждая задача выполняется непрерывно
параллельно с другими задачами. На самом деле , однако, задачи
выполняются поочередно одним процессором.
Многозадачная операционная система моделирует несколько
процессоров, предоставляя каждой задаче "виртуальный процессор". В
каждый момент времени операционная система передает реальный
процессор одному из виртуальных процессоров, выполняющему свою
задачу. Для поддерживания впечатления, что каждая задача имеет
свой процессор, операционная система часто переключает реальный
процессор на различные виртуальные процессоры. В системной
архитектуре 80386 для операции смены задачи предусмотрены сегменты
состояния задачи и команды, выполняющие эту операцию.
3.2.1 Сегмент состояния задачи
Сегмент состояния задачи (TSS) является одной из нескольких
структур данных, определяемых системной архитектурой 80386.
Фактически, эти структуры данных являются "типами данных" для
операционных систем. Сегмент TSS(см.Рис.3-2) Соответствует тому,
что в некоторых операционных системах называется блоком управления
задачей; в этом сегменте хранится состояние виртуального
процессора задачи. Каждая задача 80386 представлена своим TSS,
который делится на две части. Младшая часть TSS определена
системной архитектурой 80386 и содержит значения регистров
процессора. Старшая часть TSS может быть определена операционной
a(ab%,.) для хранения данных, связанных с задачей, например,
приоритета выполнения, дескрипторов файлов и т.д. Для создания
своей задачи операционная система формирует TSS и инициализирует
его величинами, необходимыми задаче для начала ее выполнения. В
результате 80386 поддерживает младшую часть TSS, а за его старшую
часть несет ответственность операционная система.

+--------------------------------------+
| (ОПРЕДЕЛЕННАЯ ОПЕРАЦИОННАЯ СИСТЕМА) |
. .
+--------------------------------------|
| АДРЕС ЛОКАЛЬНОЙ ТАБЛИЦЫ ДЕСКРИПТОРОВ |
+--------------------------------------|
| СПРАВОЧНЫЙ АДРЕС СТРАНИЧНОЙ ТАБЛИЦЫ |
+--------------------------------------|
| ОБЩИЕ РЕГИСТРЫ |
. .
+--------------------------------------|
| РЕГИСТР ФЛАГОВ |
+--------------------------------------|
+--------------------------------------|
| СЕГМЕНТНЫЕ РЕГИСТРЫ |
. .
+--------------------------------------|
| ПРИВИЛЕГИРОВАННЫЕ |
. .
+--------------------------------------+
3.2.2 Смена задачи
Операционная система разрешает выполнение ??????? в
соответствии с планом. Этот план устанавливает время выполнения
задач. Поскольку методы планирования ???????? различные, 80386
предоставляет это операционной системе. ???? Когда операционная
система решает начать выполнение ????? задачи, она направляет
процессор на выполнение еще одного ?????, иногда называемого
сменой контекста. Процессор 80386 хранит селектор и дескриптор
????? текущей задачи в своем регистре задачи ?????? операционная
система выдает команду перехода ???????? является селектор
сегмента TSS новой задачи ?????? эту команду, занося вначале свои
регистры в текущий TSS, а затем загружая TR селектором (и
связанным с ним дескриптором), указанным в команде. Получив адрес
нового TSS, процессор загружает свои регистры величинами из нового
TSS. После чего выполнение программы продолжается с команды, на
которую указывает счетчик команд новой задачи. Для возобновления
старой задачи операционная система должна выдать команду перехода
и TSS старой задачи, после этого выполнение старой задачи
продолжается с командой, следующей после команды перехода TSS,
прекратившей ее выполнение. Такая смена задачи занимает 17 мкс
(при рабочей частоте 16 Мгц и отсутствии состояний ожидания).
3.3Адресация
Физическое адресное пространство большинства вычислительных
машин организовано просто как массив байтов. С появления блоков
управления памятью (БУП), архитектура машин стала различать
физическое адресное пространство, реализуемое, аппаратурой памяти
и логическое адресное пространство, видимое программистом. Блок
управления памятью транслирует логические адреса программ в
физические адреса, выдаваемые на
системную магистраль. В большинстве архитектур логическое адресное
пространство задачи представляется как набор следующих вариантов:


Логическое адресное пространство состоит из
массива байтов, не имеющего определенной
БАЙТЫ структуры (такое адресное пространство иногда
называется "плоским" или "линейным").
Трансляция адреса в этом случае не требуется,
поскольку логический адрес точно эквивалентен
физическому.

Логическое адресное пространство состоит из
нескольких или большого числа сегментов,
СЕГМЕНТ каждый из которых содержит переменное число
байтов. Логический адрес разделен на две
части, номера сегмента и смещения внутри
сегмента. Буп производит трансляцию
логического адреса в физический.

Логическое адресное пространство состоит из
большого числа страниц, каждая из которых
СТРАНИЦЫ включает в себя фиксированное число байтов.
Логический адрес состоит из номера страницы и
смещения внутри страницы. Буп производит
трансляцию логического адреса в физический.

СТРАНИЧНЫЕ Логическое адресное пространство состоит из
сегментов

Сегменты в свою очередь, состоят из страниц.
СЕГМЕНТЫ Логический адрес состоит из номера сегмента и
смещения внутри сегмента. Буп производит
трансляцию логического адреса в номер страницы
и смещение в ней, которые затем транслируются
в физический адрес.
Каждый из этих вариантов хорошо подходит для одних систем и
мало пригоден для других. Например, линейное пространство вполне
подходит для систем с простыми ветвлениями, в то время как для
систем, которые выполняют индивидуальное управление и защиту
отдельных программных структур, больше подходит вариант с
сегментацией памяти. В 80386 реализован вариант, представляющий
память как набор сегментов, которые по желанию могут быть
разделены на страницы. На практике архитектура 80386 обеспечивает
операционные системы любым из четырех вариантов представления
памяти.
3.3.1 Принцип трансляции адреса
Принцип трансляции логического адреса в физический в
процессоре 80386 иллюстрируется на рис.3-3. Последовательность
операций, показанная на рис.3-3, является центральной как для
адресации, так и для защиты. Здесь она рассматривается в
схематичной форме с целью дать ясное общее представление о ней
прежде, чем перейти к рассмотрению таких свойств, как виртуальная
память и защита. В последующих разделах будут подробно рассмотрены
различные этапы трансляции адреса и будет показано, как они могут
быть приспособлены под требования конкретной системы.
Как показано в предыдущей главе, способы адресации памяти
80386 дают 32-битное смещение искомого операнда. Совместно с
селектором сегмента это смещение образует составной логический
адрес: селектор этого адреса идентифицирует искомый сегмент, а
смещение указывает на операнд в сегменте. В большинстве команд
селектор задается неявно как содержимое сегментного регистра.



+--------------+
| ТАБЛИЦЫ |
| ДЕСКРИПТОРОВ |
+--------------+
ЛОГИЧЕСКИЙ АДРЕС ---------+-+ ЛИНЕЙНЫЙ АДРЕС
+-----------------+ | | +--------+ +--+
|СЕЛЕКТОР|СМЕЩЕНИЕ+->|ТРАНСЛЯЦИЯ+--->| +--+ +----T-+
L--------+--------- | СЕГМЕНТА | L--------- L--- | |
47 31 0 L----------- 31 0 ЗАПРЕТ | |
СТРАНИЦ | |
+-------------------------------------------+ |
| +--------------+
| +-----------+ | 31
0
| | ТАБЛИЦЫ | |--------------------+
| | СТРАНИЦ | +--+ ФИЗИЧЕСКИЙ АДРЕС|
| +-----------+ |-+------------------+
| |+--------------------------+
31 | 0 | 31 0 |
+----------------+ +---------------------++------------------+|
| ЛИНЕЙНЫЙ АДРЕС +-->| ТРАНСЛЯЦИЯ СТРАНИЦЫ +-->|ФИЗИЧЕСКИЙ АДРЕС+--
+----------------+ +---------------------++------------------+

Селектор представляет собой индекс в таблице дескрипторов
сегментов, т.е. это поле содержит номер сегмента. Каждый элемент
таблицы дескрипторов сегментов содержит базовый адрес сегмента.
Процессор добавляет к нему смещение и получает 32-битный линейный
адрес. Если страницы не разрешены, процессор считает, что линейный
адрес является физическим, и выдает его на адресные выводы.
Если страницы разрешены, то 80386 транслирует линейный адрес в
физический. Это делается с помощью страничных таблиц. Страничная
таблица по своей организации аналогична таблице дескрипторов, за
исключением того, что каждый элемент страничной таблицы содержит
физический базовый адрес страницы 4кбайт. Поскольку способы
адресации 80386 охватывают как традиционные элементы структурного
деления адресного пространства (сегменты, и дополнительно,
страницы) и поскольку сегменты могут быть очень большими (до 4
Гбайт), то эти способы адресации оказываются очень гибкими. Таким
образом, операционная система может дать задаче одно линейное
адресное пространство, линейное адресное пространство из страниц,
адресное пространство из сегментов или сегментированное адресное
пространство со страничным делением.
По всей своей гибкости многоступенчатая трансляция адреса в
80386 выполняется достаточно быстро. Типичное время вычисления
смещения и трансляции логического адреса в физический составляет
1,5 такта. Более того, время трансляции адреса незаметно для
программы, поскольку внутренний БУП 80386 транслирует адрес
параллельно с другими операциями процессора (кроме случаев, когда
команды перехода или вызова временно прерывают совмещенное
выполнение операций).
3.3.2 Сегменты
Сегмент является единицей логического пространства,
представляемого процессором задаче, т.е. логическое адресное
пространство задачи состоит из одного или нескольких сегментов.
Операционные системы существенно отличаются друг от друга по
способу определения логического адресного пространства задачи.
Например, система реального времени с ветвлениями может определить
логическое адресное пространство как единое целое, совместно
используемое всеми задачами и самой операционной системой, другими
словами один сегмент коллективно используется всей системой. В
другом крайнем случае система может распределить каждую структуру
данных и процедуру по своим сегментам, в следствии чего логическое
адресное пространство задачи предстанет в виде десятков или сотен
адресных пространств, каждое из которых будет соответствовать
своей структуре данных или процедуре. Между этими крайними
случаями оказывается универсальная система с разделением времени,
в которой задачи выполняются в отдельных логических адресных
пространствах, и в которых программы задач отделены от их данных,
а прикладные программы и данные отделены от программы и данных
операционной системы. Свойство сегментации в процессоре 80386
достаточно гибкое, и может обеспечить каждый из этих примеров, как
и любые другие.
Как уже было показано в главе 2, команда 80386 ссылается на
операнд в памяти с помощью составного логического адреса,
a.ab.oi%#. из селектора сегмента и смещения внутри сегмента. В
принципе 80386 транслирует логический адрес в линейный с помощью
селектора, указывающего на дескриптор сегмента в таблице
дескрипторов. Дескриптор содержит базовый адрес сегмента в
линейном адресном пространстве, добавление смещения к базовому
адресу дает линейный адрес операнда. На практике трансляция
логического адреса в линейный оптимизирована с помощью неявного
указания на селекторы и хранения дескрипторов в регистрах. Поэтому
обращение к таблице дескрипторов производится только для тех
команд, которые загружают новые селекторы в сегментные регистры
(например, вызов процедуры из другого сегмента приводит к замене
селектора в регистре CS). Хотя на практике это бывает редко, тем
не менее удобнее представлять трансляцию процессором логического
адреса как обращение к дескрипторам в таблицах дескрипторов
сегментов, поскольку отсюда следует, что именно дескрипторы в
таблицах дескрипторов сегментов задачи определяют логическое
адресное пространство задачи. Без дескриптора задача не в
состоянии сгенерировать линейные адреса.
Таблица дескрипторов сегментов представляет собой массив
дескрипторов, на рис.3-4 дан логический формат дескриптора. Поле
базового адреса уже рассматривалось выше. Поле предельного размера
определяет длину сегмента, 80386 использует поле предельного
размера для проверки правильности величины смещения в логическом
адресе, а именно, что оно попадает внутрь сегмента. Атрибуты
сегмента, в основном, относятся к защите и будут рассмотрены далее
в этой главе.

АТРИБУТЫ
ПРИЗНАК ПОСЛЕДНЕГО ОБРАЩЕНИЯ ---------------------+
ПРАВА -----------------------------------------+ |
ТИП ----------------------------------------+ | |
ПРИВИЛЕГИЯ ------------------------------+ | | |
ПРИЗНАК ПРИСУТСТВИЯ ------------------+ | | | |
| | | | |
+--------------+
| | | | | |
+------------------------------|
| ПРЕДЕЛЬНЫЙ РАЗМЕР |
+------------------------------|
| БАЗОВЫЙ АДРЕС |
+------------------------------+

Каждая задача может иметь системное и индивидуальное
логическое адресное пространство. Эти пространства описываются,
соответственно глобальной таблицей дескрипторов (GDT) и локальной
таблицей дескрипторов (LTD). (В селекторе имеется
бит, связывающий его с той или иной таблицей). Эти таблицы
дескрипторов могут содержать максимум 8192 дескриптора и совместно
они определяют логическое адресное пространство задачи. Это
означает, что для того, чтобы новый сегмент мог адресоваться
задачей, операционная система должна внести новый дескриптор этого
сегмента либо в GDT, либо в LDT задачи. В системах с защитой GDT и
LDT могут быть сделаны привилегированными структурами так, что
изменения в них сможет производить только операционная система.
Операционная система из ее названия, глобальная таблица
дескрипторов доступна всем задачам, обычно операционные системы
заносят дескрипторы системных сегментов в GDT. Кодовый сегмент
(или сегменты) операционной системы является хорошим примером
сегмента, который должен быть доступным всем задачам, и дескриптор
которого обычно находится в GDT. В противоположность этому каждая
' $ g может иметь свою локальную таблицу дескрипторов. Процессор
поддерживает адрес LDT текущей задачи в своем регистре локальной
таблицы дескрипторов (LDTR), однако он перезагружает этот регистр
(так же, как он перезагружает свои общие и сегментный регистры)
новым значением TSS при смене задач.
Задачи могут делить одни сегменты в следующих случаях
(см. рис.3-5):

1. Сегмент, дескриптор которого находится в GDT, является общим
для всех задач.

2. Задачи, имеющие общую LDT, имеют и общие сегменты,
описываемые этой LDT, такой подход допустим в случае тесно
взаимодействующих задач.

3. Дескрипторы в различных LDT могут указывать на один и тот же
сегмент, такие дескрипторы называются псевдоименами. Использование
псевдоимени позволяет задачам иметь общим только один сегмент,
а не все сегменты, определенные таблицей дескрипторов.
3.3.3 Страницы
Независимо от того, содержит ли логическое адресное
пространство задачи один или много сегментов, операционная система
может разделить линейное адресное пространство на страницы. С
точки зрения операционной системы страницы являются удобными
элементами для распределения и перераспределения памяти, поскольку
они все имеют одинаковый размер. Страницы также являются средством
защиты частей больших сегментов и, что особенно важно,
обеспечивают удобный способ организации виртуальной памяти.
Указанные применения страничной организации памяти обсуждаются
ниже.
Страница в 80386 имеет длину 4к байт. Этот размер находится в
согласии с промышленной тенденцией к увеличению длины страниц и
ведет к увеличению производительности по двум направлениям.
Во-первых, он обеспечивает хорошее отношение показаний страниц
в кэш при данном объеме кэш-памяти, которая может быть в настоящее
время реально размещена на кристалле, исходя из достигнутого
уровня технологии. (Кэш-память 80386, расположенная на кристалле,
описывается кратко). Во-вторых, 4к байтов являются эффективным
размером блока для дисковых передач. Большинство операционных
систем, работающих на машинах с меньшей длиной страницы, должны
группировать страницы в "кластеры", чтобы сократить количество
дисковых передач.
Операционная система 80386 включает страничный механизм,
устанавливая бит PG в управляющем регистре 0 при помощи
привилегированной команды. Когда страничный механизм включен,
процессор транслирует линейный адрес в физический адрес, используя
страничные таблицы. Страничные таблицы являются частью таблиц
дескрипторов сегментов. Так же как таблицы дескрипторов сегментов
задачи определяют ее логическое адресное пространство, страничные
таблицы задачи определяют ее линейное адресное пространство.
Аналогично супермини-ЭВМ и большим ЭВМ страничные таблицы 80386
организованы по принципу
двухуровневой иерархии, как показано на рис.3-6. Каждая задача
может иметь справочник системных таблиц. Системный регистр CR3
процессора 80386 (база справочника системных таблиц) указывает на
справочник страничных таблиц работающей задачи. Процессор
обновляет регистр CR3 при каждом переключении задачи, получая
новый адрес задачи из TSS новой задачи. Справочник страничных
таблиц имеет длину, равную одной странице и содержит элементы
ab` -(g-.) таблицы описывают 1024 страницы. Таким образом, каждая
страничная таблица описывает 4м байта, а оглавление может описать
до 4г байт - максимальное адресное пространство.
На рис.3-6 в функциональных обозначениях показано как 80386
транслирует линейный адрес в физический адрес, если страничная
адресация включена. Процессор использует старшие 10 бит линейного
адреса как индекс в оглавлении. Выбранный элемент оглавления
содержит адрес страничной таблицы. Процессор добавляет средние 10
бит линейного адреса к адресу страничной таблицы, чтобы найти
элемент страничной таблицы, который описывает необходимую
страницу. Добавляя младшие 12 бит линейного адреса к адресу начала
страницы, процессор получает 32-битный физический адрес.
Для того, чтобы сократить накладные расходы, возникшие от
поиска в страничных таблицах, 80386 помещает справочную информацию
о 32-х последних страницах, использовавшихся им, в специальную
быструю память (кэш), находящуюся внутри самого микропроцессора.
Эта память называется перекодированным буфером просмотра
исключений (TLB). Только в том случае, если процессор не находит
справочной информации для страницы в TLB, он обращается к
справочникам и страничным таблицам, находящимся в памяти. Как
правило, 98-99% адресных ссылок попадают в TLB, не требуя
обращений к основной памяти для трансляции. Когда необходимой
информации в TLB не оказывается, процессор заменяет наиболее
старый элемент TLB новым элементом. Принцип локальности ссылок
предполагает, что новый элемент скорее всего будет использоваться
в будущем.
Поскольку включение страничного механизма не увеличивает
времени трансляции адреса, оно мало влияет на время исполнения
команды только при непопаданиях в TLB. На рис.3-7 показаны
основные поля элемента страничной таблицы (PTE). Элементы
справочника страничных таблиц идентичны показанному за тем
исключением, что поле адреса рассматривается как физический адрес
страничной таблицы, а не адрес страницы.

АТРИБУТЫ
ПРИСУТСТВИЕ -------------------------------------+
ПРАВА ---------------------------------------+ |
ПРИВИЛЕГИИ ------------------------------+ | |
БЫЛО ОБРАЩЕНИЕ ----------------------+ | | |
БЫЛА ЗАПИСЬ ---------------------+ | | | |
ОПРЕДЕЛЯЕТСЯ ПОЛЬЗОВАТЕЛЕМ --+ | | | | |
| | | | | |
+-----------------------------------------------------------+
| АДРЕС СТРАНИЦЫ | | | | | | |
+-----------------------------------------------------------+

Задачи могут совместно пользоваться отдельными страницами или
целыми страничными таблицами. Элементы 1 различных страничных
таблиц, указывающие на одну и ту же страницу , являются синонимами
один для другого, также как дескрипторы с теми же самыми адресами
являются синонимами друг для друга. В двух уровневой структуре
страничных таблиц процессора 80786 легче разделять страницы между
задачами путем разделения целой страничной таблицы. Поскольку
адрес разделяемой страницы в этом случае находится в одной
страничной таблице, операционной системы необходимо изменить
только один элемент страничной таблицы, когда она перемещает эту
страницу.
3.3.4 Виртуальная память
Виртуальная память позволяет очень большим программам или
#`c// , работать в значительно меньшем объеме физической памяти
без использования техники оверлеев. Системы с виртуальной могут
основываться или на сегментах, или на страницах. В обоих случаях
основная идея виртуальной памяти состоит в том, чтобы использовать
значительно более дешевую дисковую память вместо полупроводниковой
памяти. Операционная система в случае с виртуальной памятью
запоминает все сегменты или страницы в большой области дисковой
памяти, называемой часто "областью обмена". Значительно меньшая
физическая (реальная) память содержит только наиболее часто
используемые сегменты или страницы. До тех пор, пока сегменты или
страницы запомненные на диске, используются нечасто, система с
виртуальной памятью будет вести себя также хорошо, как и система
со значительно большей оперативной памятью, но за значительно
меньшую цену. Ключевые архитектурные свойства, необходимые для
эффективного использования виртуальной памяти, перечисляются ниже:

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

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