Содержание

Система страничной памяти

     Исчерпывающая поддержка страничной памяти встроена в 80386.
 Наиболее известное достоинство такой организации -  это  полная
поддержка  страничной	виртуальной   памяти.	 Она   позволяет
программисту использовать больший об`ем оперативной памяти,  чем
физически реализованной в  системе.   Полный  перечень	полезных
возможностей, которые дает  страничный	диспетчер  памяти  (MMU)
включает:
     1) адресную защиту для простых защищенных систем, наподобие
тех, которые описаны в разделе 8.
     2) страничную   виртуальную    память,	 предоставляющую
программисту большее  адресное	пространство,  чем  имеющееся  в
действительности в системной оперативуной памяти.
     3) реализованную	на   кристалле	 стандартизацию   защиты
операционной  системы  и  программного	обеспечения  виртуальной
памяти.
     4) реализацию  на	кристалле,  снижающую  загрузку  шины  и
ликвидирующую межкристальные задержки распространения сигналов.
     5) реализацию на кристалле, имеющую малые затраты, так  как
используется  приблизительно  только  10%  площади   кремниевого
кристалла,   снижающая	 дополнительную   стоимость   страничной
виртуальной памяти практически до пренебрежимо малой величины.
     Система страничной памяти может быть включена при работе  в
защищенном   режиме.	Включение   или   отключение   механизма
страничной памяти выполняется  программно  и  только  из  уровня
привилегии 0.
		     

Страничная структура

Страничная структура разбивает линейное адресное пространство на 1...048576 страниц по 4096 байт каждая. Рис. 9.1 иллюстрирует концепцию страничного пространства памяти. Виртуальное адресное пространство показано слева, физическое адресное пространство - справа. Единый размер всех страниц позволяет загружать любую требуемую виртуальную страницу в любую физическую страницу. Это является ключевой причиной того, что страничная организация является, в общем случае, предпочтительным способом реализации виртуальной памяти. Как показано на рис. 9.1, пространство виртуальной памяти обычно значительно больше, чем имеющееся пространство физической памяти, что является результатом физических и экономических ограничений. Поэтому, в каждый момент времени только часть страниц виртуальной памяти размещена в физической памяти. Страницы, отсутствующие в физической памяти, как правило хранятся в устройстве вторичной памяти, такой, как жесткий диск. Страничная система с подкачкой по требованию (demand paging), как иногда называют страничную память, явно подчеркивает тот факт, что пользовательская программа не осведомлена о процессах, связанных со страничной организацией.Термины paging и demand paging являются синонимами и означают, что программа может использовать все виртуальное пространство по своему усмотрению. Архитектура процессора генерирует прерывание по исключительной ситуации при любой попытке доступа к странице, которая отсутствует в памяти. Это прерывание позволяет программе-супервизора вмешаться, при необходимости, невидимо для программы пользователя, для загрузки всех необходимых страниц, по мере того, как они требуются программе пользователя. Под управлением супервизора старые страницы из физической памяти сохраняются на диске до того, как новые страницы загружаются в нее.

Включение/выключение страничной адресации

Разряд 31 регистра управления CR0 (см. рис. 9.2) управляет включением/выключением страничной адресации. Этот разряд, называемый PG, включает страничную адресацию при установке в 1 и отключает ее при установке в 0. В защищенном режиме инструкция управления процессором MOV CR0, используется для записи в CR0 (см. табл. 3.9). Поскольку эта инструкция может быть выполнена в защищенном режиме, страничная адресация может быть включена или выключена только в этом режиме. Страничная адресация остается включенной в режиме "Виртуальный 8086" (см. раздел 12), который конечно является предпочтительным, поскольку это позволяет программам работать в режиме "Виртуальный 8086", как часть системы с виртуальной памятью.

Выравнивание границ страниц и сегментов

Границы страниц следуют с регулярным интервалом в 4096 байт. Границы сегментов полностью произвольны и зависят от базы и ограничения каждого сегмента. Таким образом, строго говоря, границы страниц и сегментов не зависят друг от друга и не должны выравниваться между собой. Сегменты определяются одним набором таблиц (GDT и LDT), в то время как страницы определяются другим набором: таблицами страниц. Однако, в целях оптимизации производительности, маленькие сегменты (4096 байт и менее) следует выравнивать так, чтобы каждый располагался в одной странице. Это применимо, в частности, к таким малым сегментам, как сегмент состояния задачи, описанный в разделе 8. Выравнивание в одной странице гарантирует, что при загрузке одной страницы загрузится весь сегмент.

Сравнение уровня привилегии страниц и сегментов

Уровни привилегии страниц называются "пользовательский" и "супервизорский". Уровни привилегии для страниц имеют номера 0,1,2 и 3. Уровень 3 соответствует "пользовательскому", 0,1,2 - супервизорскому.

Процесс трансляции страничного адреса

Процесс страничной трансляции представляет собой замену старших 20 разрядов 32-разрядного линейного адреса-номер виртуальной страницы на 20-разрядную величину-номер физической страницы. Страничная трансляция является последним этапом процесса вычисления адреса. Этот этап иллюстрирован в описании обобщенного процесса адресации на рис. 4.2 и 7.2.

Таблицы трансляции

Результат трансляции (то есть номер физической трансляции) определяется по таблицам трансляции, расположенным в памяти. 80386 автоматически читает таблицы трансляции, когда необходимо, при трансляции виртуальных адресов операндов в память. Таблицы трансляции организованы в двухуровневую иерархию. Таблицей корневого уровня является таблица каталога таблиц страниц или, просто, каталог таблиц страниц, содержащий 1024 элемента, каждый из которых указывает на таблицу нижнего уровня иерархии. Таким образом, до 1024 таблиц страниц нижнего уровня поддерживается каталогом. В отличие от одной линейной таблицы трансляции, иерархическая организация позволяет избежать резервирования большой непрерывной зоны линейных адресов для хранения таблицы трансляции. Иерархическая организация также поддерживает разбросанные деревья преобразования адресов, где только несколько строк каталога таблиц страниц указывают на таблицы страниц. Иерархия позволяет присваивать атрибуты защиты строкам каталога для 4М-байтной гранулярности или строкам таблиц страниц для 4К-байтной (на одну страницу) гранулярности. Рис. 9.4 иллюстрирует эти таблицы. Регистр управления CR3 "заякоривает" табличную структуру, поскольку он указывает на таблицу каталога таблиц страниц. Каждая строка таблицы каталога указывает на страницу, содержащую таблицу страниц. В свою очередь, каждая строка таблицы страниц указывает на страницу физической памяти.

Строка каталога таблиц страниц

Каталог таблиц страниц содержит 1024 строки. Каждая строка указывает на таблицу страниц через ее физический базовый адрес и другую информацию. Строка каталога, показанная на рис. 9.5. определяется следующим образом: 1. Поле "адрес таблицы страниц" определяет старшие 20 разрядов физического базового адреса таблицы страниц. Поскольку таблица страниц выровнена по границе страницы в физической памяти, т.е. по 4096-байтовой границе, ее младшие 12 разрядов базового адреса-нули. 2. Поле "для использования OC" представляет собой совокупность 3-х разрядов, выделенных под использование операционной системы. 80386 автоматически никогда не изменяет эти разряды. Примером использования этих разрядов может служить хранение информации о старении таблицы страниц. Если этих трех разрядов не достаточно для хранения всей дополнительной информации о таблицах страниц, операционная система может создать отдельный массив в памяти для хранения необходимой информации. 3. Бит D ("грязная") указывает, была ли осуществлена запись операнда в какую-либо из 1024 страниц, обслуживаемых данной строкой (D=1), или нет (D=0). Если D=1, то копия по крайней мере одной из страниц, хранящихся на диске, устарела, и супервизорная программа должна записать соответствующую (ие) страницу (ы) на диск, прежде чем заменить ее (их) в памяти. 4. Бит А ("был факт доступа") указывает, была ли осуществлена операция чтение/запись по крайней мере в одну из 1024 страниц (А=1) или нет (А=0). Этот бит полезен, если операционная система набирает статистику об использовании страниц. 5. Бит U/S ("пользователь/супервизор") в общем случае указывает статус защиты, присвоенный 1024 страницам, описываемым соответствующей таблицей страниц. Полная интерпретация представлена в таблице 9.1. 6. Бит R/W ("чтение/запись") в общем случае указывает защиту от записи для 1024 страниц, описываемых соответствующей таблицей страниц. Для полной интерпретации этот бит должен быть рассмотрен совместно с битом U/S. См. таблицу 9.1. 7. Бит Р ("наличие") указывает, имеется ли в физической памяти соответствующая таблица страниц (Р=1) или нет (Р=0). Разряды, отмеченные 0, должны быть инициализированы во время создания каталога таблиц страниц в памяти. Эти разряды не изменяются 80386 и зарезервированы для будущего применения.

Строка таблицы страниц

Таблица страниц содержит 1024 строки. Каждая строка указывает на страницу памяти через ее базовый адрес и другую информацию. 1. Поле "адрес страницы" определяет старшие 20 разрядов адреса физической страницы. Поскольку страница выровнена по страничной границе, т.е. по 4096-байтовой границе, ее младшие 12 разрядов базового адреса-нули. 2. Поле "для использования ОС" представляет собой совокупность 3-х разрядов, выделенных для использования операционной системой. 80386 автоматически никогда не изменяет эти разряды. Примером использования этих разрядов может служить хранение информации о старении страниц. Если этих трех разрядов не достаточно для хранения всей дополнительной информации о страницах, операционная система может создать отдельный массив в памяти для хранения этой информации. 3. Бит D ("грязная") указывает, была ли осуществлена какая-либо запись в страницу (D=1) или нет (D=0). Если D=1, то копия этой страницы, содержащаяся на диске, устарела, и супервизорная программа должна записать эту страницу обратно на диск прежде, чем затереть ее в памяти. 4. Бит А ("был факт доступа") указывает, была ли осуществлена операция чтения или записи к какой-либо ячейке в странице (А=1) или нет (А=0). Этот бит полезен, если операционная система набирает статистику об использовании страниц. 5. Бит U/S ("пользователь/супервизор") в общем случае указывает статус защиты, присвоенный странице. Полная интерпретация этого бита представлена в таблице 9.1. 6. Бит R/W ("чтение/запись") в общем случае указывает защиту от записи в страницу. Для полной интерпретации этот бит должен быть рассмотрен совместно с битом U/S. См. таблицу 9.1. 7. Бит Р ("наличие") указывает, имеется ли в физической памяти соответствующая страница (Р=1) или нет (Р=0). Разряды, отмеченные 0, должны быть инициализированы во время создания таблицы страниц в памяти. Эти позиции не изменяются 80386 и зарезервированы для будущего применения.

Защита страниц

В строке каталога таблиц страниц разряды U/S и R/W используются в качестве атрибутов защиты всех страниц в таблице страниц. Эти разряды в строке каталога таблицы страниц применимы по отношению ко всем 1024 страницам, описываемым этой строкой каталога. В строке таблицы страниц разряды U/S и R/W обеспечивают подобную защиту для страницы. Биты U/S и R/W в строке таблицы страниц применимы только по отношению к странице, описываемой этой строкой. Оба уровня таблиц используются при страничной трансляции. Поэтому защита, применяемая по отношению к данной странице, определяется наиболее ограничивающей комбинацией битов U/S и R/W. Понятие "наиболее ограничивающая комбинация" означает наименьшее значение супервизорного статуса и статуса "исключительно чтения", т.е. наименьшее значение комбинации [U/S:R/W] является более ограничивающей величиной, и поэтому именно оно и используется. Например, для страницы с комбинацией U/S:R/W ,равной 10 в строке каталога таблицы и 10 в строке таблицы, наиболее ограничивающее значение-01 в строке таблицы страниц. Наиболее ограничивающие значения комбинаций, используемых при защите, показаны в таблице 9.1. Правила доступа к сегментам также применяются ко всем обращениям в память. В конечном итоге используются самые ограничивающие правила, независимо от того, являются ли они правилами обращения к сегментам или к страницам. Заметим, что защита по принципу "исключительно выполнение" задается только правилами сегментного доступа. Правила доступа к сегментам также применяются ко всем обращениям в память. В конечном итоге используются самые ограничивающие правила, независимо от того, являются ли они правилами обращения к сегментам или к страницам. Заметим, что защита по принципу "исключительно выполнение" задается только правилами сегментного доступа. Например, если данные размещены в сегменте данных, отмеченном как только читаемый, а какая-либо страница отмечена, как читаемая/записываемая, доступ к данным допустим только для чтения из-за более ограничивающих правил сегментного доступа. Второй пример: если создан сегмент программы уровня 3, но содержащий некоторые страницы, помеченные как "уровень супервизора", тогда при CPL=3 могут быть выполнены только те страницы программного сегмента, которые помечены как "пользовательский уровень". Этот второй пример очень типичен для 32-х разрядной простой системы с защитой, рассмотренной в разделе 8. Использование страничной адресации в простой защищенной системе описано на странице.

Процесс трансляции в деталях

В процессе страничной трансляции старшие 20 разрядов 32-х разрядного линейного адреса заменяются 20 разрядами, полученными из таблицы страницы. Таким образом, 80386 формирует новый 32-х разрядный адрес, используемый для обращения в физическую память. Фигура 9.7 показывает, как части линейного адреса используются в качестве индекса в каждом уровне иерархии таблиц трансляции для трансляции линейного адреса в физический адрес. Сначала старшие 10 разрядов используются в качестве индекса к каталогу таблиц страниц для обращения к одной из 1024 строк, выбирая тем самым одну из таблиц страниц. Следующие 10 разрядов используются в качестве индекса к выбранной таблице страниц для обращения к одной из 1024 строк, соответствующей нужной странице. 20-разрядный номер выбранной страницы затем заменяет старшие 20 разрядов линейного адреса. Так формируется 32-разрядный физический адрес. Заметим, что все страницы виртуальной памяти и страницы физической памяти выровнены по 4096-байтовой границе. Благодаря этому соответствию, страничная трансляция не воздействует на младшие 12 разрядов линейного адреса-смещения в странице.

Использование страничной организации для защиты системы

Страничная организация сама придает системе свойство защиты, благодаря тому, что строки каталога таблиц страниц и строки таблиц страниц содержат информацию об уровне привилегии (бит U/S), и информацию о правилах использования (бит R/W). Любое обращение к памяти, выполняемое 80386, должно успешно пройти контроль защиты на уровне сегментной адресации и контроль защиты на уровне страничной адресации. Эти контрольные процедуры проверяют, что CPL (см. стр. ) имеет адекватный уровень привилегии для доступа к сегменту с данным DPL и к странице с данным уровнем U/S. Это также означает, что доступ должен быть допустим в терминах правил доступа к сегментам и правил доступа к страницам. В контексте простой 32-разрядной системы, как в разделе 8, система страничной памяти может быть использована для ограничения доступа пользователя к определенной зоне линейных адресов. В особенности когда сегменты пользовательской программы и данных пользователя занимают каждая по целому 4-гигабайтовому линейному адресному пространству, система страничной адресации может ограничить зону адресов, доступных пользователю, до меньшей области. Пространство пользователя может быть собрано путем пометки различных страниц, как страницы супервизора (U/S=0). Окончательные требования, пред`являемые к успешному доступу к странице: бит Р ("наличие") в строке каталога таблиц страниц и в строке таблицы страницы должен быть установлен в 1, что означает состояние наличия. В системе, использующей страничную организацию для защиты, а не для поддержки виртуальной памяти, все разряды Р должны быть установлены в 1.

