Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой проект по дисциплине Архитектура ЭВМ.doc
Скачиваний:
28
Добавлен:
01.05.2014
Размер:
661.5 Кб
Скачать

2.5. Организация виртуальной памяти

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

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

Физический адрес = сегментный адрес * 16 + смещение

И сегментный адрес, и смещение не могут быть больше FFFFh, откуда следуют два важнейших ограничения реального режима: объем адресного пространства составляет всего 1 Мбайт, а сегменты не могут иметь размер, превышающий 64 Кбайт.

В защищенном режиме программа по-прежнему состоит из сегментов, адресуемых с помощью 16-разрядных сегментных регистров, однако местоположение сегментов в физической памяти определяется другим способом. В сегментные регистры в защищенном режиме записываются не сегментные адреса, а так называемые селекторы, биты 3...15 которых рассматриваются, как номера (индексы) ячеек специальной таблицы, содержащей дескрипторы сегментов программы. Таблица дескрипторов обычно создастся операционной системой защищенного режима (например, системой Windows) и, как правило, недоступна программе. Каждый дескриптор таблицы дескрипторов имеет размер 8 байт, и в нем хранятся все характеристики, необходимые процессору для обслуживания этого сегмента. Среди этих характеристик необходимо выделить в первую очередь две: адрес сегмента и его длину.

Под адрес сегмента в дескрипторе выделяется 32 бит, и, таким образом, сегмент может начинаться в любой точке адресного пространства объемом 232 = 4 Гбайт. Это адресное пространство носит название линейного. В простейшем случае, когда выключено страничное преобразование, о котором речь будет идти позже, линейные адреса отвечают физическим. Таким образом, процессор может работать с оперативной памятью объемом до 4 Гбайт. Как и в реальном режиме, адрес адресуемой ячейки вычисляется процессором, как сумма базового адреса сегмента и смещения: Линейный адрес = базовый адрес сегмента + смещение

В 32-разрядных процессорах смещение имеет размер 32 бит, поэтому максимальная длина сегмента составляет 232 = 4 Гбайт. Адреса, используемые программой для обращения к ячейкам памяти, и состоящие всегда из двух компонентов - селектора и смещения - иногда называются виртуальными. Система сегментной адресации преобразует виртуальные адреса в линейные. Поскольку таблица дескрипторов, с помощью которой осуществляется это преобразование, обычно недоступна программе, программа может не знать, в каких именно участках логического адресного пространства находятся ее компоненты. Фактически это сводится к тому, что, загружая программу в память, вы не знаете, в каких местах памяти будут находиться ее сегменты, и каков будет порядок их размещения. Программисту доступны только виртуальные адреса, преобразование же их в линейные и затем в физические берет на себя операционная система. Каков объем виртуального адресного пространства? Программа указывает номер нужного ей дескриптора с помощью селектора, в котором для индекса дескриптора отведено 13 бит. Отсюда следует, что в дескрипторной таблице может быть до 213 = 8 Кб дескрипторов. Однако в действительности их, так как программа может работать не с одной, а с несколькими дескрипторными таблицами - одной глобальной, разделяемой всеми выполняемыми задачами, и нескольким локальным (в нашем случае, восьмью), принадлежащим конкретным задачам. В селекторе предусмотрен специальный бит (бит 2), состояние которого говорит о типе требуемой программе дескрипторной таблицы. Таким образом, всего программе могут быть доступны 8*9 = 72 Кб дескрипторов, т.е. 72 Кб сегмента. Поскольку размер каждого сегмента, определяемый максимальной величиной смещения, может достигать 232 = 4 Гбайт, объем виртуального адресного пространства оказывается равным 72 К * 4 Кбайт = = 288 Тбайт.

Реально, однако, оперативная память компьютера с 32-разрядной адресной шиной не может быть больше 4 Гбайт, т.е. при сделанных выше предположениях (72 К сегмента размером 4 Гбайт каждый) в памяти может поместиться максимум один сегмент из более чем 72 тысячи. Где же будут находиться все остальные

Полный объем виртуального пространства может быть реализован только с помощью многозадачной операционной системы, которая хранит все неиспользуемые в настоящий момент сегменты на диске, загружая их в память по мере необходимости. Разумеется, если мы хотим полностью реализовать возможности, заложенные в современные процессоры, нам потребуется диск довольно большого объема – 288 Тбайт. Однако и при нынешних более скромных технических средствах (память до 100 Мбайт, жесткий диск до 10 Гбайт) принцип виртуальной памяти используется всеми многозадачными операционными системами с большой эффективностью. С другой стороны, для прикладного программиста этот вопрос не представляет особого интереса, так как сброс сегментов на диск и подкачка их с диска осуществляются операционной системой, а не программой, и вмешательство эту процедуру вряд ли целесообразно.

Как уже отмечалось, адрес, вычисляемый процессором на основе селектора и смещения, относится к линейному адресному пространству, не обязательно совпадающему с физическим. Преобразование линейных адресов в физические осуществляется с помощью так называемой страничной трансляции, частично реализуемой процессором, а частично - операционной системой. Если страничная трансляция выключена, все линейные адреса в точности совпадают с физическими; если страничная трансляция включена, то линейные адреса преобразуются в физические в соответствии с содержимым страничных таблиц

