На главную страницу
Форум txt.version   




Статья :: Сегмент состояния задачи
     3.2.1. Сегмент состояния задачи
     
     Сегмент состояния задачи (TSS) является  одной  из  нес-
кольких структур данных, определяемых системоной архитектурой
80386. Фактически, эти структуры данных являются "типами дан-
ных"  для  операционных систем. Сегмент TSS(см.Рис.3-2) Соот-
ветствует тому, что в некоторых операционных системах называ-
ется блоком управления задачей; в этом сегменте хранится сос-
тояние виртуального процесора  задачи.  Каждая  задача  80386
представлена своим TSS, который делится на две части. Младшая
часть  TSS определена системной архитектурой 80386 и содержит
значения регистров процессора. Старшая часть TSS  может  быть
определена операционной системой для хранения данных, связан-
ных  с задачей, например, приоритета выполнения, дескрипторов
файлов и т.д. Дла создания своей задачи операционная  система
формирует  TSS  и инициализирует его величинами, необходимыми
задаче для начала ее выполнения. В результате 80386 поддержи-
вает младшую часть TSS, а за его старшую часть несет ответст-
венность операционная система.
     
           г=====================================¬
           ¦ (Определенная операционная          ¦
           .               система)              .
           ¦=====================================¦
           ¦ Адрес локальной табл.дескрипторов   ¦
           ¦=====================================¦
           ¦ Справочный адрес страничной табл.   ¦
           ¦=====================================¦
           ¦ Общие регистры                      ¦
           .                                     .
           ¦=====================================¦
           ¦ Регистр флагов                      ¦
           ¦=====================================¦
           ¦=====================================¦
           ¦ Сегментные регистры                 ¦
           .                                     .
           ¦=====================================¦
           ¦ Привилигированные                   ¦
           .                                     .
           L=====================================-
     
     
     3.2.2. Смена задачи
     
     Операционная система разрешет выполнение ??????? в соот-
ветствии с планом. Этот план устанавливает  время  выполнения
задач.  Поскольку  методы  планирования  ????????  различные,
80386 предоставляет это операционной системе. ???? Когда опе-
рационная система решает начать выполнение ????? задачи,  она
направляет  процессор  на выполнение еще одного ?????, иногда
называемого сменой контекста.
     Процессор 80386 хранит селектор и дескриптор ????? теку-
щей задачи в своем регистре задачи ?????? операционная систе-
ма выдает команду перехода ???????? является селектор сегмен-
та TSS новой задачи ?????? эту команду, занося  вначале  свои
регистры  в  текущий  TSS,  а затем загружая TR селектором (и
связанным с ним дескриптором), указанным в  команде.  Получив
адрес нового TSS, процессор загружает свои регистры величина-
ми из нового TSS. После чего выполнение программы продолжает-
ся с команды, на которую указывает счетчик команд новой зада-
чи. Для возобнавления старой задачи операционная система дол-
жна  выдать команду перехода и TSS старой задачи, после этого
выполнение старой задачи продолжается с  командой,  следующей
после команды перехода TSS, прекратившей ее выполнение. Такая
смена  задачи  занимает  17 мкс (при рабочей частоте 16 мгц и
отсутствии состояний ожидания).
     
     3.3. Адресация
     
     Физическое адресное  пространство  большинства  вычисли-