Использование страничной организации памяти для виртуальной памяти

Механизм страничной организации 80386 может быть легко использован для обеспечения виртуальной памяти для программиста. В системе с виртуальной памятью бит Р может быть как 0, так и 1, но он всегда должен точно отображать состояние виртуальной страницы: "в памяти"/"на диске". Операционная система ответственна за точное отслеживание состояния битов Р. Они никогда автоматически 80386 не изменяются, хотя 80386 автоматически ссылается на соответствующий бит Р при каждом обращении в память. Этот бит поддерживает страничную виртуальную память. Для каждого обращения в память проверяются биты Р в каталоге таблиц страниц и в таблице страниц. Если Р=1 в каталоге таблицы страниц и в таблице страниц, страница в наличии, и сразу же производится трансляция адреса в физический. Если любой разряд Р равен 0, обращение к памяти не делается. Вместо этого обнаруживается ошибка страницы, и процессор генерирует прерывание из-за исключительной ситуации. Исключительная ситуация 14 присвоена условию ошибки страницы. Построение процессора 80386 гарантирует, что все ошибки страниц перезапускаемы; следовательно, выполнение программы, вызвавшей исключительную ситуацию, может быть возобновлено после того, как нужная страница будет перенесена в физическую память в таблицах трансляции будет обновлен адрес физической страницы и правильное значение бита Р.

