Спонсор: Microsoft
Санкт-Петербургский государственный университет
Опубликован: 13.11.2010 | Доступ: свободный | Студентов: 6726 / 1527 | Оценка: 4.64 / 4.23 | Длительность: 45:08:00
ISBN: 978-5-9963-0495-0
Лекция 18:

Виртуальная память

Обработка ситуации отсутствия страницы в памяти

Если в таблице страниц имеется ссылка на страницу, отсутствующую в памяти, первое же обращение по такой ссылке приведет к прерыванию и вызову ОС (ситуации page fault – отсутствие страницы в памяти)

ОС по таблицам определяет, что именно произошло:

Если имеет место неверная ссылка (на страницу, отсутствующую в логической памяти), то работа программы прекращается.

Если же имеет место обычное отсутствие страницы в памяти, то ОС должна разместить его в основной памяти. Для этого ОС выполняет следующий алгоритм:

  • Найти незанятый фрейм в основной памяти ;
  • Считать содержимое страницы в данный фрейм ;
  • Изменить элемент таблицы страниц: validation-бит установить равным 1;
  • Продолжить работу программы. Напомним, что программа после прерывания продолжается с той же команды, которая была прервана из-за отсутствия страницы. Поэтому теперь программа продолжит нормально выполняться, и обращение к странице произойдет успешно.

Этапы обработки ситуации отсутствия страницы в памяти показаны на рис. 18.4.

Обработка ситуации отсутствия страницы в памяти.

увеличить изображение
Рис. 18.4. Обработка ситуации отсутствия страницы в памяти.

Этап 1 – выполнение команды load M, которая прерывается по отсутствию страницы в памяти; 2 – прерывание и вызов ОС; 3 – обращение к странице, находящейся в файле откачки на диске; 4 – считывание страницы в память на свободный фрейм; 5 – изменение элемента таблицы страниц; 6 – повторное (успешное) выполнение команды.

Отсутствие свободного фрейма. Оценка производительности стратегии обработки страниц по требованию.

На этапе 4 (рис. 18.4) возможна ситуация отсутствия свободного фрейма в основной памяти. При этом ОС должна выполнить замещение страницы (page replacement) – найти страницу, загруженную в память, но реально не используемую, и откачать ее.

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

Дадим общую оценку производительности обработки страниц по требованию.

Введем коэффициент отказов страниц (Page Fault Rate) p:> 0 <= p <= 1.0.

Если p = 0, то имеет место отсутствие отказов страниц.

Если p = 1, то каждое обращение к странице приводит к отказу.

Оценим теперь эффективное время доступа (Effective Access Time - EAT):

EAT = (1 – p) * время доступа к памяти 
+ p * (время реакции на отказ 
+ [ время откачки страницы ]
+ время подкачки страницы 
+ время рестарта)

Дадим необходимые пояснения к данной формуле. Оценка времени складывается из двух слагаемых. Первое слагаемое соответствует ситуации, когда отказ страницы не имеет места, и оценивает среднее время доступа к странице в этом случае. Второе слагаемое вычисляет оценку времени в случае отказа страницы. В нем первая компонента – суммарное время реакции апппратуры и ОС на отказ страницы, вторая (необязательная) – время откачки страницы (если она требуется для замещения страниц), третья – время подкачки страницы, четвертая – время рестарта программы. Если коэффициент p рассматривать как вероятность отказа страницы, то величина EAT будет математическим ожиданием общего времени доступа к странице.

Преимущества виртуальной памяти при создании процессов

Благодаря механизму виртуальной памяти, могут быть использованы следующие оптимизации расходования памяти при создании процессов:

  • Копирование по записи (Copy-on-Write)
  • Отображение файлов в память (Memory-Mapped Files).

Принцип совместного использования страниц процессами (или копирование по записи - Copy-On-Write, COW) позволяет первоначально родительскому и дочернему процессам использовать одни и те же страницы памяти. Если какой-либо процесс модифицирует разделяемую страницу, то только в этом случае данная страница копируется. Принцип COW обеспечивает более эффективное создание процесса, так как копируются только модифицируемые страницы. Свободные страницы распределяются из списка страниц, инициализированных нулями.

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

Первоначально файл читается с использованием запроса страниц по требованию. Часть файла размером с одну страницу читается из файла в физическую страницу (фрейм). Последующие чтения из файла и записи в файл трактуются как обычные обращения к памяти. Это упрощает доступ к файлу, по сравнению с системными вызовами read() и write(). Это позволяет также нескольким процессам отображать в память один и тот же файл, по тому же принципу, как они совместно используют какие-либо страницы.

На рис. 18.5 иллюстрируется концепция файла, отображаемого в память.

Файлы, отображаемые в память.

увеличить изображение
Рис. 18.5. Файлы, отображаемые в память.

Процессы A и B совместно используют файл, причем каждому блоку файла соответствует страница в памяти. Эти страницы имеют одни и те же номера в таблицах страниц виртуальной памяти процессов. Страницы, присутствующие в памяти, фактически являются частями файла, обрабатываемого при вводе-выводе, благодаря этому, гораздо быстрее, чем обычный файл. По окончании обмена, при закрытии файла, система записывает все его измененные части на диск.

Подобный механизм имеется в большинстве операционных систем. Например, в системе Solaris он реализуется командой и системным вызовом mmap (memory map).

Гульжан Мурсакимова
Гульжан Мурсакимова
Василий Четвертаков
Василий Четвертаков