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


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

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

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

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

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

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


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

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

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

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

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

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

 
 

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

Для манипулирования задачами ОС имеет информационную структуру, которую мы уже определили как дескриптор задачи (см. раздел «Понятия вычислительного процесса и ресурса», глава 1). Микропроцессор поддерживает работу с наиболее важной частью дескриптора задачи, которая меньше всего зависит от операционной системы. Эта инвариантная часть дескриптора, с которой и рабо­тает микропроцессор, названа сегментом состояния задачи (task state segment, TSS). Перечень полей TSS изображен на рис. 3.5. Видно, что в основном этот сегмент содержит контекст задачи. Процессор получает доступ к этой структуре с помощью регистра задачи (task register, 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. Процесс получения линейного адреса команды

 

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

 



Дата добавления: 2022-02-05; просмотров: 200;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.