При включенной страничной трансляции линейный адрес рассматривается, как совокупность трех полей: 10-битового индекса в каталоге страниц, 10-битового индекса в выбранной таблице страниц и 12-битового смещения в выбранной странице. Напомним, что линейный адрес образуется путем сложения базового адреса сегмента, взятого из дескриптора сегмента, и смещения в этом сегменте, предоставленного программой. Старшие 10 бит линейного адреса образуют номер поля в каталоге страниц. Базовый адрес каталога хранится в одном из управляющих регистров процессора, конкретно, в регистре CR3. Из-за того, что каталог сам представляет собой страницу и выровнен в памяти на границу 4 Кбайт, в регистре CR3 для адресации к каталогу используются лишь старшие 20 бит, а младшие 12 бит зарезервированы для будущих применений. Поля каталога имеют размер 4 байт, поэтому индекс, извлеченный из линейного адреса, сдвигается влево на 2 бит (т.е. умножается на 4) и полученная величина складывается с базовым адресом каталога, образуя адрес конкретного поля каталога. Каждое поле каталога содержит физический базовый адрес одной из таблиц страниц, причем, поскольку таблицы страниц сами представляют собой страницы и выровнены в памяти на границу 4 Кбайт, в этом адресе значащими являются только старшие 20 бит. Далее из линейного адреса извлекается средняя часть (биты 12...21), сдвигается влево на 2 бит и складывается с базовым адресом, хранящимся в выбранном поле каталога. В результате образуется физический адрес страницы в памяти, в котором опять же используются только старшие 20 бит. Этот адрес, рассматриваемый, как старшие 20 бит физического адреса адресуемой ячейки, носит название страничного кадра. Страничный кадр дополняется с правой стороны младшими 12 битами линейного адреса, которые проходят через страничный механизм без изменения и играют роль смещения внутри выбранной физической страницы.

Страницей называется связный участок линейного или физического адресного пространства объемом 2 Кбайт. Программа работает в линейном адресном пространстве, не подозревая о существовании страничного преобразования или даже самих страниц. Механизм страничной трансляции отображает логические страницы на физические в соответствии с информацией, содержащейся в страничных таблицах. В результате отдельные 4х-килобайтовые участки программы могут реально находиться в любых несвязных друг с другом 4х-килобайтовых областях физической памяти (рис. 4.6). Порядок размещения физических страниц в памяти может не соответствовать (и обычно не соответствует) порядку следования логических страниц. Более того, некоторые логические страницы могут перекрываться, фактически сосуществуя в одной и той же области физической памяти.

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

Система страничных таблиц состоит из двух уровней. На первом уровне находится каталог таблиц страниц (или просто каталог страниц) - резидентная в памяти таблица, содержащая 1024 4х-байтовых поля с адресами таблиц страниц. На втором уровне находятся таблицы страниц, каждая из которых содержит так же 1024 4х-байтовых поля с адресами физических страниц памяти. Максимально возможное число таблиц страниц определяется числом полей в каталоге и может доходить до 1024.

Не все 1024 таблицы страниц должны обязательно иметься в наличии (кстати, они заняли бы в памяти довольно много места - 4 Мбайт). Если программа реально использует лишь часть возможного линейного адресного пространства, а так всегда и бывает, то неиспользуемые поля в каталоге страниц помечаются, как отсутствующие. Для таких полей система, экономя память, не выделяет страничные таблицы.

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

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

Если признак наличия страницы в основной памяти имеет нулевое значение, то необходимо выполнить вызов страничного прерывания (исключения), которое обрабатывается специальной процедурой PageFault, принадлежащей ОС. При входе в процедуру обработки прерываний флаг внешних прерываний IF аппаратно сбрасывается, запрещая все внешние прерывания.

Начальные команды процедуры PageFault осуществляют сохранение состояния текущего пользовательского процесса (задачи), вызвавшего страничное прерывание и процесс переводится в состояние ожидания события (помечается как блокированный). Проверяется имеющаяся в ОС таблица с описанием состояний (занятости) всех страничных кадров и при обнаружении свободных кадров выбирается свободный кадр с наименьшим номером. Выбранный кадр в таблице описания состояний страничных кадров помечается как занятый и в него будет загружена виртуальная страница. Флаг IF разрешения внешних прерываний с помощью функции STI устанавливается в единицу, разрешая внешние прерывания. Требуемая виртуальная страница может быть загружена, поэтому формируется запрос на ввод/вывод для чтения виртуальной страницы в выбранный страничный кадр. Выполняется ожидание завершения операции перемещения виртуальной страницы.

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

В случае отсутствия свободного страничного кадра при обработке страничного прерывания необходимо выбрать страничный кадр, выталкиваемый из ОЗУ. Если выбранный для выталкивания кадр подвергался модификации, то обновляется таблица отображения страниц. Флаг IF разрешения прерываний от внешних устройств с помощью команды STI устанавливается в единицу, разрешая все внешние прерывания. Формируется запрос на ввод-вывод для переписывания содержимого страничного кадра во внешнее запоминающее устройство (процесс свопинга).

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