Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SysSoft.doc
Скачиваний:
523
Добавлен:
16.03.2016
Размер:
4.36 Mб
Скачать

Новые системные регистры микропроцессоров i80x86

Основные регистры микропроцессора i80x86, знание которых необходимо для понимания защищённого режима работы, приведены на рис. 3.2. Следует обра­тить внимание на следующее:

 указатель команды EIP– 32 битовый регистр, младшие 16 разрядов этого ре­гистра есть регистрIP;

 регистр флагов EFLAGS– 32 бита, младшие 16 разрядов представляют ре­гистрFLAGS;

 регистры общего назначения ЕАХ, ЕВХ. ЕСХ, EDX, а такжеESP, ЕВР,ESI,EDI– 32-битовые, однако их младшие 16 разрядов представляют собой из­вестные регистрыAX,BX,CX,DX,SP, ВР,SI,DI;

 сегментные регистры CS,SS,DS,ES,FS,GS– 16-битовые. При каждом из регистровCS,SS,DS,ES,FS,GSизображены пунктиром скрытые от про­граммистов (недоступны никому, кроме собственно микропроцессора) 64-би­товые регистры, в которые загружаются дескрипторы соответствующих сег­ментов;

 регистр-указатель на локальную таблицу сегментов текущей задачи – LDTR(16 битов). При этом регистре также имеется «теневой» (скрытый от программиста) 64-битовый регистр, в который микропроцессор заносит дескрип­тор, указывающий на таблицу дескрипторов сегментов задачи, описывающих её локальное виртуальное адресное пространство;

 регистр-указатель задачи TR1(16 битов). Указывает на дескриптор в глобаль­ной таблице дескрипторов, позволяющий получить доступ к дескриптору за­дачиTSS2– информационной структуре, которую поддерживает микропро­цессор для управления задачами;

 регистр GDTR1(48 битов) глобальной таблицыGDT, содержащей как деск­рипторы общих сегментов, так и специальные системные дескрипторы. В ча­стности, в GDTR находятся дескрипторы, с помощь которых можно получить доступ к сегментамTSS;

регистр IDTR(48 битов) таблицы дескрипторов прерываний. Содержит ин­формацию, необходимую для доступа к «таблице прерываний»IDT;

 управляющие регистры CR0 –CR3 (32-битовые) и некоторые другие регистры.

Управляющий регистр CR0 содержит целый ряд флагов, которые определяют режимы работы микропроцессора. Подробно об этих флагах можно прочитать в книгах [2, 22, 48]. Мы же просто ограничимся тем фактом, что самый млад­ший бит (РЕ,protectenable) этого регистра определяет режим работы процессо­ра. При РЕ=0 процессор функционирует в реальном режиме работы, а при еди­ничном значении микропроцессор переключается в защищённый режим. Самый старший бит регистра CR0 (битPG,paging) определяет, включен (PG=l) или нет (PG=0) режим страничного преобразования адресов.

Регистр CR2 предназначен для размещения в нем адреса подпрограммы обра­ботки страничного исключения, то есть в случае использования страничного механизма отображения памяти обращение к отсутствующей странице будет вы­зывать переход на соответствующую подпрограмму диспетчера памяти, и для определения этой подпрограммы будет задействован регистр CR2.

Регистр CR3 содержит номер физической страницы, в которой располагается таблица каталогов таблиц страниц текущей задачи. Очевидно, что, приписав к этому номеру нули, мы попадем на начало этой страницы.

Адресация в 32-разрядных микропроцессорахi80х86 при работе в защищённом режиме Поддержка сегментного способа организации виртуальной памяти

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

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

 чтобы существовало общее (разделяемое) адресное пространство.

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

Поля дескриптора (базовый адрес, поле предела) размещены в дескрипторе не непрерывно, а в разбивку, во-первых, из-за того, что разработчики постарались минимизировать количество перекрестных соединений в полупроводниковой структуре микропроцессора, а во-вторых – вследствие необходимости обеспе­чить полную совместимость1микропроцессоров (предыдущий микропроцессор i80286 работал с 16-битовым кодом и тоже поддерживал сегментный механизм реализации виртуальной памяти). Необходимо заметить, что формат дескрипто­ра сегмента, изображенный на рис.3.3, справедлив только для случая нахожде­ния соответствующего сегмента в оперативной памяти. Если же бит присутствия в поле прав доступа равен нулю (сегмент отсутствует в памяти), то все биты, за исключением поля прав доступа, считаются неопределенными и могут использо­ваться системными программистами (для указания адреса сегмента во внешней памяти) произвольным образом.

Локальное адресное пространствозадачи определяется через таблицуLDT(localdescriptortable). У каждой задачи может быть свое локальное адресное про­странство. Общее илиглобальное адресное пространствоопределяется через таб­лицуGDT(globaldescriptortable). Само собой, что работу с этими таблицами (их заполнение и последующую модификацию) должна осуществлять операци­онная система. Доступ к таблицам LDT и GDT со стороны прикладных задач должен быть исключен.

Рис.3.3.Дескриптор сегмента

