22
Операционные Системы 8. Управление памятью Брагин Алексей Владимирович [email protected] ИУ9, МГТУ им. Н.Э. Баумана

Операционные системы 2015, лекция № 8

Embed Size (px)

Citation preview

Операционные Системы

8. Управление памятью

Брагин Алексей Владимирович[email protected]

ИУ9, МГТУ им. Н.Э. Баумана

© 2013 Брагин А.В. 2

Трансляция адресов

фрейм 0

фрейм 1

фрейм 2

фрейм Y

фрейм 3

физическая память

смещениефизический адрес

№ фрейма№ фрейма

таблица страниц

смещениевиртуальный адрес

№ вирт. страницы

Запись PTE

• V – может ли использоваться данная запись PTE (valid or not)

• R – был ли доступ к этой странице• M – была страница модифицирована• P – какие операции разрешены• PFN – номер фрейма

© 2013 Брагин А.В. 3

PFNPMRV

© 2013 Брагин А.В. 4

Страничная память наглядно

• Основано на иллюстрации Gribble, Lazowska, Levy, Zahorjan

page frame 0

физическая памятьвиртуальное адресное

пространство

page frame 1

page frame 2

page frame 3

page frame 4

page frame 5

page frame 6

page frame 7

0

1K

2K

3K

4K

5K

6K

7K

8K

страница 0

страница 1проц

есс

0

0

K

2K

таблица страниц

страница 0

страница 1

Про

цесс

1

0

K

2K

таблица страниц

страница 2

страница 33K

4Kpage frame 8

9Kpage frame 9

10K

виртуальное адресное пространство

© 2013 Брагин А.В. 5

Страничная виртуальная память

• Адресное пространство может быть не полностью резидентным– Остальная часть во вторичной памяти– ОС использует основную память как кэш– Нужная страница перемещается в свободный

фрейм физической памяти– Если свободных фреймов нет, то страница

выгружается на диск (запись нужна, только если она была модифицирована)

– Всё это происходит прозрачно для программы

© 2013 Брагин А.В. 6

Page Fault (страничное прерывание)

• Процесс обращается к виртуальному адресу на выгруженной (или не загруженной) странице– Когда страница выгружается, ОС устанавливает бит

присутстсвия (valid) PTE в 0, и записывает куда она была выгружена

– Когда процесс обращается к этой странице, происходит исключение (т.к. valid = 0)

– ОС передаёт управление обработчику страничного прерывания

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

обновляет PTE и ставит бит присутствия в 1

© 2013 Брагин А.В. 7

Загрузка по требованию

• Страницы загружаются в основную память только тогда, когда к ним обращаются

• Предсказать заранее, какая точно страница потребуется – как гадать на кофейной гуще

• Но есть логичный подход: кластеризация страниц– ОС ведёт учёт страниц, которые обычно загружаются

вместе– Если идёт обращение к одной из них, то загружать все

страницы кластера– Можно даже предоставить программисту возможность

определять такие кластеры

© 2013 Брагин А.В. 8

Замещение страниц

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

• Алгоритмы замещения страниц– Выбрать страницу, которая не понадобится в

ближайшем будущем– Выбрать страницу, которая не была

модифицирована (и обойтись без записи на диск)– Обычно, ОС ведёт пул свободных страниц, чтобы

обойтись без замены

© 2013 Брагин А.В. 9

Как загружается программа• Создаётся PCB• Создаётся таблица страниц• Образ программы на диске размещается блоками в

адресное пространство• Строится таблица страниц (указатель на неё есть в PCB)

– Все PTE имеют бит присутствия 0– Заносится информация о нахождении на диске

• Исполнение первой же инструкции приводит к прерыванию

• Обработчик прерывания загружает страницы

© 2013 Брагин А.В. 10

Как загружается программа 2• И оно действительно так работает!• Принцип локальности

– Одна загрузка – много обращений (локальность по времени)

– Вероятны обращения к страницам рядом с уже загруженной (локальность по расположению)

• Загрузка страниц может быть не такой частой– Локальность– Политика замещения страниц– Объём физической памяти– «Рабочее множество»

© 2013 Брагин А.В. 11

Выгрузка лучшей страницы

• Цель алгоритма замещения страниц: Уменьшить число страничных прерываний путём выбора лучшей страницы для выгрузки– Лучшая – та, к которой больше не будет

обращений (Thanks, C.O.!)• Далее рассмотрим разные алгоритмы

© 2013 Брагин А.В. 12

№ 1. Алгоритм Belady• Оптимальность доказана по критерию наименьшего числа

