Upload
aleksey-bragin
View
308
Download
5
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 – Частота страничных прерываний
• Пытается уравнять число страничных прерываний между всеми процессами и снизить их общее число– Следит за числом страничных прерываний каждого
процесса– Если выше определенного порога – предоставляет
процессу больше памяти– Если меньше, то забирает у него память