Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать
  1. Глобальной таблице дескрипторов (gdt);

  2. Локальной таблице дескрипторов (ldt).

Таблица дескрипторов - это просто массив из 8 байтовых записей, которые содержат дескрипторы, как показано на рис. 3.16. Таблица дескрипторов имеет переменную длину и может содержать до 8192 (213) дескрипторов. Однако первая запись GDT (ИНДЕКС = 0) не используется для размещения дескриптора.

Процессор размещает GDT и текущую LDT в памяти посредством регистров GDTR и LDTR. Эти регистры хранят базовые адреса таблиц в линейном адресном пространстве, а также пределы сегментов таблиц. Команды LGDT и SGDT обеспечивают доступ к регистру GDTR, команды же LLDT и SLDT - доступ к LDTR

Селекторы. Область селектора из логического адреса задает деск­риптор, специфицируя таблицу дес­крипторов и индексируя дескриптор внутри этой таблицы. Селекторы мо­гут быть «видны» прикладным про­граммам как поле внутри изменяю­щихся указателей команд, но значе­ния селекторов обычно вырабатыва­ются редакторами связей и загрузчи­ками. На рис. 3.17. представлен фор­мат селектора.

Индекс: задает один из 8192 дес­крипторов в таблице дескрипторов. Процессор просто умножает значе­ние индекса на 8 (длина дескрипто­ра) и прибавляет этот результат к ба­зовому адресу таблицы дескрипто­ров для доступа к соответствующе­му дескриптору сегмента в таблице.

Индикатор таблицы (TI): определяет, на какую таблицу дескрипторов ссылается се­лектор: нуль указывает GDT, единица -текущую LDT.

Запрашиваемый уровень привилегий: используется механизмом защиты.

Так как первая запись GDT не используется процессором, селектор с индексом «О» и нулевым указателем таблицы (т. е. селектор, который определяет первую запись GDT), может быть использован как нуль-селектор. При загрузке сегментного регистра (кроме CS или SS) нуль-селектором процессор не вырабатывает исключения. Это свойство полезно при инициализации неиспользованных сегментных регистров как средство обнаружения случайных ссылок. Если сегментный регистр используется для обращения к памяти, будет выработано исключение.

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

Каждый регистр сегмента имеет «видимую» и «скрытую» часть, как показано на рис. 3.18. Видимыми частями этих регистров манипулируют программы, как если бы эти регистры были просто 16-разрядными регистрами. Скрытые части контролируются процессором. Операции, которые загружают регистры, реализуются обычными командами программы.

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

3.3.2. Адресация физической памяти

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

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

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

Таблицы страничных директорий и таблицы страниц также доступны в порядке адре­сов памяти (режим «младший крайний»).

Практически во всех МП необходимо следующее выравнивание адресов на адреса цело­численных границ (любое несоответствие вызывает ловушку обращения к данным):

  • 128-разрядные значения должны быть размещены в памяти по адресу, соответствующему целочисленной границе для 16-байтового формата (т. е. четыре младших разряда адреса должны быть нулевыми);

  • 64-разрядные данные должны размещаться в памяти по адресу, соответствующему целочисленной границе для 8-байтового формата (т. е. по адресу, кратному 8, три младших разряда адреса должны быть нулевыми);

32-разрядные данные размещаются по адресу целочисленной границы для 4-байтового

формата (т. е. по адресу, кратному 4, два младших разряда адреса нулевые);

16-разрядные данные выравниваются по целочисленной границе для 2-байтового форма-

та (т. е. их адреса должны быть кратны 2, младший разряд адреса нулевой).

Программы, получающие на вход программу в машинном коде или в виде загрузочных и объектных модулей и выдающие на выходе эквивалентные программы на языке Ассемблера. (т. е. без обращения к резидентной таблице дескрипторов).

директорий содержит до 1К записей, которые адресуют или таблицы страниц второго уровня или 4-Мбайтные страничные кадры. Могут использоваться или только 4-Кбайт-ные или только 4-Мбайтные страницы, или некоторая комбинация тех и других. Одна таблица страничных директорий может перекрыть все 4-Гбайтное физическое адресное пространство (1К записей страничных директорий 4 Мбайта страницы или 1К записей страничных директорий 1К записей таблицы страниц соответствующей страничной ди­ректории 4 Кбайта страницы).

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

Записи таблиц страниц. На рис.3.21 представлены форматы записей таблиц страниц (PTEs - Page table entries).

Адрес страничного кадра. Поле адреса страничного кадра специфицирует физический начальный адрес страничного кадра. В записи страничной директории адрес страничного кадра является или адресом таблицы страниц второго уровня или адресом 4-Мбайтного стра­ничного кадра, который содержит требуемый операнд памяти. В таблице страниц второго уровня, адрес страничного кадра - это адрес 4-Кбайтного страничного кадра, содержащего требуемый операнд памяти.

