Управление памятью в микропроцессорах семейства Х86, страница 13

 В PDE бит 6 всегда равен 0, зато бит 7 является действующим битом PS (Page Size), который задает размер страницы. При PS=0 страница имеет размер 4 Кбайт.  PS=1 используется только в МП Pentium+ при включении в управляющем регистре CR4 расширений PAE и PSE. Дело в том, что для  процессоров Pentium+, т.е. процессоров пятого (P5) и шестого поколения (P6) семейства Х86 дополнительно предусмотрено страничное преобразование  со страницами размером 4 Мбайт. Этот режим работы получил название PSE (Page Size Extension – расширение размера страниц). Для включения этого режима устанавливается в состояние 1 бит PSE в регистре общего управления CR4. Кроме того, устанавливается в состояние 1 бит 7 (PS – Page Size) в элементе каталога страниц

В этом случае ступень таблиц страниц исключается и 10 старших разрядов из элемента каталога страниц  конкатенируются (объединяются) с 22 младшими разрядами линейного адреса, образуя физический адрес адресуемого байта в адресном пространстве памяти.

Схема страничного преобразования при страницах равных 4 Мбайт приведена на рис.III.22.

На первый взгляд процесс страничного преобразования выглядит довольно сложным, и должен приводить к большой потери производительности процессора, при его разрешении. Ведь при включенном механизме страничного преобразования,  каждое обращения к памяти потребует две дополнительные операции считывания из нее: первое  для передачи в процессор требуемого элемента PDE и второе для передачи в процессор необходимого элемента PTE.

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

Прежде всего, потому, что устройство процессора, реализующее страничную переадресацию, включает в себя множественно-ассоциативную кэш – память TLB (Translation look aside Buffer – буфер ассоциативной трансляции),  которая содержит последние используемые 32 элемента PTE. Каждый элемент PTE определяет одну из страниц, а каждая из страниц содержит 4К байтовых адресов в физической памяти. Таким образом, в кэш–буфере TLB может храниться информация об используемых за последнее время   адресах для 128 Кбайт физической памяти. И, следовательно, когда блок сегментации формирует линейный адрес, который отображен на находящийся в кэш-буфере элемент PTE, страничное преобразование осуществляется без дополнительного обращения к памяти. Практический опыт показывает, что это происходит в 98% случаев.

Таким образом, дополнительное обращение к памяти при страничном преобразовании происходит только при обращении к новой странице, а это происходит сравнительно редко, учитывая  принцип «локальности программ».

Более подробно принцип работы TLB будет рассмотрен в разделе, посвященном общим принципам организации кэш-памятей современного компьютера.

            Замечания по сегментному и страничному

                        преобразованию адресов.

Использование принципа сегментации памяти в современных процессорах позволило:

·  Организовать виртуальную память;

·  Реализовать базовую защиту сегментов памяти от ошибок, связанных с указанием в программе неправильных логических адресов, нарушениями пределов вызываемых сегментов или нарушениями правил их использования;

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

Однако сегментация памяти ведет и к некоторым издержкам.

Так, например, сегментация влечет за собой операции с неудобными 48 разрядными логическими адресами (указателями – селектор:смещение).

 Кроме того, принцип сегментации допускает формирование сегментов разного размера, что приводит к неэффективности использования физической оперативной памяти. Это объясняется тем, что в результате свопинга могут появиться многочисленные и довольно значительные «дыры» (т.е. неиспользованные области) между сегментами в физической  памяти.

Но, пожалуй, наиболее существенным недостатком является необходимость выполнения ряда дополнительных действий при загрузке селекторов в сегментные регистры. Эта операция влечет за собой необходимость обязательной загрузки из дескрипторной таблицы оперативной памяти в теневой регистр процессора соответствующего восьмибайтного дескриптора. Для этого требуется хотя бы один цикл шины. Кроме того, при этом, в дескрипторной таблице бит A  этого дескриптора должен быть установлен в 1, отмечая произошедшее обращение к соответствующему сегменту. А эта операция также требует хотя бы одного цикла шины. Следует отметить, что при этом осуществляется еще и контроль типа сегмента, размера дескрипторных таблиц и уровней привилегий. Поэтому загрузка сегментного регистра длится значительно дольше, чем загрузка регистра общего назначения.

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

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