тельных  машин организовано просто как массив байтов. С появ-
ления блоков управления памятью (БУП), архитектура машин ста-
ла различать физическое адресное  пространство,  реализуемое,
аппаратурой  памяти и логическое адресное пространство, види-
мое программистом. Блок управления памятью транслирует  логи-
ческие  адреса  программ  в  физические адреса, выдаваемые на
системную магистраль. В большинстве архитектур логическое ад-
ресное пространство задачи представляется как набор следующих
вариантов:
     
     Байты          логическое адресное простарнство  состоит
                    из массива байтов, не имеющего определен-
                    ной структуры (такое адресное пространст-
                    во  иногда  называется "плоским" или "ли-
                    нейным"). Трансляция адреса в этом случае
                    не требуется, поскольку логический  адрес
                    точно эквивалентен физическому.
     Сегмент        логическое  адресное пространство состоит
                    из нескольких или большого числа  сегмен-
                    тов,  каждый из которых содержит перемен-
                    ное число байтов. Логический адрес разде-
                    лен  на  две  части,  номера  сегмента  и
                    сMещения  внутри сегмента. Буп производит
                    трансляцию логического адреса в  физичес-
                    кий.
     Страницы       логическое  адресное пространство состоит
                    из большого числа страниц, каждая из  ко-
                    торых включает в себя фиксированное число
                    байтов. Логический адрес состоит из номе-
                    ра  страницы  и смещения внутри страницы.
                    Буп производит трансляцию логического ад-
                    реса в физический.
     Страничные     логическое адресное пространство  состоит
                    из  сегментов,
     сегменты       которые  в свою очередь, состоят из стра-
                    ниц. Логический адрес состоит  из  номера
                    сегмента  и смещения внутри сегмента. Буп
                    производит трансляцию логического  адреса
                    в  номер страницы и смещение в ней, кото-
                    рые затем транслируются в физический  ад-
                    рес.
     Каждый  из этих вариантов хорошо подходит для одних сис-
тем и мало пригоден для других. Например, линейное пространс-
тво вполне подходит для систем с простыми ветвлениями,  в  то
время как для систем, которые выполняют индивидуальное управ-
ление  и защиту отдельных программных структур, больше подхо-
дит вариант с сегментацией памяти. В 80386  реализован  вари-
ант,  представляющий  память  как набор сегментов, которые по
желанию могут быть разделены на страницы. На  практике  архи-
тектура  80386 обеспечивает операционные сситемы любым из че-
тырех вариантов представления памяти.
     
     3.3.1. Принцип трансляции адреса
     
     Принцип трансляции логического  адреса  в  физический  в
процессоре  80386  иллюстрируется  на рис.3-3. Последователь-
ность операций, показанная на  рис.3-3, является  центральной
как для адресации, так и для защиты. Здесь она рассматривает-
ся в схематичной форме с целью дать ясное общее представление
о  ней  прежде, чем перейти к рассмотрению таких свойств, как
виртуальная память и защита.
     В последующих разделах будут подробно  рассмотрены  раз-
личные  этапы трансляции адреса и будет показано, как они мо-
гут быть приспособлены под требования конкретной системы.
     Как показано в предыдущей главе, способы адресации памя-
ти 80386 дают 32-битное смещение искомого операнда. Совместно
с селектором сегмента это смещение образует  составной  логи-
ческий  адрес:  селектор  этого  адреса идентифицируетискомый
сегмент, а смещение указывает на операнд в сегменте. В  боль-
шинстве  команд  селектор задается неявно как содержимое сег-
ментного регистра.

                        г============¬
                        ¦  Таблицы   ¦
                        ¦дескрипторов¦
                        L=====T======-
 логический адрес             ¦    линейный адрес
г========T========¬  г========¦=¬    г========¬  г==¬
¦селектор¦смещение¦=>¦трансляция¦===>¦        ¦==¦  ¦====T=¬
L========¦========-  ¦ сегмента ¦    L========-  L==-    ¦ ¦
47       31       0  L==========-    31       0   запрет ¦ ¦
                                                  страниц¦ ¦
             г===========================================- ¦
             ¦                              г==============-
             ¦            г===========¬     ¦  31          0
             ¦            ¦  таблицы  ¦     ¦  г===========¬
             ¦            ¦  страниц  ¦     >==¦ физ.адрес ¦
             ¦            L=====T=====-     ¦  L===========-
             ¦                  ¦           L==============¬
        31   ¦      0           ¦              31        0 ¦
        г====¦======¬    г======¦=====¬        г=========¬ ¦
        ¦           ¦===>¦            ¦=======>¦         ¦=-
        L===========-    L============-        L=========-
      линейный адрес   трансляция страницы   физический адрес
                                                    
                                                    
     Селектор представляет собой индекс в таблице  дескрипто-
ров  сегментов, т.е. это поле содержит номер сегмента. Каждый
элемент таблицы дескрипторов сегментов содержит базовый адрес
сегмента. Процессор добавляет  к  нему  смещение  и  получает
32-битный линейный адрес. Если страницы не разрешены, процес-
сор считает, что линейный адрес является физическим, и выдает
его на адрсные выводы.
     Если  страницы  разрешены, то 80386 транслирует линейный
адрес в физический. Это делается с помощью страничных таблиц.
Страничная таблица по своей  организации  аналогична  таблице
дескрипторов,  за  исключением того, что каждый элемент стра-
ничной таблицы содержит  физический  базовый  адрес  страницы
4кбайт.
     Поскольку  способы адресации 80386 охватывают как тради-
ционные элементы структурного деления адресного  пространства
(сегменты,  и  дополнительно,  страницы) и поскольку сегменты
могут быть очень большими (до 4 гбайт), то эти способы  адре-
сации  оказываются очень гибкими. Таким образом, операционная
система может дать задаче одно линейное адресное  пространст-
во, линейное адресное пространство из страниц, адресное прос-
транство из сегментов или сегментированное адресное простран-
ство со страничным делением.
     По всей своей гибкости многоступенчатая трансляция адре-
са  в 80386 выполняется достаточно быстро. Типичное время вы-
числения смещения и трансляции логического адреса в  физичес-
кий состовляет 1,5 такта. Более того, время трансляции адреса
незаметно для программы, поскольку внутренний БУП 80386 тран-
слирует  адрес  параллельно  с  другими операциями процессора
(кроме случаев, когда команды перехода  или  вызова  временно
прерывают совмещенное выполнение операций).
     
     3.3.2. Сегменты
     
     Сегмент   является  единицей  логического  пространства,
представляемого процессором задаче, т.е. логическое  адресное
пространство  задачи состоит из одного или нескольких сегмен-
тов. Операционные системы существенно отличаются друг от дру-
га по способу определения логического адресного  пространства
задачи. Например, система реального времени с ветвлениями мо-
жет  определить  логическое  адресное пространство как единое
целое, совместно используемое всеми задачами и самой операци-
онной системой, другими словами один сегмент коллективно  ис-
пользуется всей системой. В другом крайнем случае система мо-
жет распределить каждую структуру данных и процедуру по своим
сегментам,  вследствии  чего логическое адресное пространство
задачи предстанет в виде десятков или сотен  адресных  прост-
ранств,  каждое из которых будет соответствовать своей струк-
туре данных или процедуре. Между этими крайними случаями ока-
зывается универсальная система с разделением времени, в кото-
рой задачи выполняются в отдельных логических адресных прост-
ранствах, и в которых программы задач отделены от их  данных,
а  прикладные программы и данные отделены от программы и дан-
ных операционной системы. Свойство сегментации  в  процессоре
80386  достаточно  гибкое,  и может обеспечить каждый из этих
примеров, как и любые другие.
     Как уже было показано в главе 2, команда 80386 ссылается
на операнд в памяти с помощью составного логоческого  адреса,
состоящего  из селектора сегмента и смещения внутри сегмента.
В принципе 80386 транслирует логический адрес  в  линейный  с
помощью селектора, указывающего на дескриптор сегмента в таб-
лице дескрипторов. Дескриптор содержит базовый адрес сегмента
в линейном адресном пространстве, добавление смещения к базо-
вому  адресу дает линейный адрес операнда. На практике транс-
ляция логического адреса в линейный оптимизирована с  помощью
неявного  указания на селекторы и хранения дескрипторов в ре-
гистрах. Поэтому обращение к таблице дескрипторов производит-
ся толькодля тех команд, которые загружают новые селекторы  в
сегментные  регистры  (например,  вызов  процедуры из другого
сегмента приводит к замене селектора в регистре CS). Хотя  на
практике  это бывает редко, тем не менее удобнее представлять
трансляцию процессором логического  адреса  как  обращение  к
дескрипторам в таблицах дескрипторов сегментов, поскольку от-
сюда  следует, что именно дескрипторы в таблицах дескрипторов
сегментов задачи определяют логическое адресное  пространство
задачи.  Без  дескриптора задача не в состоянии сгенерировать
линейные адреса.
     Таблица дескрипторов сегментов представляет собой массив
дескрипторов, на рис.3-4 дан логический  формат  дескриптора.
Поле  базового адреса уже рассматривалось выше. Поле предель-
ного размера определяет длину сегмента, 80386 использует поле
предельного размера для проверки правильности величины смеще-
ния в логическом адресе, а именно, что  оно  попадает  внутрь
сегмента.  Аттрибуты сегмента, в основном, относятся к защите
и будут рассмотрены далее в этой главе.
     
     атрибуты
     признак последнего обращения =====================¬
     права =========================================¬  ¦
     тип ========================================¬  ¦  ¦
     привилегия ==============================¬  ¦  ¦  ¦
     признак присутствия ==================¬  ¦  ¦  ¦  ¦
                                           ¦  ¦  ¦  ¦  ¦
                                         г=¦T=¦T=¦T=¦T=¦¬
                                         ¦  ¦  ¦  ¦  ¦  ¦
                         г===============¦==¦==¦==¦==¦==¦
                         ¦      предельный размер       ¦
                         ¦==============================¦
                         ¦      базовый адрес           ¦
                         L==============================-
     
     Каждая задача может иметь системное и индивидуальное ло-
гическое адресное пространство. Эти пространства описываются,
соответственно  глобальной  таблицей дескрипторов (GDT) и ло-
кальной таблицей дескрипторов  (LTD).  (В  селекторе  имеется
бит,  связывающий  его  с той или иной таблицей). Эти таблицы
дескрипторов могут содержать максимум 8192 дескриптора и сов-
местно они определяют логическое адресное пространство  зада-
чи. Это означает, что для того, чтобы новый сегмент мог адре-
соваться  задачей,  операционная  система должна внести новый
дескриптор этого сегмента либо в GDT, либо в  LDT  задачи.  В
системах  с защитой GDT и LDT могут быть сделаны привилегиро-
ванными структурами так, что изменения в них сможет  произво-
дить толцко операционная система.
     Операционная  система из ее названия, глобальная таблица
дескрипторов доступна всем задачам, обычно операционные  сис-
темы  заносят  дескрипторы системных сегментов в GDT. Кодовый
сегмент (или сегменты) операционной системы является  хорошим
примером  сегмента,  который должен быть доступным всем зада-
чам, и дескриптор которого обычно находится в GDT. В противо-
положность этому каждая задача  может  иметь  свою  локальную
таблицу  дескрипторов. Процессор поддерживает адрес 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 новой задачи. Справоч-
ник страничных таблиц имеет длину, равную  одной  странице  и
содержит элементы страничной таблицы описывают 1024 страницы.
Таким  образом, кацдая страничная таблица описывает 4м байта,
а оглавление может описать до 4г байт - максимальное адресное
пространство.
     На рис.3-6 в функциональных обозначениях показано как 80
786 транслирует линейный адрес в физический адрес, если стра-
ничная адресация включена. Процессор  использует  старшие  10
бит  линейного адреса как индекс в оглавлении. Выбранный эле-
мент оглавления содержит адрес страничной таблицы.  Процессор
добавляет средние 10 бит линейного адреса к адресу страничной
таблицы, чтобы найти элемент страничной таблицы, который опи-
сывает необходимую страницу. Добавляя младшие 12 бит линейно-
го  адреса  к  адресу  начала  страницы,  процессор  получает
32-битный физический адрес.
     Для того, чтобы сократить накладные  расходы,  возникшие
от  поиска  в  страничных таблицах, 80386 помещает справочную
информацию о 32-х последних страницах, использовавшихся им, в
специальную быструю память (кэш), находящуюся  внутри  самого
микропроцессора. Эта память называется перекодированным буфе-
ром  просмотра  исключений  (TLB).  Только в том случае, если
процессор не находит справочной  информации  для  страницы  в
TLB,  он обращается к справочникам и страничным таблицам, на-
ходящимся в памяти. Как правило, 98-99% адресных ссылок попа-
дают в TLB, не требуя обращений к основной памяти для  транс-
ляции.  Когда  необходимой  информации  в TLB не оказывается,
процессор заменяет наиболее старый элемент TLB новым  элемен-
том.  Принцип локальности ссылок предполагает, что новый эле-
мент скорее всего будет использоваться в будещем.
     Поскольку включение старничного механизма не увеличивает
времени трансляции адреса, оно мало влияет на время  исполне-
ния команды только при непопаданиях в TLB.
     На  рис.3-7  показаны  основные поля элемента страничной
таблицы (PTE). Элементы справочника страничных  таблиц  иден-
тичны  показанному  за тем исключением, что поле адреса расс-
матривается как физический адрес страничной таблицы, а не ад-
рес страницы.

          атрибуты
          присутствие =====================================¬
          права =======================================¬   ¦
          привилегии ==============================¬   ¦   ¦
          было обращение ======================¬   ¦   ¦   ¦
          была запись =====================¬   ¦   ¦   ¦   ¦
          определяется пользователем ==¬   ¦   ¦   ¦   ¦   ¦
                                       V   V   V   V   V   V
г====================================T===T===T===T===T===T==¬
¦           адрес страницы           ¦   ¦   ¦   ¦   ¦   ¦  ¦
L====================================¦===¦===¦===¦===¦===¦==-
     
     Задачи могут совместно пользоваться отдельными страница-
ми или целыми страничными  таблицами.  Элементы  1  различных
страничных таблиц, указывающие на одну и ту же страницу , яв-
ляются  синонимами  один для другого, также как дескрипторы с
теми же самыми адресами являются синонимами друг для друга.
     В двух уровневой структуре страничных таблиц  процессора
80786  легче разделять страницы между задачами путем разделе-
ния целой страничной  таблицы.  Поскольку  адрес  разделяемой
страницы  в этом случае находится в одной страничной таблице,
операционной системы необходимо изменить только один  элемент
страничной таблицы, когда она перемещает эту страницу.
     
     3.3.4. Виртуальная память
     
     Виртуальная  память  позволяет  очень большим программам
или группам работать в значительно меньшем объеме  физической
памяти  без  использования техники оверлеев. Системы с вирту-
альной могут основываться или на сегментах, или на страницах.
В обоих случаях основная идея виртуальной  памяти  состоит  в
том,  чтобы  использовать  значительно более дешевую дисковую
память вместо полупроводниковой памяти. Операционная  система
в  случае  с  виртуальной памятью запоминает все сегменты или
страницы в большой области дисковой памяти, называемой  часто
"областью  обмена". Значительно меньшая физическая (реальная)
память содержит только наиболее часто  используемые  сегменты
или  страницы.  До тех пор, пока сегменты или страницы запом-
ненные на диске, используются нечасто, система с  виртуальной
памятью  будет вести себя также хорошо, как и система со зна-
чительно большей оперативной памятью, но за значительно мень-
шую цену. Ключевые архитектурные  свойства,  необходимые  для
эффектовного  использования виртуальной памяти, перечисляются
ниже:
     - бит для каждого сегмента или старницы, который говорит
процессору (или устройству управления  памятью),  имеется  ли
данный  сегмент  или страница в памяти, или необходимо загру-
зить его (ее) с диска;
     - механизм ловушки или особого  прерывания,  при  помощи
которого процессор может указать операционной системе о необ-
ходимости загрузки в память отсутствующего сегмента или стра-
ницы;
     -  перезапускаемые  команды, которые позволяют процесору
выбирать заново команду после того,как  операционная  система
загрузила только что неприсутствующую страницу в память и по-
метила ее присутствующей.
     
     Процессор  80786  имеет  все эти необходимые свойства, а
также другие, которые улучшают эффективность механизма управ-
ления виртуальной памятью. Как дескрипторы,  так  и  элементы
старничных  таблиц имеют бит присутствия и поэтому могут быть
использованы как основа для построения  виртуальной  памятью.
Обмен  сегментами  между  памятью  и диском являются разумным
подходом, когда сегменты относительно малы, как  это  было  в
16-битных архитектурах. Когда сегменты могут быть очень вели-
ки, как это возможно в 80786, обмен страницами обычно являет-
ся более эффективным приемом благодаря фиксированному размеру
страниц. В страничных системах операционная система распреде-
ляет  и  освобождает  память элементами размером со страницу,
называемыеми старничными кадрами; старница  ,  загружаемая  с
диска,  будет  подходить  любому  имеющемуся кадру. Поскольку
большинство из 32-битных систем с виртуальной памятью основы-
вается на механизме страниц, оставшаяся часть  этого  раздела
описывает страничный виртуальный механизм 80786.
     В общем случае операционная система со страничной вирту-
альной  памятью  пересылает  отсутствующие страницы с диска в
старничные кадры по запросам, т.е. когда она будет  оповещена
процессором, что команда обращается к отсутствующей странице.
Когда  количество свободных кадров становится маленьким, опе-
рационная система также передает страницы из страничных  кад-
ров  на диск, пытаясь изъять те страницы, которые вряд ли бу-
дут использованы в ближайшем будущем. Путем такого  "прозрач-
ного"  обмена  старницами  между страничными кадрами и диском
операционная система создает у прикладного программного обес-
печения иллюзию, что физическая  память  имеет  размер  очень
большой  области  обмена  на диске. Ниже подробно описывается
этот механизм.
     Когда в процессе трансляции логического адреса процессор
получает линейный адрес, который ссылается на  элемент  стра-
ничной  таблицы,  чей  бит  присутствия сброшен, в процессоре
возникает особая ситуация,  называемая,  условно,  страничной
ошибкой. Особые ситуации рассматриваются ниже в этом разделе,
но основным следствием этой ошибки является вызов процессором
процедуры операционной системы, называемой обработчиком стра-
ничной  ошибки.  При  входе  в  обработчик  страничной ошибки
Uправляющий регистр 2 содержит линейный  адрес,  связанный  с
отсутствующей  страницей. По этому адресу обработчик странич-
ной ошибки может найти относящийся к нему элемент  страничной
таблицы  путем  трансляции  линейного  адреса, как это делает
процессор. Отметим, что все остальные  биты,  за  исключением
бита  присутствия в элементе страничной таблицы, определяются
пользователем;  они  представляют  для  операционной  системы
удобное  место для запоминания дискового адреса отсутствующей
страницы. Определив дисковый  адрес  отсутствующей  страницы,
обработчик страничной ошибки может найти свободный страничный
кадр  и передать страницу с диска в этот кадр. Затем обработ-
чик старничной ошибки изменяет адресное поле в элементе стра-
ничной таблицы и бит присутствия, после чего  возвращает  уп-
равление программе, прерванной страничной ошибкой. После это-
го процессор автоматически заново выбирает команду, в которой
произошла  страничная ошибка, и результат будет таким же, как
если бы страница ранее находилась в памяти, когда команда на-
чала исполнятьяся в первый раз.
     Другие поля в  элементе  старничной  таблицы  процессора
80786  помогают  операционной  системе эффективно производить
действия, связанные с управлением виртуальной памятью.  Кроме
загрузки старниц по запросам операционная система должна под-
держивать  набор  свободных  страничных кадров, которые могут
быть распределены обработчиком страничных ошибок. Для  увели-
чения набора свободных старничных кадров операционная система
должна  знать,  какой  кадр освободить. Прежде чем освободить
кадр, операционная система должна записать  эту  страницу  на
диск,  если страница была модифицирована с тех пор, когда она
была загружена. Для того, чтобы помочь операционной системе в
этой длительности, архитектура 80786 имеет бит доступа и  бит
изменения в каждом элементе страничной таблицы, процессор из-
меняет  эти  биты  автоматически, для всех имеющихся в памяти
страниц 80786 устанавливает бит доступа всегда, когда  проис-
ходит чтение или запись в данной странице, иустанавливает бит
изменения,  когда происходит запись в эту страницу. Путем пе-
риодического просмотра и сброса  битов  доступа  операционная
система может определить страницы, которые давно не использо-
вались.  Кадры,  содержащие такие страницы, являются хорошими
кандидатами на освобождение, поскольку стрсницы, которые дав-
но не использовались, вряд ли будут использованы в  ближайшем
будущем.  Когда операционная система выбрала страницу для ос-
вобождения ее страничного кадра, страница не  должна  записы-
ваться на диск за исключением случая, когда процессор устано-
вил ее бит изменения.
     Каждый  элемент  старничной  таблицы  также содержит 3-х
битное поле, которое операционная система может  использовать
по  своему усмотрению. Операционные системы обычно используют
это поле для маркировки страниц специальными  знаками  такими
как, например, "закрыто для ввода/вывода".
     
     3.4. Защита
     
     Процессор  80786 обеспечивает несколько мрханизмов защи-
ты, которое операционная система  может  селективно  выбирать
для  своих  нужд. Одна из форм защиты - отделение пространств
адресов задач при  помощи  таблиц  дескрипторов  сегментов  и
старничных таблиц, обсуждалась выше. Это разделение эффектив-
но  предотвращает  налоложение кодов и данных различных прик-
ладных задач. В дополнение к изоляции  задач  друг  от  друга
80386 обеспечивает возможность защиты операционной системы от
прикладных  задач, защиту одной части операционной системы от
других частей и защиту задач от некоторых их собственных оши-
бок. Кроме того, что система защиты 80386 делает операционные
системы более надежными, она может упростить процесс отладки,
используя прерывания (ловушки) по ошибкам для конкретных  за-
дач.  Все свойства защиты процессора 80386 реализованы внутри
кристалла, поэтому действия по проверке защиты  не  вляют  на
производительность процессора.
     
     3.4.1. Привилегии
     
     Многие  из свойств защиты процессора 80386 базируются на
понятии иерархии привилегий. В любой момент привилегии задачи
эквивалентна уровню привилегий исполняемого кодового  сегмен-
та. В каждом дескрипторе сегмента имеется поле, которое опре-
деляет уровень привилегии связанного с ним сегмента, поле мо-
жет  принимать  0 - это наиболее привилегированный уровень, а
уровень привелегии 3 - наименее привилегированный.
     На рис.3-8 Показано, как  уровни  привилегии  процессора
80386 могут быть использованы для установки различных страте-
гий  защиты.  Система без защиты может быть реализована путем
простого помещения всех процедур в  сегмент  (или  сегменты),
чей  уровень  привилегии  равен 0. Традиционное разделение на
супервизора и пользователя может быть реализовано путем поме-
щения прикладной задачи в сегмент с уровнем привилегии  3,  а
процедур супервизора - в сегмент чей уровень привилегий равен
0.  Операционная система может также использовать уровни при-
вилегии 1 и 2, если это необходимо. Например, наиболее крити-
ческие и наиболее изменяемые процедуры  операционной  системы
(иногда  называемые  ядром  операционной системы) могут иметь
уровень привилегий 0. Уровень привилегий 0. Уровень  привиле-
гий 1 может быть использован для функций операционной системы
, которые являются менее критическими и более часто изменяют-
ся  или  расширяются, например, для драйверов устройств. Уро-
вень 2 может быть использован для использования  производите-
лями  оригинального  обурудования, такие производители ориги-
нального оборудования должны затем присваивать уровень приви-
легий 2 своим программам, оставляя уровень привилегий  3  для
конечных  пользователей. В этом случае программы производите-
лей оригинального оборудования защищены от программ  конечных
пользователей.  Операционная система защищена как от программ
производителей оригинального оборудования и программ конечных
пользователей, а ядро операционной системы защищено  от  всех
остальных  программ,  включая  ту часть операционной системы,
которая является предметом частных изменений.
     Как будет показано ниже, уровень привилегий задачи опре-
деляет, какие команды можно использовать и какое подмножество
сегментов и/или страниц в их адресном пространстве они  могут
обрабатывать  (исполнять). Процессор осуществляет проверку на
допустимость работы согласно уровню привилегии задачи и уров-
ню привилегии сегментов или страниц, которые являются операн-
дами команд. Любая попытка задачи использовать более привиле-
гированный сегмент или страницу приводит к  остановке  работы
процессора над командой и возникновению особой ситуации защи-
ты.  (Особые  ситуации  описываются в данном разделе ниже как
системные вызовы, которые обеспечивают управляемый  путь  для
вызова  менее привилегированными процедурами более привилеги-
рованных процедур).
     
     3.4.2. Привилегированные команды
     
     В дополнение к тому, какие  сегменты  и  страницы  могут
быть  использованы,  уровень прувулегии задачи определяет ко-
манды, которые задачей  могут  быть  использованы.  Процессор
80386  имеет  подмножество  команд, исполнение которых должно
быть тщательно проанализировано для того, чтобы предотвратить
серьезные разрушения системы. Все команды, которые  загружают
новые  значения в системные регистры, являются примерами при-
вилегированных команд. Только задача,  работающая  на  уровне
привилегий 0, может исполнять привилегированные команды.
     
     3.4.3. Защита сегментов
     
     Дескрипторы в регистрах LDT и GDT - задач определяют ло-
гическое адресное пространство задачи. Сегменты, определенные
в  этих  таблицах,  теоретически адресуемы, поскольку таблицы
дескрипторов обеспечивают информацией, необходимой для вычис-
ления адреса сегмента. Однако  адресуемый  сегмент  не  может
быть  доступен  для  некоторых операций, из-за дополнительных
проверок защиты, осуществляемых процессором 80386.  Процессор
проверяет  каждое  обращение  к сегменту (сгенерированное при
исполнении команды или при выборке  команды),  чтобы  опреде-
лить, что обращение согласуется с атрубутами защиты сегмента,
как это описано ниже.
     Привилегия.  Чтобы получить доступ к сегменту, программа
должна иметь, по крайней мере, такую же привилегию  как  сег-
мент.  Например, программа, работающая на уровне 3, может об-
ращаться только к тем сегментам, чей уровень привилегий также
равен 3, в то время, как программа, работающая на  уровне  0,
может обращаться ко всем сегментам в своем адресном простран-
стве.
     Граница.  Обращение  к сегменту должно находиться внутри
границ сегмента. Границы сегмента позволяют процессору  обна-
руживать  программные  ошибки,  такие как переполнение стека,
неверные указатели и индексы массивов, а  также  неправильные
адреса  вызовов  и  переходов.  В случаях, когда операционная
система может определить, что обращение за  границы  сегмента
не является ошибкой (переполнение стека является примером для
некоторых  систем), операционная система может расширить сег-
мент (например, путем добавления старницы к  нему)  и  начать
команду с начала.
     Тип.  Каждый дескриптор содержит поле типа, которое про-
цессор проверяет на соответствие команде, которую он исполня-
ет. Обычные сегменты имеют тип команд или данных  ,  позволяя
процессору,  например, обнаружить попытку записи в существую-
щий код, например, типы сегментов, непосредственно работающие
в прикладных программах - это  команды  и  данные.  Системные
дескрипторы  также имеют тип, так что процессор может, напри-
мер, проверить при переключении задач, что сегмент, указанный
в команде JUMP TSS, действительно является сегментом сосотоя-
ния задачи.
     Права. Дескриптор сегмента может быть  помечен  правами,
ограничивающими  операции,  которые можно производить со свя-
занным с ним сегментом. Сегменты команд могут  быть  помечены
как  исполняемый или читаемый. Сегменты данных могут быть по-
мечены как доступные толко для чтения или как  доступные  для
чтения и записи.
     Все  проверки,  описанные  выше,  зависят от целостности
дескрипторв. Если задача, исполняющая  прикладную  программу,
могла  бы изменять дескриптор, проверка ничего бы не гаранти-
ровала. По этой причине операционная система может ограничить
доступ к таблицам дескрипторов только для программ с  уровнем
привилегии 0.
     Заметим,  что  в  случае разделяемых сегментов различные
дескрипторы для одного и того же сегмента (т.е. синонимы) мо-
гут иметь различные атрибуты защиты, позволяя, например,  од-
ной  задаче  читать  и писать сегмент, в то время, как другой
только читать его. Синонимы также позволяют операционной сис-
теме преодолеть механизм защиты, если это необходимо,  напри-
мер для перемещения кодового сегмента.
     
     3.4.4. Защита страниц
     
     Системы,  которые широко не используют защиту сегментов,
вместо этого могут защищать страницы  (защита  старниц  может
быть  также  приложима  к отдельным чатям больших сегментов).
Аналогично дескриптору элемент страничной таблицы имеет набор
атрибутов защиты, процессор 80386 проверяет каждое  обращение
к странице на соответствие этим атрибутам.
     Элемент  страничной  таблицы может быть отмечен одним из
двух уровней привилегий: пользовательский или  супервизорный.
Пользовательский уровень соответствует уровню привилегий 3, а
супервизорные  страницы  могут быть досатупны только задачам,
работающим с уровнями привилегий 0, 1 или 2, пользовательская
страница может быть отмечена как доступная только для  чтения
или для чтения и записи.
     Процессор  80386 проверяет атрибуты защиты страниц после
того, как он удостоверился, что доступ находится в соответст-
вии с атрибутами сегмента. Таким образом, защита старниц  яв-
ляется удобным средством для операционной системы реализовать
дополнительную  защиту частей сегментов. Например, операцион-
ная сиситема может базопасно  заполнить  данные  операционной
системе,  относящиеся к задачам, такие как страничные таблицы
и дескрипторы файлов, в  сегменте  данных  задачи,  обозначив
страницы, где расположены эти данные, как супервизорные.
     
     3.5. Системные вызовы
     
     Большинство  операционных систем организуют свои функции
как набор процедур, которые могут быть вызваны задачами.  Не-
защищенная операционная система процессора 80386 может помес-
тить  свои  процедуры  и  прикладной  код в кодовой сегмент с
уровнем привилегии 0/ или в более  чем  один  такой  сегмент,
прикладная  задача  может  затем вызвать функцию операционной
системы обычной командной вызова. Такой подход является быст-
рым, но требует от прикладных задач, чтобы в них не было оши-
бок и чтобы они выполнялись правильно (как это, например, ре-
ализуется во встроенных системах). Ничто не запрещает задаче,
работающей на уровне привилегии 0, вызывать процедуры,  нахо-
дящиеся в адресе, который не является точкой входа в операци-
онную систему, ничто не запрещает такой задаче испортить дан-
ные  операционной  системы.  Для  защиты операционной системы
прикладные прогарммы и данные могут  быть  помещены  в  менее
привилегированные  сегменты.  Также как задача, работающая на
данном уровне привилегии, не может читать или писать данные в
сегмент с большим уровнем привилегии, задача также  не  может
непосредственно вызвать процедуру из более привилегированного
сегмента.
     Для того, чтобы позволить задаче, исполняющей команды из
менее  привилегированного  сегмента, сделать вызов защищенной
системной процедуры, операционная система  должна  определить
одну  или более входных точек. В процессоре 80386 эти входные
точки называются шлюзами (см.Рис.3-9).
     
           атрибуты
           счетчик двойных слов
           тип
           привилегия
           г===T===T======T==========T======================¬
           ¦   ¦   ¦      ¦          ¦ бит наличия          ¦
           ¦===¦===¦======¦==========¦======================¦
           ¦   указатель точки входа                        ¦
           L================================================-
     
           Счетчик двойных слов относится только к шлюзам
     
     Имеются два типа шлюзов, которые могут быть использованы
для реализации входных точек операционной системы: шлюзы  ло-
вушек  и шлюзы вызовов. Два типа шлюзов, вообще говоря, похо-
жи, однако шлюз вызова позволяет сделать интерфейс операцион-
ной системы идентичным с интерфейсом обычной  процедуры.  Ис-
пользуя  шлюзы вызовов, программисты компиляторов и ассембле-
ров могут использовать общий набор соглашений для вызова  лю-
бых процедур, оставляя за процессором 80386 заботы о дополни-
тельной обработке, необходимой для изменения уровней привиле-
гии.
     Как  показано на рис.3-9, шлюз содержит логический адрес
входной точки и набор атрибутов. Наиболее  важный  атрибут  -
это  уровень привилегии шлюза. Уровень привилегии шлюза опре-
деляет уровни привилегии, которые  могут  использовать  шлюз,
для использования шлюза вызывающая процедура должна быть, как
минимум,  также привилегирована как шлюз. На рис.3-10 Показан
пример. В этой гипотической  системе  программа  пользователя
имеет  уровень привилегии 3, в то время как операционная сис-
тема разделена на 2 уровня. Ядро операционной системы работа-
ет на уровне привилегии 0, а менее критичные функции операци-
онной системы работают на уровне привилегии 1. (Уровень  при-
вилегии  2  не используется). В этой системе пользовательская
программа позволяет вызывать сервисные процедуры, но не ядро.
В соответствии с этим обеспечивает шлюз для сервисных  проце-
дур. Уровень привилегий этого шлюза равен 3, так что програм-
ма пользователя может вызывать процедуры через него. Присваи-
вая  шлюзу  ядра  уровень привилегиии 1, операционная система
позволяет сервисным процедурам вызывать  ядро,  но  запрещает
доступ к программе пользователя, которая менее привилегирова-
на,  чем  шлюз ядра. Таким образом операционная система может
применять шлюзы для аккуратного определения своих точек  вхо-
да,  включая уровни привилегии, необходимые для использования
этих точек входа. Для того, чтобы сделать функции  операцион-
ной  системы вызываемыми из всех задач, операционная система,
обычно помещает их шлюзы вызовов в глобальную  таблицу  деск-
рипторов.
     Для  осуществления  вызова через шлюз ловушки задача ис-
пользует команду прерывания, для осуществления  вызова  через
шлюз  вызова задача исполняет команду обычного межсегментного
вызова. Обе команды изменяют уровень привилегии заадчи  пере-
ходят  к  стеку,  определенному  (в  TSS задаче) для старшего
уровня привилегии. (Определенная система  должна  иметь  свой
собственный  стек  для  того,  чтобы гарантировать достаточно
стековое пространство для работы,  нельзя  верить  прикладным
задачам, что они имеют достаточное стековое пространство).
     Перед вызовом через стек вызова задача может заслать па-
раметры  в  свой  стек,  как она сделала бы это перед вызовом
другой процедуры. Процессор 80386 автоматически копирует  па-
раметры  в привилегированный стек (поле счетчика двойных слов
в шлюзе вызова говорит процессору 80386, сколько двойных слов
параметров необходимо скопирировать). Системы,  которые  осу-
ществляют  вызовы через шлюзы ловушек, могут пересылать пара-
метры в регистрах.
     
     3.6. Прерывания и особые ситуации
     
     Устройства генерируют прерывания, когда они требуют вни-
мания, в то время как команды могут вызвать особые  ситуации,
если при их использовании возникают особые условия, такие как
несуществующая страница. Типичное прерывание или особая ситу-
ация  требуют  быстрого  вмешательства программного драйвера,
который отвечает на прерывание или особую ситуацию. После то-
го, как драйвер вернет управление, 80386 возобнавляет  испол-
нение командного потока, который был прерван или который выз-
вал  особую  ситуацию. Поскольку прерывания и особые ситуации
весьма похожи, процессор 80386 рассматривает их унифицирован-
ным способом.
     Каждый источник прерывания и каждый тип особой  ситуации
имеет  идентофикационных  номер в диапазоне от 0 до 255, про-
цессор 80386 использует этот номер для  того,  чтобы  вызвать
обработчик, связанный с прерыванием или особой ситуацией. При
возникновении  особых  ситуаций  они распознаются процессором
80386, который определяет номера особых ситуаций, как это по-
казано в табл.3-1. Номера прерываний определяются  операцион-
ной  системой. Операционная система инициализирует программи-
руемый контроллер прерываний 8259а таким образом, что  каждый
источник прерываний связывается со своим номером. При появле-
нии прерывания 8259а передает процессору 80386 номер прерыва-
ния.  Команды  прерываний указывают свои номера своих операн-
дах. Заметим, что для совместимости с существующим и  будущим
оборудованием фирмы интел номера прерываний и особых ситуаций
от  0 до 71 не должны использоваться иначе, чем это указано в
табл.3-1. Все другие номера могут применяться  без  ограниче-
ний.
     
                                                 Таблица 3-1.
     
г================T==========================================¬
¦ Номер          ¦     Описание                             ¦
¦================+==========================================¦
¦  0             ¦     деление на 0                         ¦
¦  1             ¦     особая ситуация отладки              ¦
¦  3             ¦     контрольная точка программы          ¦
¦  4             ¦     переполнение                         ¦
¦  5             ¦     нарушение гарниц массива             ¦
¦  6             ¦     недопустимый код операции            ¦
¦  7             ¦     сопроцессор отсутствует              ¦
¦  8             ¦     двойная ошибка                       ¦
¦ 10             ¦     неправильный TSS                     ¦
¦ 11             ¦     сегментная ошибка                    ¦
¦ 12             ¦     переполнение стека сверху или снизу  ¦
¦ 13             ¦     нарушение общей защиты               ¦
¦ 14             ¦     страничная ошибка                    ¦
¦ 16             ¦     ошибка сопроцессора                  ¦
L================¦==========================================-
 
     3.6.1. Таблица дескрипторов
     
     Сгенерировав или получив номер прерывания или особой си-
туации,  процессор  80386 использует его как индекс в таблице
дескрипторов прерываний (IDT). IDT Может быть  расположена  в
любом месте памяти, операционная система инициализирует IDT и
загружает  ее адрес в регистр таблицы дескрипторов прерываний
(IDTR). Подобно GDT или LDT, IDT является вектором дескрипто-
ров, хотя шлюзы являются единственным типом дескрипторов, до-
пустимых в IDT. В IDT имеется один шлюз для каждого  обработ-
чика  прерывания и особой ситуации (IDT функционально подобна
таблице прерываний, имеющейся во многих архитектурах).
     Обработчик прерываний  или  особых  ситуаций  процессора
80386 может быть реализован в виде процедуры или задачи, ниже
кратко  обсуждаются достоинства этих двух способов. Процессор
80386 вызывает обработчик, организованный  в  виде  процедуры
так,  он выполняет системный вызов через шлюз. Для вызова об-
работчика, организованного в  виде  задачи,  процессор  80386
осуществляет  переключение  задач.  Тип шлюза IDT обработчика
говорит процессору, каким образом необходимо вызвать обработ-
чик (см. Табл.3-2). Как было указано, шлюзы прерываний и  ло-
вушек  функционально  подобны  шлюзам вызовов, за исключением
того что они заставляют 80386 запомнить регистр флагов в стек
обработчика. Они отличаются один от другого только состоянием
флага разрешения прерывания (IF) при входе  в  обработчик,  в
обработчик  прерываний  входят с запрещенными прерываниями, в
то время как в обработчик ловушки, который обычно использует-
ся для обработки особых ситуаций, входят без изменения запре-
та. В процессе входа в обработчик -  зада^у  80386  загружает
регистр  флагов  значением,  запомненным  в его TSS - задаче,
разрешая обработчику работать с разрешенными или запрещенными
прерываниями.
     
                                                 Таблица 3-2.
     
     Характеристики шлюзов прерываний и особых ситуаций
г============T======================T=======================¬
¦ Тип шлюза  ¦      Обработчик      ¦     Прерывания        ¦
¦============+======================+=======================¦
¦ прерывание ¦      процедура       ¦      запрещены        ¦
¦ шлюз       ¦      процедура       ¦      разрешены        ¦
¦ задача     ¦      задача          ¦ (флаг IF обработчика) ¦
L============¦======================¦=======================-
     
     Обработчики - процедуры  являются  подходящим  средством
для  программ,  которые должны работать в контексте (т.е. ис-
пользовать адресное пространство и значения регистров)  зада-
чи,   которая  прервана  или  вызвала  особую  ситуацию.  При
16-мгц-синхросигнале процедура входа  в  обработчик  занимает
3,6 мкс. Подобно любой другой процедура прерывания или особой
ситуации  имеет  доступ ко всем ресурсам работающей задачи: к
ее данным и коду, ее регистрам и стеку. Так и должно быть для
большинства особых ситуаций, поскольку в задаче возникла осо-
бая ситуация и может потребоваться доступ  к  данным  задачи,
чтобы  эту  особую  ситуацию разрешить. Например, обработчику
страни^ных ошибок необходимы  страничные  таблицы  работающей
задачи  для  того,  чтобы  найти дисковый адрес отсутствующей
страницы. В идеале прерывания должны обрабатываться задачами,
а не процедурами, так как прерывание , вообще говоря, не  от-
носится к задаче, которую оно прерывает. Более того, обработ-
чик  прерываний должен иметь свои собственные ресурсы (напри-
мер, свой собственный стек), а не внедрять  в  стек  какой-то
задачи,  которая  работала  в  момент появления прерывания. С
другой стороны переключение задач требует значительно больше-
го времени чем вызов процедуры (17 мкс вместо 3,6), поскольку
процессор запоминает и восстанавливает регистры при  переклю-
чении  задач.  Системы,  которые чрезвычайно чувствительны ко
времени реакции на прерывания, могут обрабатывать  прерывания
при помощи процедур.
     
     3.6.2. Особые случаи и регистры отладки
     
     Подобно большинству процесоров 80386 имеет команду конт-
рольной точки, которую можно использовать для вызова отладчи-
ка.  Однако отладочная аппаратура 80386 имеет форму регистров
отладки, показанных на рис.3-11. Регистры отладки поддержива-
ют контрольные точки данных  являются  важным  нововведением,
которое  может  сократить  время отладки на многие часы, т.К.
Например, позволяет установить, когда происходит непредусмот-
ренная запись в структуры данных.
     Регистры отладки также сокращают искажения в программах,
необходимые для записи команды точек останова в код, особенно
для программ, которые защищены от записи или разделены други-
ми задачами.
     Отладчик 80386 реализует в виде обработчика особой ситу-
ации с номером 1. Процессор может непосредственно вызвать от-
ладчик после исполнения любой команды (путем установки  флага
TF - флага ловушки пошагового исполнения), после переключения
определенной  задачи  или после появления условия точки оста-
нов, определенного осним из регистров отладки. Анализируя ре-
гистр статуса отладки, обработчик отладочной особой  ситуации
может определить, какая из причин его вызвала.
     Будучи вызван при переключении задач, отладчик может пе-
резагрузить регистры регистры отладки значениями, подходящими
для новой задачи.
     80386  Может  ожидать  появления одновременно до четырех
условий контрольных точек, вызывая обработчик отладочной осо-
бой ситуации про появлении одного из условий. Каждое  условие
контрольной  точки  определяется содержимым регистра отлдаки,
эти регистры могут быть загружены и запомнены при помощи при-
вилегированных форматов  команды  MOVE.  Условие  контрольной
точки  содержит 32-битный линейный адрес, 2-битное поле длины
и поле доступа, последние два элемента  указываются  в  полях
регистра  управления  отладкой DR7. Адрес условия контрольной
то^кой и длина формируют адресный диапазон, который контроли-
руется процессором при каждой ссылке на память. Поле  доступа
определяет  тип  доступа, для которого процесор может вызвать
особую ситуацию 1. Могут быть указаны 3 типа доступа:
     1) исполнение команды по указанному адресу;
     2) запись данных в диапазон адресов;
     3) чтение или запись данных в диапазоне адресов.
     
     3.7. Ввод/вывод
     
     Системы, базирующиеся на 80386, могут распределять  уст-
