Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lect_m2_ipovs_ipovs_archvs_231000.docx
Скачиваний:
21
Добавлен:
15.06.2021
Размер:
1.51 Mб
Скачать

Лекция 15. Организация виртуальной памяти.

Виртуальная память – распространенная стратегия распределения памяти, используемая во всех современных операционных системах, основанная на идее расширения физической памяти путем размещения расширенной памяти на диске и использования таблиц страниц (или сегментов) для трансляции адресов. В лекции рассмотрены следующие вопросы:

  • Мотивировка концепции виртуальной памяти;

  • Потребность в страничной организации;

  • Создание процесса и его пространства виртуальной памяти;

  • Замена страницы;

  • Размещение фреймов;

  • Thrashing;

  • Примеры организации виртуальной памяти в различных ОС.

Мотивировка концепции виртуальной памяти

Концепция виртуальной памяти основана на идеях отделения логической памяти пользователя от физической памяти и расширения логической памяти путем хранения ее образа на диске.

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

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

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

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

  • страничной организации по требованию (paging on demand);

  • сегментной организации по требованию (segmentation on demand).

В приведенных терминах подчеркивается динамический характер управления виртуальной памятью: термин по требованию означает, что страница или сегмент будут размещены в физической памяти только в случае, если к ним реально происходит обращение из программы пользователя. Причем если размер обрабатываемой области виртуальной памяти (например, массива) очень велик – например, 1000 страниц, то в физической памяти будет размещена только та его страница, к которой обращается пользовательская программа.

Принцип управления виртуальной памятью иллюстрируется рис. 18.1.

увеличить изображение Рис. 18.1.  Виртуальная память и физическая память.

Из схемы видно, что виртуальная память, как предполагается, больше, чем физическая память. Взаимодействие между частями виртуальной памяти и физической памяти происходит через отображение памяти – системную таблицу (сегментов, страниц и т.п.). Образ виртуальной памяти процесса хранится на диске.

Страничная организация по требованию

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

Преимущества данного подхода:

  • Меньший объем ввода-вывода: В память подкачивается только минимально необходимый объем данных (например, одна страница большого массива, а не весь многостраничный массив);

  • Меньший объем памяти: При данном способе расходуется минимально необходимый объем физической памяти;

  • Более быстрая реакция системы: Поскольку объем пересылаемых данных меньше, система в среднем быстрее реагирует на каждый запрос к памяти;

  • Система может обслуживать большее число пользователей: Ввиду экономии физической памяти и времени обращения, система в состоянии при данном подходе обслуживать большее число пользовательских процессов.

Основные принципы страничной организации по требованию:

  1. Если страница требуется программе, на нее имеется ссылка из программы.

  2. Если ссылка на страницу неверна (например, страницы с данным номером не существует), происходит прерывание.

  3. Если требуемая страница отсутствует в памяти, то она подкачивается в память. Механизм подкачки реализуется через прерывание (page fault – отказ страницы).

рис. 18.2 иллюстрирует размещение виртуальной памяти на диске и ее откачку и подкачку.

Рис. 18.2.  Преобразование страничной памяти в непрерывное дисковое пространство.

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