При переключении микропроцессора в защищённый режим он начинает совер­шенно другим образом, чем в реальном режиме, вычислять физические адреса команд и операндов. Прежде всего, содержимое сегментных регистров интерпре­тируется иначе: считается, что там содержится не адрес начала сегмента, а номер соответствующего сегмента. Для того чтобы подчеркнуть этот факт, сегментные регистры CS,SS,DS,ES,FS,GSв таком случае даже называются иначе –селек­торами сегментов.При этом каждый селекторный регистр разбивается на сле­дующие три поля (рис. 3.4):

 поле индекса (index) – старшие 13 битов (3-15). Определяет собственно номер сегмента (его индекс в соответствующей таблице дескрипторов);

 поле индикатора таблицы сегментов (tableindex,TI) – бит с номером 2. Определяет часть виртуального адресного пространства (общее или принадлежащее только данной задаче). Если ТI=0, тоIndexуказывает на элемент в глобальной таблице дескрипторовGDT, то есть идёт обращение к общей па­мяти. ЕслиTI=1, то идёт обращение к локальной области памяти текущей за­дачи; это пространство описывается локальной таблицей дескрипторов LDT;

 поле уровня привилегий – биты 0 и 1. Указывает запрашиваемый уровень привилегий (RPL,requestedprivilegelevel).

Операционная система в процессе своего запуска инициализирует многие реги­стры и, прежде всего, GDTR. Этот регистр содержит начальный адрес глобаль­ной таблицы дескрипторов (GDT) и её размер. Как мы уже знаем, в GDT нахо­дятся дескрипторы глобальных сегментов и системные дескрипторы.

Рис.3.4.Селектор сегмента

Для манипулирования задачами ОС имеет информационную структуру, которую мы уже определили как дескриптор задачи(см. раздел «Понятия вычислительного процесса и ресурса», глава 1). Микропроцессор поддерживает работу с наиболее важной частью дескриптора задачи, которая меньше всего зависит от операционной системы. Эта инвариантная часть дескриптора, с которой и рабо­тает микропроцессор, названасегментом состояния задачи(taskstatesegment,TSS). Перечень полейTSSизображен на рис. 3.5. Видно, что в основном этот сегмент содержит контекст задачи. Процессор получает доступ к этой структуре с помощью регистра задачи (taskregister,TR).

Регистр TR содержит индекс (селектор) элемента в GDT. Этот элемент представляет собой дескриптор сегмента TSS. Дескриптор заносится в теневую часть регистра (см. рис. 3.2). К рассмотрению TSS мы ещё вернемся, а сейчас заметим, что в одном из полей TSS содержится указатель (селектор) на локальную табли­цу дескрипторов данной задачи. При переходе процессора с одной задачи на дру­гую содержимое поля LDTRзаносится микропроцессором в одноименный ре­гистр. Инициализировать регистр TR можно и явным образом.

Итак, регистр LDTR содержит селектор, указывающий на один из дескрипторов глобальной таблицы GDT. Этот дескриптор заносится микропроцессором в теневую часть регистра LDTR и описывает таблицу LDT для текущей задачи. Теперь, когда у нас определены как глобальная, так и локальная таблица дескрипторов, можно рассмотреть процесс определения линейного1адреса. Для примера рассмотрим процесс получения адреса команды. Адреса операндов определяют­ся по аналогии, но задействованы будут другие регистры.

Микропроцессор анализирует бит TIселектора кода и в зависимости от его зна­чения, извлекает из таблицы GDT или LDT дескриптор сегмента кода с номером (индексом), который равен полюindex(биты 3-15 селектора, см. рис. 3.4). Этот дескриптор заносится в теневую (скрытую) часть регистра CS.Далее микропро­цессор сравнивает значение регистра EIP2с полем размера сегмента, содержаще­гося в извлеченном дескрипторе, и если смещение относительно начала сегмента не превышает размера предела, то значение EIP прибавляется к значению поля начала сегмента и мы получаем искомый линейный адрес команды.

Рис. 3.5.Сегмент состояния задачи (TSS)

Линейный адрес – это одна из форм виртуального адреса. Исходный двоичный виртуаль­ный адрес, вычисляемый в соответствии с используемой адресацией, преобразу­ется в линейный. В свою очередь, линейный адрес будет либо равен физическо­му (если страничное преобразование отключено), либо с помощью страничной трансляции преобразуется в физический адрес. Если же смещение из регистра EIP превышает размер сегмента кода, то эта аварийная ситуация вызывает пре­рывание и управление должно передаваться супервизору ОС.

Рассмотренный нами процесс получения линейного адреса проиллюстрирован на рис. 3.6. Стоит отметить, что поскольку межсегментные переходы происходят нечасто, то, как правило, определение линейного адреса заключается только в сравнении значения EIP с полем предела сегмента и в прибавлении смещения к началу сегмента. Все необходимые данные уже находятся в микропроцессоре, и операция получения линейного адреса происходит очень быстро.

Рис.3.6. Процесс получения линейного адреса команды

Итак, линейный адрес может считаться физическим адресом, если не включен режим страничной трансляции адресов. Аппаратные средства микропроцессора для поддержки рассмотренного способа двойной трансляции виртуальных адресов в физические явно недостаточны, и при наличии большого количества не­больших сегментов приводят к медленной работе. В самом деле, теневой регистр при каждом селекторе имеется в единственном экземпляре, и при переходе на другой сегмент потребуется вновь находить и извлекать соответствующий деск­риптор сегмента, а это требует времени. Страничный же способ трансляции виртуальных адресов, как мы знаем, имеет немало своих достоинств. Поэтому в защищённом режиме работы, при котором всегда действует описанный выше механизм определения линейных адресов, может быть включен ещё и странич­ный механизм.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]