ройства  ввода/вывода  в пространство памяти процессора или в
отдельное пространство ввода/вывода. Устройствам  ввода/выво-
да,  распределенным  в  пространство памяти, можно обращаться
для чтения или записи, используя такие команды обращения, как
MOVE, OR или аналогичные. Устройства, распределенные в  памя-
ти,  могут быть защищены с помощью стандартного механизма за-
щиты сегмента и страницы процессора 808386.
     В дополнении к своему адресному  пространству  процессор
80386  имеет 64к-байтное  адресное пространство ввода/вывода.
Устройства, распределенные в  это  пространство,  управляются
командами ввода, вывода, ввода строки и вывода строки. Первые
две  команды  передаеют  байт,  слово, двойное слово в или из
цредит аедит EAX-регистра.  Последние  две  команды  передают
строку байтов, слов или двойных слов в память или из памяти.
     Команды ввода-вывода 80386 чувствительны к уровню приви-
легий.  В  регистре  флагов  имеется поле, называемое уровнем
привилегий ввода/вывода (IOPL), которое определяет  минималь-
ный  уровень  привилегий , на котором работающая задача может
исполнять команды ввода/вывода (IOPL загружается из TSS,  так
что  задачи  могут иметь различные IOPL). Например, если IOPL
задачи равен 1, то задача не может выдавать команды ввода-вы-
вода, исключая случаи, когда она работает на уровне  привиле-
гии  0 или 1. Механизм IOPL поддерживает операционные системы
с многоуровневой защитой, в которых,  например,  критичные  и
стабильные  процедуры ядра работают на уровне привилегии 0, а
более изменчивые процедуры ввода-вывода  работают  на  уровне
привилегии 1, в этом случае операционная система должна толь-
ко  установить  IOPL равным 1, когда она создает задачу, пос-
кольку IOPL характерен для задачи, те задачи,  которым  можно
доверять,  могут исполнять команды ввода-вывода на прикладном
уровне, позволяя тем самым непосредственно работать со специ-
альными устройствами, для которых не имеется драйвера  опира-
ционной системы.
     Для того, чтобы реализовать прямой доступ к памяти (DMA)
