Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 28
Текст из файла (страница 28)
Очевидно, что, приписав к этомуномеру нули, мы попадем на начало этой страницы.Адресация в 32-разрядныхмикропроцессорах i80x86 при работев защищенном режимеПоддержка сегментного способа организациивиртуальной памятиКак мы уже знаем, для организации эффективной и надежной работы вычислительной системы в мультипрограммном режиме необходимо иметь соответствующие аппаратные механизмы, поддерживающие независимость адресныхпространств каждой задачи и в то же время позволяющие организовать обменДанными и разделение кода. Для этого желательно выполнить следующие дватребования:Глава 4, Особенности архитектуры м и к р о п р о ц е с с о р о в J80x86106• чтобы у каждого вычислительного процесса было собственное (личное, локальное) адресное пространство, никак не пересекающееся с адресными пространствами других процессов;•чтобы существовало общее (разделяемое) адресное пространство.Для удовлетворения этих требований в микропроцессорах i80x86 реализован сегментный способ распределения памяти.
Помимо того в этих микропроцессорах можетбыть задействована и страничная трансляция. Поскольку для каждого сегмента нужен дескриптор, устройство управления памятью поддерживает соответствующуюинформационную структуру. Формат дескриптора сегмента приведен на рис. 4.3.3123База сегмента(биты 31-24)GСтаршее двойное слово дескриптора191511D00Биты 19-16поля LimitБазовый адрес сегмента (биты 15-0)31РDPLSТуреБайт прав доступа7АБиты 23-16базы сегментаРазмер (предел - limit) сегмента(биты 15-0)15Первое (младшее) двойное слово дескриптораОРис.
4.3. Дескриптор сегментаПоля дескриптора (базовый адрес, поле предела) размещены в дескрипторе не непрерывно, а в разбивку, потому что, во-первых, разработчики постарались минимизировать количество перекрестных соединений в полупроводниковой структуремикропроцессора, а во-вторых, чтобы обеспечить полную совместимость1 микропроцессоров (предыдущий микропроцессор i80286 работал с 16-разрядным кодоми тоже поддерживал сегментный механизм реализации виртуальной памяти). Необходимо заметить, что формат дескриптора сегмента, изображенный на рис.
4.3,справедлив только для случая нахождения соответствующего сегмента в оперативной памяти. Если же бит присутствия в поле прав доступа равен нулю (сегментотсутствует в памяти), то все биты, за исключением поля прав доступа, считаютсянеопределенными и могут использоваться системными программистами (для указания адреса сегмента во внешней памяти) произвольным образом.Локальное адресное пространство задачи определяется через таблицу LDT (LocalDescriptor Table). У каждой задачи может быть свое локальное адресное пространство.
Общее, или глобальное, адресное пространство определяется через таблицу GDT(Global Descriptor Table). Само собой, что работу с этими таблицами (их заполнениеи последующую модификацию) должна осуществлять операционная система. Доступ к таблицам LDT и GDT со стороны прикладных задач должен быть исключен.При переключении микропроцессора в защищенный режим он начинает совершенно другим образом, чем в реальном режиме, вычислять физические адреса команд и' Естественно, совместимость обеспечена только «снизу вверх», то есть программы, разработанныедля предыдущих версий микропроцессора, должны выполняться на последующих без какой-либопеределки.Адресация в 32-разрядных микропроцессорах J80x86107перандов.
Прежде всего, содержимое сегментных регистров начинает интерпретироваться иначе: считается, что там содержится не адрес начала, а номер соответствующего сегмента. Для того чтобы подчеркнуть этот факт, сегментные регистры CS,с$ DS, ES, FS, GS начинают даже называть иначе — селекторами сегментов. Приэтом каждый селекторный регистр разбивается на три поля (рис. 4.4).р Поле индекса (Index) — старшие 13 битов (3-15) определяет собственно номерсегмента (его индекс в соответствующей таблице дескрипторов).• Поле индикатора таблицы сегментов (Table Index, TI) — бит с номером 2 определяет часть виртуального адресного пространства (общее или принадлежащеетолько данной задаче).
Если TI = 0, то поле индекса указывает на элемент вглобальной таблице дескрипторов (GDT), то есть идет обращение к общей памяти. Если TI = 1, то идет обращение к локальной области памяти текущей задачи; это пространство описывается локальной таблицей дескрипторов (LDT).• Поле уровня привилегий идентифицирует запрашиваемый уровень привилегий(Requested Privilege Level, RPL).15 !Поле индекса (номер дескриптора)TIRPLРис. 4.4. Селектор сегментаОперационная система в процессе своего запуска инициализирует многие регистры, и прежде всего GDTR.
Этот регистр содержит начальный адрес глобальнойтаблицы дескрипторов (GDT) и ее размер. Как мы уже знаем, в GDT содержатсядескрипторы глобальных сегментов и системные дескрипторы.Для манипулирования задачами операционные системы поддерживают информационную структуру, которую мы уже раньше называли как дескриптор задачи (см. главу 1). Микропроцессоры с архитектурой IA32 поддерживают работу с наиболее важнойчастью дескриптора задачи, которая меньше всего зависит от операционной системы.Эта инвариантная часть дескриптора, с которой и работает микропроцессор, названасегментом, состояния задачи (Task State Segment, TSS). Перечень полей TSS показанна рис. 4.5.
Видно, что этот сегмент содержит в основном контекст задачи. Процессорполучает доступ к этой структуре с помощью регистра задачи (Task Register, TR).Регистр TR содержит индекс (селектор) элемента в GDT. Этот элемент представляет собой дескриптор сегмента TSS. Дескриптор заносится в теневую часть регистра (см. рис. 4.2). К рассмотрению TSS мы еще вернемся, а сейчас заметим, чтов одном из полей TSS содержится указатель (селектор) на локальную таблицу дескрипторов данной задачи. При переходе процессора с одной задачи на другуюсодержимое поля LDTR заносится микропроцессором в одноименный регистр.Инициализировать регистр TR можно и явным образом.Итак, регистр LDTR содержит селектор, указывающий на один из дескрипторовтаблицы GDT. Этот дескриптор заносится микропроцессором в теневую часть регистра LDTR и описывает таблицу LDT для текущей задачи.
Теперь, когда у нас108Глава 4. Особенности архитектуры м и к р о п р о ц е с с о р о в J80x86определены как глобальная, так и локальная таблица дескрипторов, можно рассмотреть процесс определения линейного адреса1. Для примера рассмотрим процесс получения адреса команды. Адреса операндов определяются по аналогии, нозадействованы будут другие регистры.Поля, определяемые ОС(их количество и составможет быть любым)3116150ЛАдрес карты ввода/вывода68пLTDRСегментные регистры ES, CS, SS, DS, FS, GS(на каждый регистр отведено по 4 байт,из которых используется только 2 младших)60h48hОбщие регистры (ЕАХ, ЕСХ, EDX, EBX, ESX,EBP, ESI, EDI)Собственно TSS(108 байт)28hРегистр флагов EFLAGS24hУказатель команд (регистр EIP)20hПривилегированные указатели стеков4Link0Рис.
4.5. Сегмент состояния задачиJМикропроцессор анализирует бит TI селектора кода и, в зависимости от его значения, извлекает из таблицы GDT или LDT дескриптор сегмента кода с номером(индексом), который равен полю индекса (биты 3-15 селектора на рис. 4.4). Этотдескриптор заносится в теневую (скрытую) часть регистра CS. Далее микропроцессор сравнивает значение регистра EIP (Extended Instruction Pointer — расширенный указатель команды) с полем размера сегмента, содержащегося в извлеченном дескрипторе, и если смещение относительно начала сегмента не превышаетразмера предела, то значение EIP прибавляется к значению поля начала сегмента,и мы получаем искомый линейный адрес команды. Линейный адрес — это одна изформ виртуального адреса.
Исходный двоичный виртуальный адрес, вычисляеВ микропроцессорах 180x86 линейным называется адрес, полученный в результате преобразованиявиртуального адреса формата (S, d) в 32-разрядный адрес.Адресация в 32-разрядных микропроцессорах i80x86109мый в соответствии с используемой схемой адресации, преобразуется в линейный.В свою очередь, линейный адрес будет либо равен физическому (если страничноепреобразование отключено), либо путем страничной трансляции преобразуетсяфизический адрес. Если же смещение из регистра EIP превышает размер сегмента кода, то эта аварийная ситуация вызывает прерывание, и управление должнопередаваться супервизору операционной системы.Регистр EIPИскомая командаДескрипторCSАдрес сегментаLTDRАдрес LDT!|i1<> LDT•К'ДескрипторGDTR (адрес GDT)1Сегменткода•Рис. 4.6. Процесс получения линейного адреса командыGDT110Глава 4, Особенности архитектуры микропроцессоров J80x86Рассмотренный нами процесс получения линейного адреса иллюстрирует рис.
4.6.Стоит отметить, что поскольку межсегментные переходы происходят нечасто,то, как правило, определение линейного адреса заключается только в сравнениизначения EIP с полем предела сегмента и в прибавлении смещения к началу сегмента. Все необходимые данные уже находятся в микропроцессоре, и операцияполучения линейного адреса происходит очень быстро.Итак, линейный адрес может считаться физическим адресом, если не включен режим страничной трансляции адресов. К сожалению, аппаратных средств микропроцессора для поддержки рассмотренного способа двойной трансляции виртуальных адресов в физические явно недостаточно. При наличии большого количестванебольших сегментов, из которых состоят программы, это приводит к заметномузамедлению в работе процессора.