Согласно /1, 5, 6/, при страничной организации памяти виртуальное и физическое адресные пространства разбиваются на блоки фиксированного размера – страницы. Размер страниц обычно выбирается равным 4 Кбайта (реже 4 Мбайта). Блок ОП, соответствующий виртуальной странице, часто называют страничным кадром или фреймом. Страницам виртуальной и физической памяти присваивают номера. Страничная организация памяти создаёт иллюзию линейной ОП такого же размера, как и адресное пространство программы.
В модели виртуальной памяти со страничной организацией соответствие между виртуальными и физическими страницами устанавливается в процессе распределения памяти при заполнении специальной таблицы страниц, каждая строка которой (страничный дескриптор) содержит базовый адрес страничного кадра в ОП, а также биты управления виртуальной памятью и биты защиты информации на странице. Назначение и использование битов присутствия P и доступа A такое же, как у одноимённых битов при сегментной организации памяти. Признак модификации D устанавливается в страничном дескрипторе при выполнении операции записи в определяемую дескриптором страницу. ОС использует значение этого бита для исключения необязательных свопингов страницы. Если D=1, то к странице было обращение для записи и перед удалением из ОП её необходимо переписать в ВЗУ, в противном случае, (D=0) этого делать не нужно. Страничное распределение памяти аналогично сегментному распределению памяти, представленному на рисунке 8.1, только вместо сегментов используются страницы.
|
|
Принципы работы системы виртуальной памяти со страничной организаций похожи на принципы функционирования сегментной памяти. При обращении к памяти номер виртуальной страницы извлекается из виртуального адреса и используется как индекс для поиска нужного дескриптора в таблице страниц. Если страница присутствует в ОП, то из соответствующего дескриптора извлекается базовый адрес соответствующего страничного кадра, который совместно со смещением в виртуальном адресе, определяет физический адрес требуемого операнда (Рисунок 8.3) /1/.
Рисунок 8.3 – Вычисление физического адреса в страничной памяти
Если требуемая страница отсутствует в ОП, то формируется прерывание, по которому ОС загружает из ВЗУ отсутствующую страницу. После этого управление возвращается процессору, который повторно выполняет команду обращения к памяти. При необходимости освобождения памяти некоторые страницы выгружаются и ОП в ВЗУ. Для этого применяется алгоритм LRU (выгружается дольше всего неиспользовавшаяся страница) или алгоритм FIFO (выгружается страница, которая была загружена раньше всех, независимо от того, когда в последний раз производилось к ней обращение).
|
|
Рассмотренный метод работы с виртуальной памятью, при котором страницы переносятся в ОП только в случае необходимости, называется вызовом страниц по требованию.
В отличие от сегментов, страницы не имеют прямой связи с логической структурой программы. Трансляция виртуального адреса в физический выполняется автоматически и быстрее, чем при сегментной организации виртуальной памяти.
Фиксированная длина страниц позволяет решить проблему внешней фрагментации и упрощает распределение памяти. При необходимости загрузки новой страницы в ОП её можно поместить либо в незанятый страничный кадр, либо вытеснить другую страницу, освободив таким образом требуемое место. В любом случае, не требуется по-новому располагать страницы в ОП.
Если в сегментной памяти сегменты загружаются целиком, то страничная организация позволяет сократить объём передаваемой между ОП и ВЗУ информации за счёт того, что страницы программы могут не загружаться в ОП, пока они действительно не понадобятся. Сначала в ОП загружается начальная страница программы, и ей передаётся управление. Если в процессе выполнения программы потребуется выборка операндов из другой страницы, ОС загрузит отсутствующую страницу. Особенно заметны преимущества страничной организации памяти при реализации мультизадачных систем. В таких системах при загрузке новой задачи её страницы могут быть направлены в любые свободные в данный момент страничные кадры независимо от того, расположены они подряд или нет.
Однако страничная память тоже подвержена фрагментации. Если пользовательская программа и данные занимают ровно целое число страниц, то при их загрузке в память свободного места там не останется. Но, если они не занимают ровно целое число страниц, на последней странице останется неиспользованное пространство, и в ОП будут появляться свободные участки, бесполезно занимая место. Эта проблема получила название внутренней фрагментации, так как неиспользуемое пространство является внутренним по отношению к странице. Чтобы свести к минимуму объём бесполезного пространства, страницы должны быть небольшими, однако для их хранения потребуется большая таблица страниц.