Требования к наличию страниц в системе с виртуальной памятью

Когда механизм страничной адресации используется для обеспечения виртуальной памяти, большая часть линейного адресного пространства отсутствует в физической памяти в каждый момент времени. Однако, некоторые программы и структуры данных должны быть резидентны всегда, как описано в этом разделе и в таблице 9.2. Эти области никогда не должны выноситься на диск. В системе со страничной памятью каталог таблиц страниц всегда должен оставаться в памяти; это разумное требование, так как к нему, как к таблице первого уровня, обращаются всякий раз, когда требуются таблицы страниц. Вся программа обслуживания исключительной ситуации "ошибки страниц" (прерывание по исключительной ситуации 14); программа обслуживания, которая переносит необходимые страницы в физическую память, должна сама постоянно находиться в памяти. В противном случае ни одна страница успешно не сможет быть перенесена в физическую память без того, чтобы не вызвать другую исключительную ситуацию "ошибка страницы". Аналогичное рассуждение применимо к другим структурам, которые должны оставаться в памяти. Для начального вызова программы обслуживания ошибки страницы (программа обслуживания исключительной ситуации 14) IDT и GDT должна находиться в памяти, поскольку IDT дает переключатель указанной исключительной ситуации, и GDT дает дескрипторы сегментов программы обслуживания и данных. TSS должен быть в наличии, поскольку он дает указатель стека для стека уровня 0, используемого программой обслуживания. Сам стек уровня 0 должен, следовательно, быть в памяти. По той же причине таблицы страниц, используемые при трансляции адреса для IDT, GDT, TSS, стека уровня 0 и сегментов программы обслуживания и данных, должны оставаться в памяти. Одна таблица страниц может легко обрабатывать адресное отображение для всех этих структур. Оставшиеся таблицы страниц могут не оставаться в памяти; они могут быть отправлены на диск, и бит Р в соответствующих им строках в каталоге таблиц страниц может быть сброшен в 0, указывая, что их нет в памяти. С точки зрения замедления реакции на прерывания, однако, крайне желательно, чтобы в памяти оставались коды часто используемых программ обслуживания прерываний. Исходя из соображения общей производительности, крайне желательно держать в физической памяти возможно больше часто используемых других программ и данных.

