Управление виртуальной памятью |
Все методы управления памятью имеют одну и ту же цель - хранить в памяти мультипрограммную смесь, необходимую для мультипрограммирования. |
Виртуальная память - это технология, которая позволяет выполнять процесс, который может только частично располагаться в основной памяти. Таким образом, виртуальная память позволяет выполнять программы, размеры которых превышают размеры физического адресного пространства. |
Страничная организация памяти |
На любом компьютере существует множество адресов в памяти, к которым может обратиться программа. |
Когда программа использует следующую инструкцию: |
MOV REG.1000 |
Она делает это для того, чтобы скопировать содержимое памяти по адресу 1000 в регистр REG (или наоборот, в зависимости от компьютера). Адреса могут формироваться с использованием индексации, базовых регистров, сегментных регистров и другими путями. |
Это программно формируемые адреса, называемые виртуальными адресами, формируют виртуальное адресное пространство. На компьютерах без виртуальной памяти виртуальные адреса подаются непосредственно на шину памяти и вызывают для чтения или записи слово в физической памяти с тем же самым адресом. Когда используется виртуальная память, виртуальные адреса не передаются диспетчеру памяти (MMU - Memory Management Unit), который отображает виртуальные адреса на физические адреса памяти, как продемонстрировано на рисунке: |
Пространство виртуальных адресов разделено на единицы, называемые страницами. Соответствующие единицы в физической памяти называются страничными блоками (page frame). Страницы и их блоки имеют всегда одинаковый размер (от 512 байт до 64 Кбайт). Передача данных между ОЗУ и диском всегда происходит в страницах. |
В фактическом аппаратном обеспечении страницы, физически присутствующие в памяти, отслеживаются с помощью бита присутствия / отсутствия. |
Если программа пытается воспользоваться неотображаемой страницей, то диспетчер памяти замечает, что страница не отображается, и инициирует прерывание центрального процессора, передающее управление операционной системе. Такое прерывание называется ошибкой из-за отсутствия страницы или страничным прерыванием (page fault). Операционная система выбирает малоиспользуемый страничный блок и записывает его содержимое на диск. Затем она считывает с диска страницу, на которую произошла ссылка, в только что освободившийся блок, изменяет карту отображения и запускает заново прерванную команду. |
Таблицы страниц |
Виртуальный адрес делится на номер виртуальной страницы (старшие биты) и сдвиг (младшие биты). Например, при 16-разрядныхадресах и размере страницы 4 Кбайт старшие 4 бита могут указывать одну из 16 виртуальных страниц, а ниже 12 бит могут определить байт смещения (от 0 до 4095) внутри выбранной страницы. Однако разбиение страницы на 3,5 или какое-нибудь другое число битов также возможно. Разные части подразумевают различные размеры страниц. |
Номер виртуальной страницы используется как индекс в таблице страниц для поиска записи этой страницы. По записи в таблице страниц находится номер физического блока страницы (если это имеет место). Данный номер присоединяется к старшим разрядам числа смещения, замещая номер виртуальной страницы и тем самым формируя физический адрес, который может быть послан в память. Назначение таблицы страниц заключается в отображении виртуальных страниц на страничные блоки. Говоря математически, таблица страниц - это функция, имеющая в качестве аргумента номер виртуальной страницы и получающая в результате номер физического блока. Используя результат действия этой функции, поле виртуальной страницы в виртуальном адресе может быть заменено полем страничного блока, таким образом, формируется физический адрес. Таблица страниц целиком располагается в оперативной памяти. Тогда все необходимое оборудование состоит из одного регистра, указывающего на начало таблицы страниц. Такая схема позволяет изменять карту памяти при контекстном переключении путем перезагрузки только одного регистра. Во время каждой инструкции программы требуется одно или несколько обращений к памяти для чтения записей таблицы страниц. |
Структура элемента таблицы страниц. |
Точная структура элемента в значительной мере зависит от машины. |
Биты Изменения и Обращения отслеживают использование страницы. Когда страница записывается, аппаратура автоматически устанавливает, бит Изменение. Этот бит учитывается, когда операционная система решает освободить страничный блок. Если страница в нем была изменена, (то есть она "грязная"), то ее новая версия должна быть переписана на диск. Бит обращения устанавливается всякий раз, когда происходит обращение к странице для чтения или записи. Его значение помогает операционной системе при выборе страницы для удаления из памяти, когда случатся ошибка из-за отсутствия страницы. Страницы, не использующиеся в данный момент, являются лучшими кандидатами, чем находящиеся в работе. Этот бит играет важную роль в нескольких алгоритмах перемещения страниц. Последний бит позволяет запретить кэширование страницы. размещение страниц по запросу (demand paging). |
Сегментно-страничная организация виртуальной памяти позволяла совместно использовать одни и те же сегменты данных и программного кода в виртуальной памяти разных задач (для каждой виртуальной памяти существовала отдельная таблица сегментов, но для совместно используемых сегментов поддерживались общие таблицы страниц). |
Как же достигается возможность наличия виртуальной памяти с размером, существенно превышающим размер оперативной памяти? В элементе таблицы страниц может быть установлен специальный флаг (означающий отсутствие страницы), наличие которого заставляет аппаратуру вместо нормального отображения виртуального адреса в физический прервать выполнение команды и передать управление соответствующему компоненту операционной системы. Английский термин "demand paging" (листание по требованию) достаточно точно характеризует функции, выполняемые этим компонентом. Когда программа обращается к виртуальной странице, отсутствующей в основной памяти, т.е. "требует" доступа к данным или программному коду, операционная система удовлетворяет это требование путем выделения страницы основной памяти, перемещения в нее копии страницы, находящейся во внешней памяти, и соответствующей модификации элемента таблицы страниц. После этого происходит "возврат из прерывания", и команда, по "требованию" которой выполнялись эти действия, продолжает свое выполнение. |
Виртуальная память чаще всего реализуется на базе страничной организации памяти, совмещенной со свопингом страниц. |
Свопингу подвергаются только те страницы, которые необходимы процессору. |
Таким образом, страницырование по запросу означает: |
1. программа может выполняться CPU, когда часть страниц находится в основной памяти, а часть - во внешней. |
2. в процессе выполнения новая страница не перемещается в основную память до тех пор, пока в ней не возникла необходимость. |
Для учёта распределения страниц между внешней и основной памятью каждая строка таблицы страниц дополняется битом местонахождения страницы. Valid/invalid bit. |
В том случае, если процессор пытается использовать страницу, помеченную значением invalid, возникает событие, называемое страничная недостаточность (paging fault). |
Страничная недостаточность вызывает прерывание выполнения программы и передачу управления операционной системе. Реакция операционной системы на страничную недостаточность заключается в том, что необходимая страница загружается в основную память. |
Процессор, прежде чем осуществлять преобразование логического адреса в физический, проверяет значение бита местонахождения необходимой страницы. |
1. если значение бита invalid, то процесс прерывается и управление передается операционной системе для обработки события страничная недостаточность. |
2. разыскивается необходимая страница во вторичной памяти и свободная страничная рамка в основной. |
3. требуемая страница загружается в выбранную страничную рамку. |
4. после завершения операции загрузки редактируется соответствующая строка таблицы страниц, в которую вносится базовый адрес и valid значение бита местонахождения. |
5. управление передается прерванному процессу |