- •Лекція №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.3. Распределение памяти с использованием дискового пространства
В этом разделе речь пойдет о наиболее распространенной в настоящее время схеме управления памятью, известной как виртуальная память, в рамках которой осуществляется сложная связь между аппаратным и программным обеспечением. Разбиение адресного пространства процесса на части и динамическая трансляция адреса позволили выполнять процесс даже в отсутствие некоторых его компонентов в оперативной памяти. Следствием такой стратегии является возможность выполнения больших программ, размер которых может превышать размер оперативной памяти.
10.3.1. Понятие виртуальной памяти
Уже достаточно давно пользователи столкнулись с проблемой размещения в памяти программ, размер которых превышал имеющуюся в наличии свободную память. Решением было разбиение программы на части, называемые оверлеями. 0-ой оверлей начинал выполняться первым. Когда он заканчивал свое выполнение, он вызывал другой оверлей. Все оверлеи хранились на диске и перемещались между памятью и диском средствами операционной системы. Однако разбиение программы на части и планирование их загрузки в оперативную память должен был осуществлять программист.
Развитие методов организации вычислительного процесса в этом направлении привело к появлению метода, известного под названием виртуальная память. Виртуальным называется ресурс, который пользователю или пользовательской программе представляется обладающим свойствами, которыми он в действительности не обладает. Так, например, пользователю может быть предоставлена виртуальная оперативная память, размер которой превосходит всю имеющуюся в системе реальную оперативную память. Пользователь пишет программы так, как будто в его распоряжении имеется однородная оперативная память большого объема, но в действительности все данные, используемые программой, хранятся на одном или нескольких разнородных запоминающих устройствах, обычно на дисках, и при необходимости частями отображаются в реальную память.
Впервые виртуальная память была использована в операционной системе машины Atlas (1962 год). Установив новый стандарт производительности, Atlas Supervisor была способна исполнять до 16 задач одновременно.
Поскольку основной объем памяти, которую занимает процесс, большую часть времени остается свободным, то есть такое правило “девяносто к десяти”, или правило локализации, которое утверждает, что 90% обращений к памяти в процессе приходится на 10 % его адресного пространства. Поэтому в основной памяти можно хранить постоянно только те разделы адресного пространства, которые действительно используются в конкретный момент. При этом неиспользованные разделы адресного пространства можно ставить в соответствие менее быстрой памяти, например, пространству на жестком диске, а в это время другие процессы могут использовать основную память, занимаемую ранее этими разделами. Если же эти разделы понадобятся вновь, то они могут быть загружены с диска в основную память (может быть в другое адресное пространство).
Таким образом, виртуальная память - это совокупность программно-аппаратных средств, позволяющих пользователям писать программы, размер которых превосходит имеющуюся оперативную память. Для этого виртуальная память решает следующие задачи:
Размещает данные в запоминающих устройствах разного типа, например, часть программы в оперативной памяти, а часть на диске.
Перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы с диска в оперативную память.
Преобразует виртуальные адреса в физические.
Все эти действия выполняются автоматически, без участия программиста, то есть механизм виртуальной памяти является прозрачным по отношению к пользователю. Наиболее распространенными реализациями виртуальной памяти является страничное, сегментное и странично-сегментное распределение памяти, а также свопинг.