Разряд присутствия. Разряд присутствия Р (Present) указывает на то, может ли за­пись таблицы страниц использоваться при страничной трансляции. Значение Р = 1 свиде­тельствует о возможности использования записи. Если Р = 0 в записях таблиц страниц любого уровня, запись не корректна для адресной трансляции и остаток записи может ис­пользоваться ПО. Ни один из оставшихся разрядов записи не проверяется аппаратурой.

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

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

Разряды «Право записи» и «Пользователь/супервизор». Разряды «право записи» R/W и «пользователь» U/S предназначены для защиты уровня страниц, которую МП реали­зует в процессе трансляции адреса. Концепция привилегий реализуется для страниц пу­тем отнесения каждой страницы к одному из двух уровней:

  1. уровень супервизора (U/S=0) - для программ ОС и других систем ПО и связанных сними данных;

  2. уровень пользователя (и/3=1)-для прикладных программ и данных.

Разряд U в регистре psr указывает на то, в каком режиме («пользователь» или «супер­визор») работает процессор. МП изменяет содержимое разряда U регистра psr следующим образом:

  1. сбрасывает разряд U регистра psr, чтобы инициировать уровень «супервизора», при возникновении ловушки в том числе, если ловушка вызвана командой ловушки trap («ло­вушка»); предыдущее значение U копируется в разряд PU (Prior user);

  2. переписывает содержимое разряда PU регистра psr в разряд U этого регистра, если выполняется косвенная передача управления и один из разрядов ловушек установлен; если PU содержал единицу, МП переходит на уровень «пользователя». С помощью разряда U из регистра psr и разрядов U/S и R/W из записей таблиц страниц МП осуществляет следующие правила защиты:

  • с уровня «пользователь» попытка чтения или записи страницы уровня «супервизор» приводит к ловушке;

  • с уровня «пользователь» попытка записи в страницу, для которой разряд R/W не уста­новлен, приводит к ловушке;

  • с уровня «пользователь» запись в основную память содержимого некоторых управляющих регистров по команде сохранения игнорируется;

  • на уровне «пользователь», привилегированные команды не работают.

При работе МП на уровне «супервизор» все страницы доступны для чтения. Возмож­ность записи в какую-либо страницу зависит от режима защиты по записи, индицируемого разрядом WP регистра epsr: WP = 0 - запись возможна во все страницы WP = 1 - запись в страницу, разряд W которой не установлен, вызывает ловушку.

Если МП работает на уровне «пользователь», только страницы, принадлежащие уров­ню «пользователь» и с правом записи (R/W = 1) -действительно доступны для записи. С уровня «пользователь» страницы, принадлежащие уровню «супервизор», недоступны ни для записи, ни для чтения.

Разряд сквозной записи (WT -Write-Through). МП реализуют алгоритмы обратной запи­си и сквозной записи для кэш-памятей команд и данных, размещенных в кристалле МП. Если разряд WT установлен, то используется алгоритм сквозной записи для данных из соответ­ствующей страницы. Если разряд WT = 0, то для данных из этой страницы используется алго­ритм обычной обратной записи.

Для 4-Мбайтных страниц используется разряд WT из записи страничной директории. Для 4-Кбайтных страниц используется только разряд WT из записи таблицы страниц второго уровня.

Значение разряда WT управляет уровнем потенциала на выходном контакте МП PWT. Это позволяет использовать для кэш-памяти второго уровня тот же алгоритм обновления основной памяти, что и для кэш-первого уровня.

Разряд «кэш-память запрещена» (отключена). Если разряд CD (cache disable - кэш­память отключена) установлен, то данные из страницы не размещаются в кэш-памятях команд или данных (безотносительно к значению разряда WT). При нулевом содержимом разряда CD процессор помещает данные во внутренние кэш-памяти.

Для 4-Мбайтных страниц используется разряд CD из записи страничной директории. Для 4-Кбайтных страниц используется только разряд из записи таблицы страниц второго уровня.

Значение разряда CD управляет уровнем на внешнем контакте PCD, так что возмож­ность копирования во внутренних и внешней КЭШ-памятях одинакова.

Разряды «Доступа» и «Грязи». Разряды «Доступа» A (accessed) и «Грязи» D (dirty) обеспечивают операционную систему данными об обращениях к странице в таблицах стра­ниц обоих уровней.

МП устанавливает разряд А до записи или чтения при обращении к странице. Для 4-Кбайтных страниц МП устанавливает разряды А в записях таблиц страниц обоих уровней.

Процессор проверяет разряд «грязи» D перед записью и при некоторых условиях выра­батывает ловушки. Обработчик ловушки затем может проанализировать соответствующие значения разрядов «грязи». Для 4-Мбайтных страниц используется разряд D из записи страничной директории, а для 4-Кбайтных страниц - разряд D только из записи таблицы страниц второго уровня.

ОС, поддерживающая страничную память, может воспользоваться разрядами D и А для выбора страниц, подлежащих удалению из физической памяти, когда запросы на па­мять превышают возможности физической памяти. Разряды D и А обычно сбрасываются в «О» по инициативе ОС. Процессор устанавливает разряд А при обращении к странице при операции записи или чтения. Если при обращении к данным происходит ошибка и вы­полняется разрешенная запись, обработчик ловушки устанавливает разряд D, затем по­вторно выполняет команду.