страничных прерываний– Выгрузить страницу, которая дольше всех не будет использоваться

в будущем– Проблема предсказания будущего

• Алгоритм полезен для сравнения– Если другой алгоритм ненамного хуже, чем Belady – значит он

хороший!• Не существует «лучшего» алгоритма, т.к. зависит от задачи• Не существует «худшего» алгоритма. Но эталон худшего –

случайный выбор страницы для замены– случайное == худшее не всегда!

© 2013 Брагин А.В. 13

№ 2. FIFO• Прост в реализации

– При загрузке страницы, поместить её в конец списка– Выгружать страницы из начала списка

• Преимущество– Выгружается самая старая страница (может редко используемая)

• Недостатки– А может она всё ещё используется– Нет уверенности в этом– Плохая производительность

• Аномалия Belady– Если дать процессу больше физической памяти, то определенные

последовательности обращений к страницам приведёт к увеличению числа страничных прерываний

© 2013 Брагин А.В. 14

№ 3. LRU (Least Recently Used)• Использует информацию об обращениях к странице

для принятия решения о выгрузке– Смысл: угадать будущее на основе прошлого– При замещении выгрузить ту страницу, которая дольше всех

не использовалась• Алгоритм Belady заглядывает в будущее, а LRU в

прошлое• Реализация

– В идеале нужно сохранять время при каждом обращении к памяти в PTE, сортировать на основе этих данных, и т.д.

– Но это слишком дорого

© 2013 Брагин А.В. 15

Аппроксимация LRU• Существуют разные приближения к LRU, на основе бита

referenced в PTE– Вести счётчик для каждой страницы– Регулярно для каждой страницы

• Если бит ref = 0, увеличить счётчик• Если бит ref = 1, обнулить счётчик• Обнулить бит ref

– Счётчик будет содержать количество временных интервалов с момента последнего обращения к памяти

• Выгружается та страница, у которой значение наивысшее

• Что, если нет этого бита в PTE?– Различные некрасивые ухищрения

© 2013 Брагин А.В. 16

№ 4. NRU (Not Recently Used)

• Замещает достаточно старую страницу• Фреймы организуются в виде

часов• «Стрелка» - выбирает кандидата

– Идёт по кругу по «часам»– Если бит ref = 0, то выгружаем её– Если бит ref = 1, то обнуляем его и идёт дальше

• Если много памяти, то ниже затраты и ниже точность

6

5 4

3

1 2

© 2013 Брагин А.В. 17

Распределение фреймов между процессами

• FIFO и NRU могут быть реализованы как– Локальный алгоритм замещения

• У каждого процесса свой лимит на число страниц, которое он может использовать

• Выгружает только свои страницы– Глобальный алгоритм замещения

• Выгружает независимо от владельца

• Linux использует глобальное замещение• Гибридные алгоритмы (локальное замещение, и

механизм явного добавления/удаления фреймов)

© 2013 Брагин А.В. 18

№ 5. Рабочее множество• Рабочее множество (working set) процесса – для

моделирования локальности использования памяти– Рабочее множество – множество тех страниц процесса,

которые ему сейчас нужны• Формальное определение (П. Деннинг, 1968)

– WS(t,w) = { страницы P, к которым были обращения за интервал (t-w, t) }, где

• t – время• w – «окно» рабочего множества

– Тогда страница находится в рабочем множестве тогда, когда к ней обращались за последние w единиц времени

• WS изменяется во времени, и размер WS также меняется

© 2013 Брагин А.В. 19

Размер рабочего множества

• Обозначим как |WS(t,w)|• |WS(t,w)| зависит от локальности

– При плохой локальности, подгружается много страниц– |WS(t,w)| в этот момент увеличивается

• Очевидно, что WS должно быть в памяти• Иначе – «пробуксовка» (thrashing), т.е. постоянные

страничные прерывания• «А сколько памяти нужно Google Chrome?!» =>• «Какой средний размер рабочего множества Google

Chrome»

© 2013 Брагин А.В. 20

Алгоритм рабочего множества

• Оценить |WS(0,w)| для процесса• Запустить процесс, только если есть столько

фреймов• Используя алгоритм замещения загружать

«нужные» страницы• Динамически отслеживать размеры

рабочего множества процессов

© 2013 Брагин А.В. 21

№ 6. Алгоритм PFF

• Page Fault Frequency – Частота страничных прерываний

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

процесса– Если выше определенного порога – предоставляет

процессу больше памяти– Если меньше, то забирает у него память

© 2013 Брагин А.В. 22

Thrashing (пробуксовка)

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

при достаточном объёме памяти– Из-за слишком большого числа активных

процессов