Страничная организация памяти
Виртуальное адресное пространство каждого процесса делится на страницы фиксированного размера, последняя страница дополняется фиктивной областью
Оперативная память машины тоже делится на страницы (блоки, кадры).
Размер страницы выбирается равным степени 2, так проще преобразовывать адреса.
Для каждого процесса ОС создает таблицу страниц – структуру с записями о всех ВИРТУАЛЬНЫХ СТРАНИЦАХ процесса.
Запись в таблице называется ДЕСКРИПТОРОМ СТРАНИЦЫ. Он содержит:
- номер физической страницы, куда загружена виртуальная
- признак присутствия (есть ли страница в памяти)
- признак модификации (1 – когда произошла запись по этому адресу)
- признак обращения к страницу (бит доступа) – в 1 при каждом обращения.
Последние три в современных процессорах устанавливаются аппаратно.
Таблица страниц хранится в памяти, ее адрес – часть контекста процесса.
ОС обращается к памяти:
- получает номер виртуальной страницы процесса
- идет в Таблицу Страниц и находит там нужный дескриптор
- смотрит бит присутствия – если 1, то заменяет виртуальный адрес тем физическим адресом, который для нее указан
- если 0 – генерируется ошибка страницы, процесс – блокируется, активизируется новый.
- вызывается программа обработки страничного прерывания. Она находит страницу на диске и загружает ее в память (с выгружением или без другой страницы);
- если страница, которую надо выгрузить, была модифицирована – ее переписывают на диск.
- страница обнуляется (чтобы нельзя было использовать инфу выгруженной страницы)
2 базисных свойства страничной организации:
1) размер страницы = степени двойки
Степень – это количество младших разрядов смещения;
Все остальные разряды – номер страницы.
2 16 – значит 16 разрядов – это смещение.
2) смещения виртуальное и физическое равны (они отображаются непрерывно);
Преобразование виртуальных номеров страниц в физические при страничной организации:
1) Надо получить адрес нужного дескриптора в Таблице Страниц
Есть:
· адрес начала таблицы страниц (АТ) – хранится в спец регистре процессора
· длина записи в таблице страниц (Л) – системная константа
· номер виртуальной страницы Р – это старшие разряды виртуального адреса (известен размер страницы)
Адрес дескриптора = АТ + (Р * Л);
2) Из дескриптора извлекается номер физической страницы – Н
3) К номеру физической страницы добавляется смещение С (младшие разряды виртуального адреса)
Типичная машинная инструкция требует 3-4 обращения к памяти (взять команду, данные, записать результаты). Каждое обращение – требует преобразования адреса либо обработку страничного прерывания. Это снижает производительность системы, поэтому нужна оптимизация виртуальной памяти:
· Аппаратный механизм получения физического адреса по виртуальному
· Размер страницы = степени двойки (можно заменить сложение конкатенаций, это проще);
· Кэширование таблицы страниц (хранение наиболее часто используемых записей в регистрах);
Также для производительности важна частота ошибок страниц. Она зависит от размера страницы и алгоритмов вытеснения страниц из памяти.
Основной смысл алгоритмов: вытеснение страниц, к которым дольше всего НЕ БУДЕТ обращений.
· Случайный выбор (т.к. предсказать сложно, дает неплохие результаты за счет отсутствия всяческих вычислений)
· Страница, которая дольше всего не использовалась
· Страница, к которой было меньше всего обращений за период времени (для каждой страницы ведется счетчик обращений)
Кроме того, используется принцип УПРЕЖДАЮЩЕЙ загрузки:
· В память загружается не одна страница, а вместе с прилежащими к ней.
Второй важный критерий – размер страницы.
· Чем больше размер страницы – тем меньше страничных прерываний
· Чем больше размер – тем меньше записей в таблице страниц, тем меньше размер таблицы страниц, а она ведь хранится в памяти!
· Но чем больше страница – тем больше фиктивная область
Типичный размер страницы – несколько килобайт – в Интел Пентиум – 4 килобайта.
Еще можно хранить в памяти не всю таблицу страниц:
Организуется несколько уровней таблицы страниц:
· Виртуальные адреса делятся на разделы, а разделы делятся на страницы.
· Размер раздела – тоже степень двойки
· У каждого раздела своя таблица страниц
· Размер таблицы страниц раздела = размеру страницы
· Инфа о разделах собрана в таблицу разделов, именно она всегда в памяти
· Адрес таблицы разделов – в специальном регистре процессора (игла в яйце, яйцо в утке….)
Итого:
· Экономится память
· Снижается производительность (добывание страницы занимает больше усилий и времени)
Размер страницы 2Н
Размер раздела – 2К
Н разрядов – смещение
К разрядов – номер виртуальной страницы
Что осталось – номер раздела
Также страничную организацию памяти можно использовать и без выгрузки разделов на диск. Она высоко реактивна и дает низкую фрагментацию – используется в ОС Novell Netware 3 и 4;