
- •Лекція №10 Управління пам'яттю
- •10.1. Основные понятия и требования к управлению памятью
- •10.1.1. Перемещение
- •10.1.2. Защита
- •10.1.3. Совместное использование
- •10.1.4. Типы адресов
- •10.2. Распределение памяти без использования дискового пространства
- •10.2.1. Распределение памяти фиксированными разделами
- •10.2.2. Динамическое распределение памяти
- •10.2.3. Перемещаемые разделы
- •10.2.4. Система двойников
- •10.3. Распределение памяти с использованием дискового пространства
- •10.3.1. Понятие виртуальной памяти
- •10.3.2. Страничное распределение
- •10.3.3. Сегментное распределение
- •10.3.4. Странично-сегментное распределение
- •10.3.5. Свопинг
- •10.3.6. Стратегии управления страничной памятью
- •Основные алгоритмы замещения страниц
- •Оптимальный алгоритм (opt)
- •Выталкивание дольше всего не использовавшейся страницы (lru)
- •Часовой алгоритм
- •Буферизация страниц
- •Стратегия замещения и размер кэша
10.2.3. Перемещаемые разделы
Одним из методов борьбы с фрагментацией является перемещение всех занятых участков в сторону старших либо в сторону младших адресов, так, чтобы вся свободная память образовывала единую свободную область (рис. 10.5). В дополнение к функциям, которые выполняет ОС при распределении памяти переменными разделами, в данном случае она должна еще время от времени копировать содержимое разделов из одного места памяти в другое, корректируя таблицы свободных и занятых областей. Эта процедура называется "сжатием".
Рис. 10.5. Распределение памяти перемещаемыми разделами
Сжатие может выполняться либо при каждом завершении задачи, либо только тогда, когда для вновь поступившей задачи нет свободного раздела достаточного размера. В первом случае требуется меньше вычислительной работы при корректировке таблиц, а во втором - реже выполняется процедура сжатия. Так как программы перемещаются по оперативной памяти в ходе своего выполнения, то преобразование адресов из виртуальной формы в физическую должно выполняться динамическим способом.
Хотя процедура сжатия и приводит к более эффективному использованию памяти, она может потребовать значительного времени, что часто перевешивает преимущества данного метода.
10.2.4. Система двойников
Как фиксированное, так и динамическое распределение памяти имеют преимущества и недостатки. Компромиссным в этом плане является система двойников, в которой память распределяется блоками размером 2К, L <= K <= U, где: - 2L – минимальный размер выделяемого блока памяти;
2U – наибольший распределяемый блок (вначале вся доступная память).
При запросе размером S, таким, что 2U-1 < S <= 2U, выделяется весь блок. В противном случае блок разделяется на два равных двойника с размерами 2U-1. Если 2U-2 < S <= 2U-1, то по запросу выделяется один из двух двойников; в противном случае один из двойников вновь делится пополам. Этот процесс продолжается до тех пор, пока не будет сгенерирован наименьший блок, размер которого не меньше S.
Система двойников постоянно ведет список “дыр” (доступных блоков) для каждого размера 2i. Дыра может быть удалена из списка (i+1) разделением ее пополам и внесением двух новых дыр размера 2i в список i. Когда пара двойников в списке i оказывается освобожденной, они удаляются из списка и объединяются в единый блок в списке i+1.
Ниже приведен пример (рис. 10.6) использования блока с начальным размером 1 Мбайт. Первый запрос А — на 100 Кбайт (для него требуется блок размером 128 Кбайт). Для этого начальный блок делится на два двойника по 512 Кбайт. Первый из них делится на двойники размером 256 Кбайт, и, в свою очередь, первый из получившихся при этом разделении двойников также делится пополам. Один из получившихся двойников размером 128 Кбайт выделяется запросу А. Следующий запрос В требует 256 Кбайт. Такой блок имеется в наличии и выделяется. Процесс продолжается с разделением и слиянием двойников при необходимости. Обратите внимание, что после освобождения блока Е происходит слияние двойников по 128 Кбайт в один блок размером 256 Кбайт, который, в свою очередь, тут же сливается со своим двойником.
Система двойников представляет собой разумный компромисс для преодоления недостатков схем фиксированного и динамического распределения, но в современных операционных системах ее превосходит виртуальная память, основанная на страничной организации и сегментации. Однако система двойников нашла применение в параллельных системах как эффективное средство распределения и освобождения параллельных программ. Модифицированная версия системы двойников используется для распределения памяти ядром UNIX .
Рис. 10.6. Пример системы двойников