от устройств ввода/вывода, операционная система 80386 переда-
ет  физический  адрес контроллеру DMA и должна гарантировать,
что сегменты и/или страницы, ко которым происходит  обращение
при DMA-передачах , не будут преремещаться во время этой опе-
раци.  Один  из способов пометить страницы "фиксированными на
время ввода-вывода" - это использование одного из трех  битов
пользователя в страничной таблице.
     
     
     4. Архитектурная совместимость
     
     80386  совместим  на  уровне объектного кода с 80286 и с
8086. Хотя можно просто использовать 80386 как быстрый  80286
или  как очень быстрый 8086, их совместимость обладает доста-
точно большой  гибкостью.  Процессор  80386  может  выполнять
программы 80286 и 80386 параллельно, и, используя виртуальный
режим  86 процессора 80386, существующие программы 8086 могут
также исполняться параллельно. Таким образом при помощи 80386
становится возможным строить системы,  которые  могут  парал-
лельно  исполнять программы, написанные для различных поколе-
ний семейства микропроцессоров.
     
     4.1. Совместимость с 80286
     
     Архитектура 80286 является точным подмножеством архитек-
туры 80386. Так как процесор  80386  распознает  все  команды
80286,  регистры, дескрипторы и т.Д., То операционная система
80286 и прикладные программы могут быть перенесены на  анало-
гичное  оборудование, построенное на основе 80386 без измене-
ния хотя бы одного бита.
     Прямой перенос, упомянутый выше, является наиболее быст-
