Поддержка сегментного способа организации виртуальной памяти

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

106_______________ Глава 4. Особенности архитектуры микропроцессоров i80x86

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

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

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

Поддержка сегментного способа организации виртуальной памяти - student2.ru

Первое (младшее) двойное слово дескриптора Рис. 4.3. Дескриптор сегмента

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

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

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

Поддержка сегментного способа организации виртуальной памяти - student2.ru 1 Естественно, совместимость обеспечена только «снизу вверх», то есть программы, разработанные для предыдущих версий микропроцессора, должны выполняться на последующих без какой-либо переделки.

Адресация в 32-разрядных микропроцессорах j80x86_________________________ 107

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

- Поле индекса (Index) — старшие 13 битов (3-15) определяет собственно номер
сегмента (его индекс в соответствующей таблице дескрипторов).

- Поле индикатора таблицы сегментов (Table Index, TI) — бит с номером 2 опре­деляет часть виртуального адресного пространства (общее или принадлежащее только данной задаче). Если TI=0, то поле индекса указывает на элемент в глобальной таблице дескрипторов (GDT), то есть идет обращение к общей па­мяти. Если TI = 1, то идет обращение к локальной области памяти текущей за­дачи; это пространство описывается локальной таблицей дескрипторов (LDT).

- Поле уровня привилегий идентифицирует запрашиваемый уровень привилегий
(Requested Privilege Level, RPL).

Поддержка сегментного способа организации виртуальной памяти - student2.ru

Рис. 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. Для примера рассмотрим про­цесс получения адреса команды. Адреса операндов определяются по аналогии, но задействованы будут другие регистры.

Поддержка сегментного способа организации виртуальной памяти - student2.ru

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

Микропроцессор анализирует бит TI селектора кода и, в зависимости от его значе­ния, извлекает из таблицы GDT или LDT дескриптор сегмента кода с номером (индексом), который равен полю индекса (биты 3-15 селектора на рис. 4.4). Этот дескриптор заносится в теневую (скрытую) часть регистра CS. Далее микропро­цессор сравнивает значение регистра EIP (Extended Instruction Pointer — расши­ренный указатель команды) с полем размера сегмента, содержащегося в извлечен­ном дескрипторе, и если смещение относительно начала сегмента не превышает размера предела, то значение EIP прибавляется к значению поля начала сегмента, и мы получаем искомый линейный адрес команды. Линейный адрес — это одна из форм виртуального адреса. Исходный двоичный виртуальный адрес, вычисляе-

Поддержка сегментного способа организации виртуальной памяти - student2.ru 1 В микропроцессорах i80x86 линейным называется адрес, полученный в результате преобразования виртуального адреса формата (S, d) в 32-разрядный адрес.

Адресация в 32-разрядных микропроцессорах i80x86_________________________ 109

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

Поддержка сегментного способа организации виртуальной памяти - student2.ru

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

110_______________ Глава 4. Особенности архитектуры микропроцессоров j80x86

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

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

Наши рекомендации