Буфер ускорения трансляции (TLB)

Для ускорения процесса трансляции адреса 80386 имеет на кристалле быструю кэш-память, содержащую последние (по времени использования) результаты трансляции адреса. Эта кэш-память называется буфером ускорения трансляции; этот термин заимствован из архитектуры больших ЭВМ, в которых такие кэш-памяти впервые были реализованы. TLB 80386 хранит 32 значения оттранслированных номеров страниц, соответствующих 32-м номерам виртуальных страниц. В любой момент времени, когда линейный адрес принадлежит одной из этих 32-х виртуальных страниц, TLB может немедленно выдать для трансляции соответствующее значение номера физической страницы. Доступ в TLB, который производится при каждом обращении в память, называется просмотром TLB. Поскольку просмотр TLB занимает только 1/2 периода тактового сигнала, TLB значительно ускоряет процесс страничной трансляции. TLB позволяет избежать частых обращений к резидентным таблицам страниц в памяти. Если бы 80386 не имел TLB, он бы обращался к таблицам трансляции при каждом обращении в память. Вследствие того, что он содержит 32 последних оттранслированных значения, TLB выполняет немедленную трансляцию приблизительно в 98-99% обращений в память. Это не неожиданный показатель, поскольку 32 страницы покрывают 128 КБайт. Большинство программ в каждый момент времени проявляют свойство локальности ссылок, означающее, что они выполняют большинство обращений в память в относительно узкой зоне виртуальных адресов (обычно суммарно в пределах 128 К). Принцип локальности позволяет TLB работать эффективно. Однако, если линейный адрес не принадлежит виртуальной странице, отображаемой TLB, 80386 автоматически определяет номер физической страницы путем обращения к каталогу таблиц страниц и к таблице страниц, размещенных в памяти, как показано на рис. 9.8. Одновременно 80386 заменяет одну из старых строк TLB на новую информацию, полученную в процессе трасляции. Таким образом, содержимое TLB отражает результаты недавно выполненной страничной трансляции.

Организация TLB

Тридцать две строки TLB организованы в четыре набора по 8 строк в каждой. Эта организация из четырех наборов обычно называется 4-канальной множественно-ассоциативной. Ассоциативность показывает, что кэшевые наборы работают в параллель или, другими словами, одновременно. Например, когда происходит просмотр TLB, каждый набор одновременно индексируется тремя младшими разрядами 14, 13 и 12 номера виртуальной страницы. Каждый элемент набора,соответствующий данному индексу, одновременно сравнивается с текущим виртуальным адресом. Если найдено совпадение в одном из четырех наборов,ТLВ немедленно выдает номер физической страницы из того набора,в котором обнаружено совпадение.Рис.9.7 иллюстрирует организацию в ТLВ. Это статическая 32-элементная 4-х канальная ассоциативная организация обеспечивает хорошую вероятность того,что требуемая трансляция будет найдена в ТLВ. Она обеспечивает,например, лучшую производительность,чем 32-элементный ТLВ, состоящий из одного набора (прямого отображения). С точки зрения затрат на реализацию однако,четырех канальная ассоциативность требует больше компонен- тов на кристалле.
Содержание Вперед
Сайт создан в системе uCoz