рым путем для того, чтобы запустить  существующие  программы,
написанные для 80286 на системе, построенной на 80386. С дру-
гой  стороны  операционные системы для 80386 могут разрабаты-
ваться так, чтобы они  поддерживали  существующие  прикладные
программы  для  80286, и, позволяя в то же время, новым прик-
ладным программам полностью использовать свойства архитектуры
80386 (например, 32-битные параметры и длинные  сегменты).  В
таких  гибких разработках новые прикладные программы вызывают
операционную систему непосредственно, передавая 32-битные па-
раметры. Возовы старых прикладных программ, которые организо-
ваныв 16-битном формате 80286, перехватываются и преоразуются
в 32-битный формат, а затем передаются в операционную  систе-
му.
     
     4.2. Режимы реального и виртуального 8086
     
     Процессор  80386  может  выполнить  объектные  программы
80386 водном из 2 режимов: реальном  режиме  или  виртуальном
режиме 86. 80386 Входит в реальный режим при сбросе. В реаль-
ном  режиме процессор обеспечивает быстрое исполнение без за-
щиты так, как на 8086. Многие операционные системы будут  пе-
реключаться  из реального режима в режим защиты после инициа-
лизации, но также возможно работать все время в реальном  ре-
жиме  8086.  Принципиальное  различие  между реальным режимом
80386 и действительным режимом 8086 заключается  в  скорости:
программы 8086, которые критичны по скорости исполнения (нап-
ример, использующие рассчитанные временыые циклы), могут пот-
ребовать  небольших  изменений  для  того, чтобы они работали
правильно в значительно более быстром реальном режиме  80386.
Но  основное  множество  программ 8086 будет работать без ка-
ких-либо трудностей, т.к.  они  работают  в  реальном  режиме
80286.
     Виртуальный  режим 86 устанавливает исполнительную среду
