
- •3 Управление памятью
- •3.1 Функции ос по управлению памятью
- •3.2 Общие замечания
- •3.3 Алгоритмы распределения памяти
- •3.2.1 Распределение памяти фиксированными разделами
- •3.3.2 Распределение памяти динамическими разделами
- •3.3.3 Перемещаемые разделы
- •3.3.4 Страничное распределение
- •3.3.5 Сегментное распределение памяти
- •3.3.6 Сегментно-страничное распределение
- •3.3.7 Разделяемые сегменты памяти
3 Управление памятью
3.1 Функции ос по управлению памятью
- отслеживание свободной и занятой памяти;
- выделение памяти процессам и освобождение памяти по завершении процессов;
- организация виртуальной памяти;
- настройка адресов программы на конкретную область физической памяти;
- динамическое распределение памяти;
- дефрагментация памяти;
- защита памяти.
3.2 Общие замечания
На разных этапах жизненного цикла программы используются различные типы адресов:
- символьные имена присваивает пользователь при написании на алгоритмическом языке или ассемблере;
- виртуальные адреса вырабатывает транслятор, переводящий программу на машинный язык. Поскольку во время трансляции в общем случае неизвестно, в какое место оперативной памяти будет загружена программа, то транслятор присваивает переменным и командам виртуальные адреса, считая, что начальным адресом будет нулевой адрес;
- физические адреса соответствуют номерам ячеек оперативной памяти, где в действительности расположены или будут расположены переменные и команды.
Совокупность виртуальных адресов называется виртуальным адресным пространством. Различают максимально возможное виртуальное адресное пространство (определяется архитектурой компьютера) и назначенное (выделенное) процессу виртуальное адресное пространство (фактически нужные процессу адреса, первоначально назначается транслятором, размер его может быть изменен во время выполнения). Обычно виртуальное адресное пространство процесса делится на две непрерывные части: системную и пользовательскую (по умолчанию в Windows2000 эти части имеют одинаковый размер – по 2 Гбайт; пользовательская часть адресного пространства процесса располагается в диапазоне адресов 00000000-7FFFFFFF, системная – 80000000-FFFFFFFF).
Системная часть виртуальной памяти в ОС любого типа включает область, подвергаемую страничному вытеснению, и область, на которую страничное вытеснение не распространяется. В невытесняемой области размещаются модули, требующие быстрой реакции и /или постоянного присутствия в памяти, например диспетчер потоков. Остальные модули ОС подвергаются страничному вытеснению, как и пользовательские процессы.
В разных ОС используются разные способы структуризации виртуального адресного пространства. В одних ОС виртуальное адресное пространство процесса представлено в виде непрерывной линейной последовательности виртуальных адресов. Такую структуру делится на адресного пространства называют плоской. При этом виртуальным адресом является одно число, представляющее собой смещение от начала виртуального адресного пространства. Это линейный виртуальный адрес. В других ОС виртуальное адресное пространство части, называемые сегментами. В этом случае помимо линейного адреса может быть использован виртуальный адрес, представляющий собой пару чисел (m,n), гдеnопределяет сегмент, аm– смещение внутри сегмента. Существуют и более сложные способы организации виртуального адресного пространства.
Задачей ОС является отображение индивидуальных адресных пространств всех одновременно выполняющихся процессов на общую физическую память.
В настоящее время типична ситуация, когда объем виртуального адресного пространства превышает доступный объем оперативной памяти (максимальный размер физической памяти, которую можно установить в компьютере определенной модели ограничивается разрядностью адресной шины).
Существует два подхода к преобразованию виртуальных адресов в физические:
Пересчет виртуальных адресов в физические выполняется один раз для каждого процесса во время начальной загрузки программы в память. Эту операцию выполняет специальная системная программа – перемещающий загрузчик.
Программа загружается в память с неизмененными виртуальными адресами. Во время выполнения программы при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Это так называемое динамическое преобразование адресов.
Виртуализация оперативной памяти осуществляется совместно ОС и аппаратными средствами процессора и включает решение следующих задач:
- размещение данных в запоминающих устройствах разного типа, например часть кодов программы – в оперативной памяти, а часть – на диске;
- выбор образов процессов или их частей для перемещения из оперативной памяти на диск и обратно;
- перемещение по мере необходимости данных между памятью и диском;
- преобразование виртуальных адресов в физические.
Виртуализация памяти может быть осуществлена на основе двух различных подходов:
- свопинг – образы процессов выгружаются на диск и возвращаются в оперативную память целиком;
- виртуальная память – между оперативной памятью и диском перемещаются части (сегменты, страницы и т.п.) образов процессов.
В современных ОС свопинг как основной механизм управления памятью почти не используется.
Для временного хранения сегментов и страниц на диске отводится специальная область, которую называют страничный файл (страничный файл для временного хранения сегментов и страниц на диске в ОС Windows2000 называетсяPagefile.sys). Текущий размер страничного файла оказывает влияние на возможности ОС: чем больше страничный файл, тем больше приложений может одновременно выполняться, но это замедляет работу системы, так как значительная часть времени тратится на перекачку кодов и данных из оперативной памяти на диск и обратно. Размер страничного файла в современных ОС является настраиваемым параметром, который выбирается администратором системы для достижения компромисса между уровнем мультипрограммирования и быстродействием системы.