
- •6. Управление памятью
- •6.1. Требования, технологии управления памятью (Лекция 13)
- •6.1.1. Требования к управлению памятью
- •6.1.1.1. Проблема управления памятью, основные требования
- •6.1.1.2. Типы адресов
- •6.1.2. Технологии управления памятью
- •6.1.2.1. Распределение памяти фиксированными разделами
- •6.1.2.2. Распределение памяти разделами переменной величины
- •6.1.3. Понятие виртуальной памяти. Методы распределения памяти с использованием дискового пространства.
- •Понятие виртуальной памяти
- •6.1.3.2. Страничное распределение виртуального адресного пространства
- •6.1.3.3. Сегментное распределение виртуального адресного пространства
- •Странично-сегментное распределение виртуального адресного пространства
- •Свопинг
- •6.1.4. Принцип кеширования данных
- •6.1.4.1. Иерархия запоминающих устройств. Принцип кеширования
- •6.1.5. Структура таблицы страниц
- •6.1.5.1. Двухуровневая таблица страниц
- •6.1.5.2. Буфер поиска трансляции
- •6.2. Стратегии ос для управления памятью (Лекция 14)
- •6.2.1. Алгоритмы замещения страниц
- •6.2.1.1. Стратегия замещения и алгоритмы
- •6.3. Управление памятью в защищенном режиме процессора Intel Pentium(Лекция 15)
- •6.3.1. Сегменты, дескрипторы сегментов, дескрипторные таблицы
- •6.3.1.1. Сегментная модель памяти, дескриптор сегмента
- •6.3.1.2. Дескрипторные таблицы, селекторы сегментов
6.2. Стратегии ос для управления памятью (Лекция 14)
6.2.1. Алгоритмы замещения страниц
6.2.1.1. Стратегия замещения и алгоритмы
Стратегия замещения предполагает решение вопроса выбора страниц в основной памяти для замещения их загружаемыми из вторичной памяти. Здесь затрагиваются следующие вопросы:
1) Какое количество кадров должно быть выделено каждому активному процессу;
2) Должно ли множество страниц, которые потенциально могут быть замещены загружаемыми страницами, ограничиваться одним процессом или в качестве кандидатов на замещение могут рассматриваться все кадры страниц основной памяти;
3) Какие именно страницы из рассматриваемого множества следует выбрать в качестве кандидатов на выгрузку.
Термин "стратегия замещения" обычно используется для обозначения третьего вопроса. Когда все кадры основной памяти заняты, и требуется разместить новую страницу в процессе обработки страничной ошибки, стратегия замещения определяет, какя из находящихся в настоящее время в основной памяти страниц должна быть выгружена, что освободить кадр для загружаемой страницы. Все стратегии направлены на то, чтобы выгрузить страницу, обращений к которой в ближайшем будущем не последует. В соответствии с принципом локализации наблюдается корреляция между множеством страниц, к которым в последнее время были обращения, и множеством страниц, к которым будут обращения в ближайшее время. Большинство стратегий пытаются определить будущее поведение программы на основе её прошлого поведения.
Следует отметить, что некоторые кадры могут быть заблокированы – т.е. не могут быть замещены. В частности, большинство ядер ОС хранятся в заблокированных кадрах.
Имеется ряд основных алгоритмов, используемых для выбора замещаемой страницы:
Оптимальный алгоритм;
Алгоритм дольше всех неиспользовавшегося;
Алгоритм "первым вошел – первым вышел";
Часовой алгоритм.
Оптимальная стратегия состоит в выборе для замещения той страницы, обращение к которой будет через наибольший промежуток времени по сравнению со всеми остальными страницами. Этот алгоритм приводит к минимальному количеству страничных ошибок. Реализовать такой алгоритм невозможно, т.к. для этого системе нужно знать все будущие события. Однако этот алгоритм является стандартом, с которым сравниваются реальные алгоритмы.
6.3. Управление памятью в защищенном режиме процессора Intel Pentium(Лекция 15)
6.3.1. Сегменты, дескрипторы сегментов, дескрипторные таблицы
6.3.1.1. Сегментная модель памяти, дескриптор сегмента
Сегмент– это блок адресов.
Рис.1
Segment – отрезок памяти.
В системе может быть много сегментов – по необходимости.
Каждый сегмент имеет описатель – дескриптор.
Это сложная 8-байтная структура данных. Здесь собирается вся информация об обращении к памяти в пределах данного сегмента.
Если некоторый участок памяти не описан, т.е. не оформлен в виде сегмента, память недоступна системе. При обращении к таким адресам формируется исключение.
Формат дескриптора сегмента:
Рис.2
Разбросанный характер объясняется совместимостью с 80286, где сегментный дескриптор имел 0 в старшем слове (48-63).
Базовый адрес – 32-х разрядный адрес начала сегмента в пространстве 0…4Gb.
Бит G–granularity, гранулярность.
Определяет размер элементов сегмента, в байтах или страницах по 4 К.
Сегмент с байтной гранулярностью имеет максимальный размер 1 Мб, со страничной – 4 Gb.
Размер сегмента или предел. Это поле имеет 20 бит, соответственно, может определять 220= 1 Мб элементов, которыми могут быть байты или страницы по 4 К.
Размер сегмента = предел+1, т.е. сегмента с нулевым размером не бывает.
Предел (limit) есть максимальное смещение в сегменте; если смещение превысит предел, адрес окажется «за пределами» сегмента, поэтому возникаетFGPпри попытке обращения к памяти.
Байт 5 дескриптора (считая с 0) содержит права доступа – accessrights,AR.
Р – бит присутствия в оперативной памяти.
При выборе сегмента с Р=0 возникает особый случай неприсутствия сегмента. ОС должна загрузить сегмент в ОЗУ и осуществить рестарт команды.
DPL– 00 – наибольшие привилегии, 11 – наименьшее.
S– системный объект:
S=0 – системный объект,S=1 – несистемный.
TYPE– 3 бита, допустимые операции над сегментом.
000 – только считывание;
001 – считывание и запись;
010 – (стек) только считывание – не применяется;
011 – (стек) считывание и запись;
100 – (код) только выполнение (даже без считывания);
101 – (код) выполнение и считывание;
110 – (код) подчиненный сегмент, только выполнение;
111 – (код) подчиненный сегмент, выполнение и считывание.
Бит А – доступа или обращения.
Процессор автоматически устанавливает А в 1, при обращении к тому сегменту, который определяется этим дескриптором. ОС может использовать этот бит для отслеживания не часто используемых сегментов.
Бит D–DefaultSize– размер по умолчанию.
D=0 – операнды в сегменте считаются 16-битными.
D=1 - операнды в сегменте считаются 32-битными.
Так легко организовать сегменты 16-битного и 32-битного кода, а процессору ничего не стоит переключаться между ними.
Для сегментов данных и стека аналогично. Для стека 16 бит используется SP, а размер ограничен 64 Кб.
X – зарезервировано, must be 0.
U–user– для использования программистами; процессором игнорируется. Возможное применение – пометка для «сборки мусора».