8086 внутри защищенной многозадачной среды 80386. В то время,
как реальный режим управляет всем, что делает процессор, вир-
туальный режим  86  может  применяться  в  избранных  задачах
80386.  Когда  процессор работает в виртуальном режиме 86, он
ведет себя, как в 8086, но поле переключения к нормальной за-
даче, процессор работает как 80386 (который, на  самом  деле,
может интерпретировать программы как для 80286, так и 80386).
Таким  образом  виртуальный  режим  86 позволяет операционной
системе поддерживать исполнение программ 8086, 80286 и  80386
одновременно.
     В  разделе  3 было описано, как сегмент состояния задачи
отражает состояние своего виртуального процессора. Флаг  VM86
в регистре флагов, который загружается из TSS, определяет ра-
ботающий  виртуальный  процессор  задачи  как 8086 или 80386.
Когда 80386 загружает свои регистры из TSS, у  которого  флаг
VM86  установлен,  процессор  входит  в виртуальный режим 86.
Когда при последующем переключении задачи, процессор загружа-
ет значения в регистр из TSS, у которого флаг  VM86  сброшен,
он выходит из виртуального режима 86. Таким образом от задачи
к задаче процессор эмулирует 80386 или 8086 согласно значению
флага  VM86.  80386  Также выходит из виртуального режима 86,
когда он выдает особую ситуацию или возникает  прерывание,  и
предоставляет полные ресурсы архитектуры обработчику прерыва-
ний и исобых ситуаций. При возврате из обработчика, вызванно-
го  в  виртульном режиме 86,80386 автометически возвращется в
виртуальный режим 86. Так как адресное пространство 8086 рав-
но 1 мбайту, логические адреса, генерируемые задачей в вирту-
альном режиме 86, попадает в первый мбайт линейного адресного
пространства 80386. Множество задач, работающих в виртуальном
режиме 86, могут пересекаться друг с другом, поэтому они  все
должны разделять младший мбайт линейного адресного пространс-
тва. Операционная система может использовать страничный меха-
низм  80386 для перемещения линейных адресных пространств за-
дач, работающих в виртуальном режиме 86, в различные  области
физического  адресного пространства. Используя страничный ме-
ханизм таким способом, не только предотвращают наложение  за-
дач,  работающих в виртуальном режиме 86, но позволяют опера-
ционной системе с виртуальной памятью обменивать страницы за-
дач, работающих в виртуальном режиме 86, как если бы они были
задачами 80386.
     Задача, работающая в виртуальном режиме 86, может выпол-