С каждым элементом таблицы страниц связывается бит "valid/invalid", однако, в отличие от организации логической памяти, он играет несколько иную роль – он указывает на присутствие или отсутствие страницы в основной памяти. Значение бита равно 1, если страница в памяти, и 0, если ( страница отсутствует в памяти.

Первоначально для всех элементов таблицы страниц бит valid/invalid полагается равным 0.

Если в процессе трансляции адреса бит "valid/invalid" в таблице страниц оказыется равным 0, то происходит прерывание по отсутствию страницы в памяти (page fault).

На рис. 18.3 приведен пример таблицы страниц, в которой не все страницы присутствуют в основной памяти.

Рис. 18.3.  Пример таблицы страниц, в которой не все страницы в памяти.

На схеме логическия память процесса состоит из 6 страниц с номерами от 0 до 5. Однако только страницы 0, 2, 5 размещены в основной памяти (бит valid/invalid имеет значение v = 1). Страницы 1, 3, 4 в основной памяти отсутствуют (бит valid/invalid равен i = 0).

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

Если в таблице страниц имеется ссылка на страницу, отсутствующую в памяти, первое же обращение по такой ссылке приведет к прерыванию и вызову ОС (ситуации 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).

Проблема замещения страниц

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

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

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

Пример замещения страниц приведен на рис. 18.6.

увеличить изображение Рис. 18.6.  Пример замещения страниц.

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

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

  • в каком порядке обслужить процессы 1 и 2, в каждом из которых возникла необходимость в свободном фрейме?

Кратко алгоритм замещения страниц можно сформулировать следующим образом:

  1. Найти, где размещается требуемая страница на диске.

  2. Найти свободный фрейм:

    • Если есть свободный фрейм, использовать его.

    • Если нет свободных фреймов, использовать алгоритм замещения страниц для выбора фрейма -"жертвы".

  3. Прочитать содержимое требуемой страницы во вновь освобожденный фрейм. Модифицировать таблицы фреймов и страниц.

  4. Продолжить выполнение процесса.

На рис. 18.7 иллюстрируется момент замещения страниц, с предварительной откачкой страницы-жертвы на диск.

увеличить изображение Рис. 18.7.  Замещение страниц с откачкой жертвы на диск.

Этапы замещения страниц: 1 – откачка жертвы; 2 – изменение ее элемента таблицы страниц (бит valid заменяется на invalid); 3 – подкачка на освободившееся место желаемой страницы; 4 – изменение элемента таблицы страниц для новой страницы (бит invalid заменяется на valid; запоминается физический адрес подкачанной страницы).

Алгоритмы замещения страниц

Как видно из рассмотренного выше, поиск оптимального алгоритма замещения страниц должен быть основан на следующем критерии: необходимо добиваться уменьшения коэффициента отказов страниц p.

Оценка алгоритма может быть выполнена путем опробования его на конкретной строке обращений к памяти (строке запросов) и определения числа отказов страниц при данной строке запросов.

Во всех приводимых ниже в данном разделе примерах из области страничной организации строка запросов имеет вид:

1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.

График зависимости числа отказов страниц от числа фреймов в основной памяти изображен на рис. 18.8.

увеличить изображение Рис. 18.8.  Зависимость числа отказов страниц от числа фреймов.

В целом, как и подсказывает здравый смысл, зависимость обратно пропорциональная: чем больше имеется фреймов, тем меньше отказов страниц. Однако случаются и аномалии в этом законе, рассмотренные далее.

Алгоритм FIFO (First-In-First-Out). Наиболее простой алгоритм замещения страниц – в качестве жертвы всегда выбирается фрейм, первым из имеющихся считанный в основную память.

Рассмотрим пример использования данного алгоритма.

Пусть строка запросов имеет вид: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.

Случай 1: 3 фрейма (3 страницы могут быть одновременно в памяти для одного процесса). Пусть имеются три процесса. Их таблицы страниц примут вид:

(1, 2, 3) (4, 1, 2) (5, 3, 4).

В данном случае имеет место 9 отказов страниц (проверьте в качестве упражнения).

Случай 2: 4 фрейма. Пусть имеются по-прежнему три процесса. Таблицы страниц в данном случае будут иметь вид:

(1, 2, 3, 4) (5, 1, 2, 3) (4, 5)

Нетрудно проверить, что в данном случае имеет место 10 (!) отказов страниц, несмотря на то, что процесс может иметь больше свободных фреймов, чем в предыдущем случае.

Данная аномалия называется аномалией Belady.

В целом же, как уже говорилось, зависимость такова, что чем больше фреймов может иметь процесс (при достаточно большом числе фреймов), тем меньше отказов страниц.

Пример работы алгоритма FIFO для замещения страниц, при максимальном числе фреймов для процесса, равном 3, приведен на рис. 18.9.

Рис. 18.9.  Пример работы алгоритма FIFO.

На рис. 18.10 изображен график зависимости числа отказов страниц от числа фреймов при алгоритме FIFO, отображающий аномалию Belady.

увеличить изображение Рис. 18.10.  Аномалия Belady при использовании алгоритма FIFO замещения страниц.

Оптимальный алгоритм замещения страниц

Одна из возможных стратегий замещения страниц следующая: Замещается та страница, которая не использовалась в течение наибольшего периода времени. Это вполне оправдано с точки зрения здравого смысла: чем раньше страница последний раз использовалась, тем, по-видимому, меньше она необходима в основной памяти.

Рассмотрим пример применения данного алгоритма с той же строкой запроса и с четырьмя максимально возможными фреймами у каждого процесса:

1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5

Нетрудно видеть, что будет иметь место всего 6 отказов страниц (в отличие от алгоритма FIFO с 10 отказами страниц).

Пример использования оптимального алгоритма замещения страниц с той же строкой запроса, которая применялась на рис. 18.9 для алгоритма FIFO, приведен на рис. 18.11.

увеличить изображение Рис. 18.11.  Пример использования оптимального алгоритма замещения страниц.

Алгоритм Least Recently Used (LRU)

Данный алгоритм замещения страниц основан на следующем принципе: Замещается та страница, которая раньше всего использовалась.

Для примера со сторокой запросов: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 число отказов страниц равно всего 4.

Однако следует иметь в виду, что использование системой информации о времени последнего обращения к странице требует хранения в каждом элементе таблицы страниц значения времени последнего обращения (time stamp). Каждый элемент таблицы страниц содержит счетчик. Rаждый раз при обращении к странице через некоторый элемент таблицы страниц содержимое системных часов (clock) копируется в его поле счетчика.

Если требуется изменение в конфигурации страниц, необходимо проанализировать поля счетчиков всех элементов таблицы страниц, чтобы определить, какую именно страницу следует заместить. Для определения элемента таблицы страниц с минимальным счетчиком требуется применить алгоритм поиска минимального элемента в массиве, сложность которого O(n), где n – длина таблицы страниц.

Пример использования алгоритма замещения страниц LRU с той же строкой запроса, что и на рис. 18.9 и рис. 18.11 для других алгоритмов, приведен на рис. 18.12.

увеличить изображение Рис. 18.12.  Пример использования алгоритма замещения страниц LRU.

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

На рис. 18.13 приведен пример использования стека в алгоритме LRU для хранения самых недавних обращений к страницам.

Рис. 18.13.  Использование стека в алгоритме LRU для хранения самых недавних обращений к страницам.

Алгоритмы, близкие к LRU

Имеется несколько алгоритмов, близких к алгоритму LRU, в которых реализованы различные идеи улучшений или упрощений, направленные на то, чтобы уменьшить недостатки LRU.

  1. Бит ссылки (reference bit). В данном алгоритме с каждой страницей связывается бит, первоначально равный 0. При обращении к странице бит устанавливается в 1. Далее, при необходимости замещения страниц, заменяется та страница, у которой бит равен 0 (если такая существует), т.е. страница, к которой не было обращений. Данная версия алгоритма позволяет избежать поиска по таблице страниц. Однако она, очевидно, менее оптимальна, чем LRU.

  2. Второй шанс (second chance). В данной версии алгоритма используются ссылочный бит и показания часов, которые хранятся в каждом элементе таблицы страниц. Замещение страниц основано на показаниях часов. Если страница, которую следует заместить (по показаниям часов), имеет ссылочный бит, равный 1, то выполняются следующие действия:

    • Установить ссылочный бит в 0;

    • Оставить страницу в памяти;

    • Заместить следующую страницу (по показаниям часов), по тем же самым правилам.

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

Схема алгоритма второго шанса изображена на рис. 18.14.

увеличить изображение Рис. 18.14.  Алгоритм второго шанса.

лгоритмы со счетчиком

Идея, родственная идее алгоритма LRU, - хранить счетчики числа обращений к каждой странице. На основе этой идеи существуют два алгоритма:

  • - Алгоритм Least Frequently Used (LFU): замещать страницы с минимальным значением счетчика (к которым было меньше всего обращений);

  • - Алгоритм Most Frequently Used (MFU): замещать страницы с максимальным значением счетчика. Данный алгоритм основан на соображении, что страница с минимальным счетчиком – возможно, лишь недавно загружена, и, видимо, в дальнейшем будет активно использоваться, поэтому она оставляется в памяти.

Выделение фреймов

До сих пор мы рассматривали алгоритмы замещения страниц при определенном числе фреймов, выделенных каждому процессу. Рассмотрим теперь стратегии выделения фреймов. При их выделении ОС исходит из того, чтобы каждому процессу выделить минимально необходимое число страниц.

Однако различные аппаратные платформы имеют свои особенности, что тоже приходится учитывать. Например, в системе IBM 370 требуется 6 (!) страниц, чтобы обработать команду MOVE (пересылки) формата SS (Storage-Storage). В самом деле, длина команды - 6 байтов, так что она может размещается на двух соседних страницах. Кроме того, максимум две страницы требуются для обработки источника и максимум две страницы – для обработки получателя. Разумеется, подобный казус не может произойти в RISC-системах.

В операционных системах используются две основных схемы выделения фреймов - фиксированное выделение и выделение по приоритетам.

Фиксированное выделение фреймов. Наиболее простой вариант - равномерное распределение фреймов процессам. Например, если имеется 100 фреймов и 5 процессов, каждому выделяется по 20 страниц. Используется также пропорциональное распределение – выделять фреймы в соответствии со следующим принципом: если общее число фреймов m, размер процесса – s, а общий размер всех процессов – S, то общее число фреймов, выделенных процессу, равно:

a = m * (s / S).

Выделение по приоритетам. Принцип данного распределения фреймов следующий: применять схему пропорционального распределения, но используя приоритеты, а не размер. Если процесс генерирует отказ страницы, то для замещения выделяется фрейм из процесса с более низким приоритетом.

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

Thrashing

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

Неформально, thrashing означает катастрофическую нехватку фреймов в основной памяти. На практике для пользователя это выглядит следующим образом (автор сам неоднократно испытывал подобные ощущения, вынужденный работать на SPARC-станции с очень малым объемом памяти): жесткий диск буквально "надрывается" от непрерывных обращений, а процесс исполняется крайне медленно. Интересно отметить, что SPARC-станция с 32 мегабайтами памяти и ОС Solaris успешно выдерживали эти экстремальные нагрузки (причем на данной конфигурации пропускалась достаточно большая Java-программа). Это говорит о высокой надежности системы Solaris.

Другой реальный пример – использование ОС Windows XP (Service Pack 3) на компьютере с 512 мегабайтами памяти. При этом возникает почти такое же ощущение - сначала кажется, что неисправен жесткий диск, но затем сразу осознаешь, что все дело в нехватке памяти: самые простые программы, такие как Internet Explorer, Windows Explorer и др., будучи вызванными одновременно (что является обычной практикой) переполняют основную память и вынуждают операционную систему при любом дополнительном действии пользователя (даже при простом передвижении полосы прокрутки по именам файлов в Windows Explorer) непрерывной откачкой и подкачкой.

На рис. 18.15 приведен график зависимости использования процессора от коэффициента мультипрограммирования. При очень большом числе обрабатываемых процессов полезность использования процессора резко падает из-за постоянных откачек и подкачек. Это и есть thrashing.

увеличить изображение Рис. 18.15. 

Модель рабочего множества

Если более глубоко проанализировать ситуацию с thrashing, то возникает вопрос, с какой целью используется страничная организация. При использовании локальной модели распределения фреймов, процесс мигрирует от одной локальной модели к другой. Однако локальные модели различных процессов могут пересекаться.

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

Для борьбы с подобными явлениями в операционных системах для распределения фреймов используется модель рабочего множества. Обозначим через Δ (рабочее множество) фиксированное число обращений к страницам.

Рассмотрим WSSi (рабочее множество процесса Pi) - общее число обращений к страницам в самой недавней Δ (меняется в зависимости от времени).

Если Δ очень мало, не рассматриваем полную локальную потребность.

Если Δ слишком велико, рассматриваем несколько локальных потребностей.

Если Δ = ∞, рассматриваем всю программу.

Вычислим величину D = WSSi- общий объем требований фреймов всех процессов. Пусть m – размер основной памяти.

Если D > m то Thrashing (m - общий размер памяти).

Политика ОС по борьбе с thrashing’ом заключается в том, чтобы, если D > m, приостановить один из процессов.

Пример использования рабочего множества и вычисления WSSiприведен на рис. 18.16.

Рис. 18.16.  Пример использования рабочего множества.

Страничная организация по требованию в Windows NT

ОС Windows NT Использует страничную организацию "по требованию" и кластеризацию, т.е. подкачку страниц, смежных с затребованной. Процессам выделяются минимальное и максимальное рабочие множества. Минимальное рабочее множество – это набор страниц, которые процесс гарантированно имеет в памяти. Процесс может иметь в памяти число страниц до максимума рабочего множества. Если объем свободной памяти в системе становится меньше некоторого порогового значения (threshold), то ОС выполняет сокращение рабочих множеств процессов (working set trimming). Сокращение рабочих множеств – это изъятие у процессов "лишних" страниц в оперативной памяти, которые превышают минимальный размер их рабочих множеств.

Соседние файлы в предмете Архитектура вычислительных систем