Виртуальная память
Презентацию к данной лекции Вы можете скачать здесь.
Введение
Виртуальная память – распространенная стратегия распределения памяти, используемая во всех современных операционных системах, основанная на идее расширения физической памяти путем размещения расширенной памяти на диске и использования таблиц страниц (или сегментов) для трансляции адресов. В лекции рассмотрены следующие вопросы:
- Мотивировка концепции виртуальной памяти;
- Потребность в страничной организации;
- Создание процесса и его пространства виртуальной памяти;
- Замена страницы;
- Размещение фреймов;
- Thrashing;
- Примеры организации виртуальной памяти в различных ОС.
Мотивировка концепции виртуальной памяти
Концепция виртуальной памяти основана на идеях отделения логической памяти пользователя от физической памяти и расширения логической памяти путем хранения ее образа на диске.
При исполнении программы только часть ее кода и данных, к которым происходит обращение, в каждый момент требует размещения в физической памяти. Поэтому, естественно, возникает идея расширить пространство логической памяти, которое может быть реализовано намного большего размера, чем физическая память. Это и есть основной принцип организации виртуальной памяти.
Виртуальная память поддерживает совместное использование одного и того же адресного пространства более чем одним процессом, создание и исполнение облегченных процессов в общем пространстве виртуальной памяти.
Виртуальная память допускает более эффективное создание процесса, чем предшествующие схемы организации памяти и процессов.
Заметим, что концепция виртуальной памяти непосредственно не связана ни со страничной, ни с сегментной стратегиями распределения памяти. Виртуальная память может быть реализована различными способами, например, с помощью:
- страничной организации по требованию (paging on demand);
- сегментной организации по требованию (segmentation on demand).
В приведенных терминах подчеркивается динамический характер управления виртуальной памятью: термин по требованию означает, что страница или сегмент будут размещены в физической памяти только в случае, если к ним реально происходит обращение из программы пользователя. Причем если размер обрабатываемой области виртуальной памяти (например, массива) очень велик – например, 1000 страниц, то в физической памяти будет размещена только та его страница, к которой обращается пользовательская программа.
Принцип управления виртуальной памятью иллюстрируется рис. 18.1.
Из схемы видно, что виртуальная память, как предполагается, больше, чем физическая память. Взаимодействие между частями виртуальной памяти и физической памяти происходит через отображение памяти – системную таблицу (сегментов, страниц и т.п.). Образ виртуальной памяти процесса хранится на диске.
Страничная организация по требованию
Принцип реализации виртуальной памяти в виде страничной организации по требованию заключается в том, что каждая страница загружается в память, только если она реально требуется при выполнении программы – содержит код или данные, к которым произошло обращение.
Преимущества данного подхода:
- Меньший объем ввода-вывода: В память подкачивается только минимально необходимый объем данных (например, одна страница большого массива, а не весь многостраничный массив);
- Меньший объем памяти: При данном способе расходуется минимально необходимый объем физической памяти;
- Более быстрая реакция системы: Поскольку объем пересылаемых данных меньше, система в среднем быстрее реагирует на каждый запрос к памяти;
- Система может обслуживать большее число пользователей: Ввиду экономии физической памяти и времени обращения, система в состоянии при данном подходе обслуживать большее число пользовательских процессов.
Основные принципы страничной организации по требованию:
- Если страница требуется программе, на нее имеется ссылка из программы.
- Если ссылка на страницу неверна (например, страницы с данным номером не существует), происходит прерывание.
- Если требуемая страница отсутствует в памяти, то она подкачивается в память. Механизм подкачки реализуется через прерывание (page fault – отказ страницы).
рис. 18.2 иллюстрирует размещение виртуальной памяти на диске и ее откачку и подкачку.
Из схемы видно, что, с точки зрения каждой программы, пространство ее виртуальной памяти непрерывно. Оно преобразуется в непрерывную область дисковой памяти. С помощью механизма откачки – подкачки в нужный момент страница виртуальной памяти размещается в основной памяти.
С каждым элементом таблицы страниц связывается бит "valid/invalid",однако, в отличие от организации логической памяти, он играет несколько иную роль – он указывает на присутствие или отсутствие страницы в основной памяти. Значение бита равно 1, если страница в памяти, и 0, если страница отсутствует в памяти.
Первоначально для всех элементов таблицы страниц бит valid/invalid полагается равным 0.
Если в процессе трансляции адреса бит "valid/invalid" в таблице страниц оказыется равным 0, то происходит прерывание по отсутствию страницы в памяти (page fault).
На рис. 18.3 приведен пример таблицы страниц, в которой не все страницы присутствуют в основной памяти.
На схеме логическия память процесса состоит из 6 страниц с номерами от 0 до 5. Однако только страницы 0, 2, 5 размещены в основной памяти (бит valid/invalid имеет значение v = 1). Страницы 1, 3, 4 в основной памяти отсутствуют (бит valid/invalid равен i = 0).