нять программу, которая была написана для выполнения на одно-
задачном персональном компьюторе. Такая программа  может  со-
держать  команды,  которые потенциально опасны, когда они вы-
полняются в многозадачной среде.  Например  позволяя  задаче,
работающей в виртуальном режиме 86, выполнять команду Oчистки
флага  прерываний, тем самым запрещая прерывания, можно оста-
новить всю систему. Для предотвращения таких нарушений  80386
выдает  особую ситуацию, когда задача, работающая в виртуаль-
ном режиме 86, пытается исполнять  команду  ввода/вывода  или
команду, относящуюся к прерываниям.
     Запрещение  исполнения  таких  команд защищает остальную
часть системы от задач, работающих в виртуальном  режиме  86,
но  не удовлетворяет потребности задач виртуального режима 86
в исполнении  команд.  Решение  заключается  в  моделировании
опасных  команд  в процедуре операционной системы, называемой
монитором виртуальной  машины.  Когда  вызывается  обработчик
особых ситуаций, он может проверить флаг VM86 в образе регис-
тров  флагов  в стеке, чтобы определить, является ли источник
особой ситуации задачей виртуального режима 86, в этом случае
обработчик особых ситуаций может вызвать монитор  виртуальной
машины,  который  может промоделировать команду и вернуть уп-
равление задаче виртуального режима 86. Следует заметить, что
монитор виртуальной машины моделирует только несколько команд
8086, и как моделируемые команды, так и те  команды,  которые
80386 исполняет непосредственно, выполняются значительно быс-
трее на 80386, чем на 8086.
     Работая  совместно,  80386  и монитор виртуальной машины
