Задачи управления памятью. Распределение памяти
Главная задача любой ВС – выполнять программы. Чтобы процессор мог выполнять программу, ее коды и данные, с которыми программа работает, должны (по крайней мере, частично) находиться в оперативной (главной, основной) памяти ЭВМ. В реальной ВС используется не одно запоминающее устройство, а целый ряд устройств, обладающих различными характеристиками.
В процессе функционирования ВС все эти устройства должны взаимодействовать между собой и ЦП. Взаимодействие осуществляется под управлением ОС. Кроме того, ОС необходимо решать задачи распределения памяти между пользовательскими процессами и компонентами ОС.
Для идентификации элементов программы (переменных, команд) используются адреса. Причем на различных этапах жизненного цикла программы эти адреса оказываются разными.На этапе трансляции программы неизвестно, в какое место ОЗУ будет загружена программа, поэтому транслятор присваивает переменным и машинным командам условные (виртуальные, логические) адреса.
Т. е. программа помещается в некоторое виртуальное адресное пространство. Начальным адресом программы при этом обычно назначается нулевой адрес.
Со времен ЭВМ фон - Неймана основная память в компьютере организована как линейное (одномерное) адресное пространство, состоящее из последовательности машинных слов (позднее − байтов).
Что касается виртуального адресного пространства, то способы его представления могут быть различными.
В одних ОС виртуальное адресное пространство подобно физической памяти и представляется в виде непрерывной линейной последовательности виртуальных адресов. Такую структуру адресов называют плоской (flat).
В большинстве современных ОС виртуальное адресное пространство структурировано. Т. е. оно делится на части, называемые сегментами, при этом виртуальный адрес представляется парой чисел (n, m), где n – номер сегмента, а m – смещение ячейки внутри сегмента.
Поскольку однозначного соответствия между виртуальной и физической памятью не существует, то важнейшей задачей ОС в сфере управления памятью является преобразование виртуальных адресов (структурированных) в физические (линейные).
Кроме того, ОС должна вести учет свободной и занятой памяти, выделять память запускаемым процессам, освобождать память после завершения процессов, обеспечивать защиту памяти процесса от вмешательства других процессов, производить дефрагментацию памяти.
Решение задач отображения виртуальных адресов на общую физическую память ВС может быть выполнено двумя способами.
Первый способ (статическое преобразование) предусматривает однократное преобразование виртуальных адресов в физические во время начальной загрузки программы в память. Такое преобразование осуществляет перемещающий загрузчик. Загрузчик функционирует на основании информации о начальном адресе физической памяти и информации об адресно-зависимых элементах программы.
Второй способ заключается в том, что программа загружается в память в неизменном виде (в виртуальных адресах). Далее при каждом обращении к памяти ОС преобразует виртуальные адреса программы в физические. Причем вид преобразования зависит от того, в какой участок ОП загружена программа.
Динамическое преобразование адресов позволяет перемещать программу в течение всего периода выполнения программы.
Существующие алгоритмы распределения памяти разделяют на два основных класса:
1. Алгоритмы, не использующие для решения задач распределения памяти HDD.
2. Алгоритмы, в которых используется перемещение отдельных сегментов процессов между ОП и HDD.
К алгоритмам первого класса относятся алгоритмы, предусматривающие распределение памяти фиксированными разделами, распределение памяти динамическими разделами и распределение памяти перемещаемыми разделами.
К алгоритмам второго класса относятся алгоритмы, предусматривающие размещение части кодов программ в оперативной памяти (активный процесс), а части кодов – на жестком диске (приостановленные процессы).
При функционировании ВС осуществляется выбор процессов для исполнения и перемещения их с HDDв ОП и обратно. Совокупность операций по загрузке процессов в ОП и выгрузке их на HDD получила название свопинга (swapping). Процедура свопинга предусматривает перемещение в ОП и на HDDпроцессов целиком, что приводит к избыточности этих операций. Для активизации процесса, как правило, не требуется загружать его в ОП целиком, достаточно загрузить его небольшую часть, подлежащую немедленному исполнению. Аналогично и при освобождении ОП можно не выгружать приостановленный процесс на HDD целиком, достаточно вытеснить на диск небольшую его часть.
Перемещение избыточной информации замедляет работу ОС. Кроме того, в этом случае возможна попытка загрузки для выполнения процесса, виртуальное адресное пространство которого превышает объем свободной ОП. Устранение указанных недостатков достигается при использовании страничного распределения памяти, сегментного распределения памяти и сегментно-страничного распределения памяти.
Вопросы для самопроверки по теме 4.1
1. Какие основные задачи решает ОС в процессе управления памятью?
2. Какие алгоритмы распределения памяти используются в ОС?
3. В чем заключается отличие метода распределения памяти с фиксированными разделами от метода распределения памяти динамическими разделами?
4. Чем отличается загрузка процессов при свопинге от загрузки процессов при страничной организации памяти?
5. Почему свопинг как основной механизм управления памятью практически не используется в современных ОС?