Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SysSoft.doc
Скачиваний:
519
Добавлен:
16.03.2016
Размер:
4.36 Mб
Скачать

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

При создании микропроцессора i80386 разработчики столкнулись с очень серь­езной проблемой в реализации страничного механизма. Дело в том, что микропроцессор имеет широкую шину адреса – 32 бита – и возникает вопрос о раз­биении всего адреса на поле страницы и поле индекса. Если большое количество битов адреса отвести под индекс, то страницы станут очень большими, что повлечет большие потери и на фрагментацию, и на операции ввода/вывода, связан­ные с замещением страниц. Хотя количество страниц стало бы при этом меньше, и накладные расходы на их поддержание тоже уменьшились бы. Если же размер страницы уменьшить, то большое поле номера страницы привело бы к появле­нию громадного количества возможных страниц и необходимо было либо вво­дить какие-то механизмы контроля за номером страницы (с тем, чтобы он не вы­ходил за размеры таблицы страниц), либо создавать эти таблицы максимально возможного размера. Разработчики пошли по пути, при котором размер страни­цы все же небольшой (он выбран равным 212= 4096 = 4K), а поле номера страни­цы величиной в 20 битов, в свою очередь, разбивается на два поля и осуществля­ется двухэтапная (двухшаговая) страничная трансляция.

Для описания каждой страницы создается соответствующий дескриптор. Длина дескриптора выбрана равной 32 битам: 20 битов линейного адреса определяют номер страницы (по существу – её адрес, поскольку добавление к нему (приписывание в качестве младших разрядов) 12 нулей приводит к определению началь­ного адреса страницы), а остальные биты разбиты на следующие поля, которые изображены на рис. 3.7. Как видно, три бита дескриптора зарезервированы для использования системными программистами при разработке подсистемы орга­низации виртуальной памяти. С этими битами микропроцессор сам не работает.

Рис.3.7.Дескриптор страницы

Прежде всего, микропроцессор анализирует самый младший бит дескриптора – бит присутствия, ибо если поле presentравно нулю, то это означает отсутствие данной страницы в оперативной памяти, и такая ситуация влечет прерывание в работе процессора с передачей управления соответствующей программе, которая должна будет загрузить затребованную страницу. Битdirty«грязный» – пред­назначен для отметки, что данную страницу модифицировали и при замещении этого страничного кадра следующим её необходимо сохранить во внешней памя­ти. Бит обращения (access) свидетельствует о том, что к данной таблице или странице осуществлялся доступ. Он используется для определения страницы, которая будет участвовать в замещении при использовании дисциплинLRUилиLFU. Наконец, первый и второй биты используются для защиты памяти.

Старшие 10 битов линейного адреса определяют номер таблицы страниц (pagetableentry, РТЕ), из которой посредством вторых 10 битов линейного адреса вы­бирается соответствующий дескриптор виртуальной страницы. И уже из этого дескриптора выбирается номер физической страницы, если данная виртуальная страница отображена сейчас на оперативную память. Эта схема определения фи­зического адреса по линейному изображена на рис. 3.8.

Первая таблица, которую мы индексируем первыми (старшими) 10 битами линейного адреса, названа таблицей каталогов таблиц страниц (pagedirectoryentry,PDE). Её адрес в оперативной памяти определяется старшими 20 битами управляющего регистраCR3.

Рис. 3.8.Трансляция линейного адреса в микропроцессорахi80x86

Каждая из таблиц PDE и РТЕ состоит из 1024 элементов (210= l024). В свою очередь, каждый элемент (дескриптор страницы) имеет длину 4 байта (32 бита), по­этому размер этих таблиц как раз соответствует размеру страницы.

Оценим теперь эту двухшаговую схему трансляции с позиций расхода памяти. Каждый дескриптор описывает страницу размером 4 Кбайт. Следовательно, одна таблица страниц, содержащая 1024 дескриптора, описывает пространство памя­ти в 4 Мбайт. Если наша задача пользуется виртуальным адресным пространст­вом, например, в 50 Мбайт (предположим, что речь идёт о некотором графическом редакторе, который обрабатывает изображение, состоящее из большого количе­ства пикселов1), то для описания этой памяти необходимо иметь 14 страниц, со­держащих таблицы РТЕ. Кроме этого, нам потребуется для этой задачи ещё одна таблица PDE (тоже размером в одну страницу), в которой 14 дескрипторов бу­дут указывать на местонахождение упомянутых таблиц РТЕ. Остальные деск­рипторыPDEмогут быть не задействованы. Итого, для описания 50 Мбайт адресного пространства задачи потребуется всего 15 страниц, то есть 60 Кбайт памяти, что можно считать приемлемым.

Если бы не был использован такой двухшаговый механизм трансляции, то потери памяти на описание адресного пространства могли бы составить 4(Кбайт)210= 4 (Мбайт)! Очевидно, что это уже неприемлемое решение.

Итак, микропроцессор для каждой задачи, для которой у него есть TSS, позволяет иметь таблицу PDE и некоторое количество РТЕ. Поскольку это дает возможность адресоваться к любому байту из 232, а шина адреса как раз и позволяет использовать физическую память с таким объёмом, то можно как бы отказаться от сегментного способа адресации. Другими словами, если считать, что задача состоит из одного единственного сегмента, который, в свою очередь, разбит на страницы, то фактически мы получаем только один страничный механизм работы с виртуальной памятью. Этот подход получил название «плоской памяти». При использовании плоской модели памяти упрощается создание и операцион­ных систем, и систем программирования. Кроме этого, уменьшаются расходы памяти для поддержки системных информационных структур. Поэтому в абсо­лютном большинстве современных 32-разрядных ОС, создаваемых для микро­процессоровi80x86, используется плоская модель памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]