ОС несет ответственность за координацию обновлений этих разрядов центральным процессором или другими процессорами, которые могут разделять эти страницы.

Алгоритм адресной трансляции. Процесс трансляции линейного адреса в физический проходит по следующему алгоритму. Положим, что «Директория» (DIR), «Страница» (PAGE) и «Смещение» (OFFSET) являются полями линейного адреса; пусть PFA1 и PFA2 являются соответственно адресными полями страничных кадров из записей таблиц страниц первого и второго уровней (PDE и РТЕ); DTB - базовый адрес таблицы страничных директорий, содержащийся в регистре базового адреса таблицы страничных директорий (в МП «Intel» -управляющий регистр CR3).

  1. Читается запись страничной директории (PDE) по физическому адресу, сформиро­ванному по полям DTB:DIR:OO.

  1. Если в PDE разряд Р равен нулю, генерируется ошибка обращения к данному или команде.

  2. Если в PDE разряд R/W равен нулю, выполняется запись, и, если или разряд U в регис­тре psr установлен или разряд WP установлен, то генерируется ошибка обращения к данному.

  3. Если в PDE разряд U/S в нуле и установлен разряд U в регистре psr, генерируется ошибка доступа к данному или команде.

  4. Если в PDE разряд доступа А нулевой и имеет место кэш-промах при обращении к буферу ассоциативной трансляции TLB в блокированной последовательности, генери­руется ошибка доступа к данному или команде. (Данная ловушка позволяет ПО устано­вить разряд А в «1» и осуществить рестарт последовательности. Это помогает аппарату­ ре внешней магистрали недвусмысленно установить тот факт, что адрес cсоответствует закрытому семафору).

  5. Если в PDE разряд 7 находится в единице (4-Мбайтная страница) и выполняется операция записи, и в PDE разряд «грязи» 0 = 0, генерируется ошибка доступа к данному.

  6. Если в PDE разряд А = 1, перейти к шагу 11, в противном случае возбуждается сигнал на контакте LOCK#.

  7. Выполняется чтение PDE подобно тому, как это делалось на шаге 1, и проверяются разряды Р, W, U аналогично шагам со 2-го по 4-й.

  8. Записывается PDE с разрядом доступа А, равным единице.

  1. Снимается сигнал блокировки на контакте LOCK#. .....

  2. Если в PDE разряд 7 в единице (4-Мбайтная страница), формируется физический адрес из полей PFA1 :OFFSET и осуществляется выход из алгоритма страничной трансля­ции. В этом случае поле PFA1 является 10-разрядным, а поле OFFSET - 22-разрядным.

  3. Остальные шаги выполняются для 4-Кбайтных страниц. Если в PDE разряд доступа А был перед началом трансляции нулевым, возбуждается сигнал блокировки на контакте LOCK#.

  4. Выбирается запись страничной директории РТЕ по физическому адресу, сформиро­ванному по полям: PFA1 :PAGE:OO.

  5. Выполняются проверки разрядов А, Р, W, итак же как это делалось в шагах со 2-го по 5-й только по записи РТЕ таблицы страниц второго уровня. Если в РТЕ разряд А в нуле и имел место кэш-промах в блокированной последовательности, вырабатывается ошибка доступа к данному или команде. Сигнал на контакте LOCK# остается активным.

  6. При операции записи и нулевом значении разряда D в РТЕ генерируется ошибка доступа к данному.

  7. Если разряд доступа А в PDE до того как началась трансляция уже установлен и разряд А в РТЕ уже также установлен, осуществляется переход к шагу 20.

  8. Если контакт LOCK# уже не активен, он возбуждается и повторно выбирается запись РТЕ.

  9. Делаются проверки разрядов U, W, P и установка разряда А в РТЕ подобно тому как, это делается в шагах 8-9. Делается блокированное обновление записи РТЕ, чтобы разблокировать магистраль, даже если разряд доступа А в РТЕ уже в единице.

  10. Сбрасывается сигнал на контакте LOCK#.

  11. Формируется физический адрес из полей PFA2:OFFSET. В этом случае поле PFA2 - 20-разрядное, а поле OFFSET- 12-разрядное.

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

МП предполагает, что страничные директории и таблицы страниц представлены в основ­ной памяти в формате «младший крайний» (в порядке возрастания адресов памяти с зада­нием адреса формата адресом младшего байта). ОС должна перевести эти таблицы в фор­мат «младший крайний» или путем установки в «О» разряда BE (Big endian) при манипуляци­ях с таблицами или путем дополнения двойкой 32-разрядного адреса при загрузке или сохра­нении записей).

Ошибки адресной трансляции. Ошибка адресной трансляции может возникнуть вслед­ствие или ошибки доступа к команде, или ошибки доступа к данному.

Команда, вызвавшая ошибку, может быть повторно выполнена при возврате из обра­ботчика ловушки.