реализует полный набор команд 8086, и страничный механизм мо-
жет обеспечить каждую задачувиртуального режима 86 своим соб-
ственным защищенным адресным пространством. Однако, большинс-
тво задач 8086 требуют дополнительных ресурсов,  обеспечивае-
мых опеарционной системой и периферийным оборудованием. В ка-
честве  примера первого типа ресурсов можно привести файловую
систему, в качестве второго типа  можно  привести  контроллер
растрового  дисплея, работающего непосредственно под управле-
нием прикладной программы. Эти ресурсы могут присутствовать в
системе, основанной на 80386 в форме, отличной от топ, в  ко-
торой  они  присутствовали ранее в системах, для которых была
создана программа 8086, чтобы упростить работу для предостав-
ления этих ресурсов в различных средах, 80386 может  реализо-
вать ловушки при обращении к операционной системе и к перифе-
рийным  устройствам,  которые  делаются задачами виртуального
режима 86.
     Например, большинство операционных систем 8086 использу-
ют команду прерывания  для  реализации  вызовов  операционной
системы. 80386 Выдает особую ситуацию, когда задача виртуаль-
ного режима 86 пытается исполнить команду прерываний. Монитор
виртуальной  машины может затем протранслировать вызов опера-
ционной системы в вызов операционной системы 80386,  как  это
показано  на рис.4-1. Если IOPL задачи виртуального режима 86
установлен равным значению, меньшему 3, то 80386 будет анало-
гичным образом создавать ловушки при исполнении  всех  команд
ввода/вывода программой 8086. Страничный механизм 80386 может
быть  использован для перенаправления обращений к устройствам
ввода/вывода, распределенным в память, на другие адреса, если
это необходимо. Подобные обращения могут также вызвать особые
ситуации путем указания соответствующих страниц  памяти,  как
предназначенных  только для чтения (чтобы быть обнаруженным в
случае записи) или как  отсутствующих  (для  обнаружения  при
чтении или записи).
     
     
     5. Аппаратурная реализация
     
     Архитектура  процессора  80386,  описанная  в предыдущих
разделах, реализована более чем в  275000  транзисторах,  ис-
пользующих  технологический  процесс CHMOS III фирмы ИНТЕЛ. В
данном разделе кратко рассматривается  внутреннее  устройство
кристалла  80386 и более подробно сигналы, при помощи которых
80386 взаимодействует с другими компонентами.

Сегмент состояния задачи

страницы в данном разделе 
 Сегмент состояния задачи  Внутренняя структура
 Неконвейерная адресация  Введение в микропроцессор 80386


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста