Преимущества виртуальной памяти при создании процессов
Благодаря механизму виртуальной памяти, могут быть использованы следующие оптимизации расходования памяти при создании процессов:
· Копирование по записи (Copy-on-Write)
· Отображение файлов в память (Memory-Mapped Files).
Принцип совместного использования страниц процессами (или копирование по записи - Copy-On-Write, COW) позволяет первоначально родительскому и дочернему процессам использовать одни и те же страницы памяти. Если какой-либо процесс модифицирует разделяемую страницу, то только в этом случае данная страница копируется. Принцип COW обеспечивает более эффективное создание процесса, так как копируются только модифицируемые страницы. Свободные страницы распределяются из списка страниц, инициализированных нулями.
Использование при вводе-выводе файлов, отображаемых в память, позволяет рассматривать файловый ввод-вывод как обычное обращение к памяти путем отображения блока на диске в страницу памяти.
Первоначально файл читается с использованием запроса страниц по требованию. Часть файла размером с одну страницу читается из файла в физическую страницу (фрейм). Последующие чтения из файла и записи в файл трактуются как обычные обращения к памяти. Это упрощает доступ к файлу, по сравнению с системными вызовами read() и write(). Это позволяет также нескольким процессам отображать в память один и тот же файл, по тому же принципу, как они совместно используют какие-либо страницы.
На рис. 18.5 иллюстрируется концепция файла, отображаемого в память.
Рис. 18.5. Файлы, отображаемые в память.
Процессы Aи Bсовместно используют файл, причем каждому блоку файла соответствует страница в памяти. Эти страницы имеют одним и те же номера в таблицах страниц виртуальной памяти процессов. Страницы, присутствующие в памяти, фактически являются частями файла, обрабатываемого при вводе-выводе, благодаря этому, гораздо быстрее, чем обычный файл. По окончании обмена, при закрытии файла, система записывает все его измененные части на диск.
Подобный механизм имеется в большинстве операционных систем. Например, в системе Solaris он реализуется командой и системным вызовом mmap (memory map).
Для предотвращение переполнения памяти, подпрограмма обслуживания отказов страниц дополняется поддержкой замещения страниц.
Для сокращения времени передачи страниц используется бит модификациив таблице страниц: только модифицированные страницы откачиваются на диск.
Замещение страниц дополняет картину и стратегию разделения между виртуальной и физической памятью – большая виртуальная память может быть отображена на небольшую физическую память.
Пример замещения страниц приведен на рис. 18.6.
Рис. 18.6. Пример замещения страниц.
В примере имеются два пользовательских процесса, каждый из которых использует по 4 страницы виртуальной памяти. Однако имеется только 6 фреймов в основной памяти, выделенных для пользовательских процессов, (начальные фреймы занимает резидентный монитор ОС). В процессе 1 происходит обращение к данным M, расположенным на странице 3 виртуальной памяти, отсутствующей в основной памяти. В процессе 2 точно так же может произойти обращение к данным Bна странице виртуальной памяти 1, которой также нет в основной памяти. Следовательно, ОС должна выполнить замещение страниц, т.е. решить две задачи:
· по какому принципу выбирать "жертвы", т.е. страницы для откачки, находящиеся в оперативной памяти, для освобождения необходимых фреймов?
· в каком порядке обслужить процессы 1 и 2, в каждом из которыз возникла необходимость в свободном фрейме?
Кратко алгоритм замещения страниц можно сформулировать следующим образом:
1. Найти, где размещается требуемая страница на диске.
2. Найти свободный фрейм:
o Если есть свободный фрейм, использовать его.
o Если нет свободных фреймов, использовать алгоритм замещения страниц для выбора фрейма -"жертвы".
3. Прочитать содержимое требуемой страницы во вновь освобожденный фрейм. Модифицировать таблицы фреймов и страниц.
4. Продолжить выполнение процесса.
На рис. 18.7 иллюстрируется момент замещения страниц, с предварительной откачкой страницы-жертвы на диск.
Рис. 18.7. Замещение страниц с откачкой жертвы на диск.
Этапы замещения страниц: 1 – откачка жертвы; 2 – изменение ее элемента таблицы страниц (бит valid заменяется на invalid); 3 – подкачка на освободившееся место желаемой страницы; 4 – изменение элемента таблицы страниц для новой страницы (бит invalid заменяется на valid; запоминается физический адрес подкачанной страницы).