Функции подсистемы управления памятью

Одним из основных системных ресурсов ЭВМ любого типа является физическая память, и в частности – оперативная память. Этот ресурс является особым, так как управление им осуществляется обычно не изолированно, а согласованно с распределением процессорного времени. Объясняется это тем, что ОС должна обеспечить работу ЭВМ с требуемыми характеристиками по производительности, и в нужном режиме.

Вследствие этой связи между распределением ФП и распределением процессорного времени, можно выделить два уровня управления памятью:

1. Уровень долгосрочного планирования, или уровень управления процессами. В этом случае, память распределяется статически или динамически между несколькими процессами. Статическое распределение означает, что память выделяется процессам до начала их выполнения. Динамическое распределение соответствует случаю распределения памяти в ходе выполнения процессов.
При этом, для программ и данных каждого процесса, и в том, и в другом случае, может выделяться либо один непрерывный участок памяти, либо несколько несмежных участков.
Обычно, непрерывный участок называется разделом памяти. В Windows – регион;

2. Уровень краткосрочного планирования, или уровень управления потоками. Память здесь также распределяется статически или динамически внутри выделенного на предыдущем уровне планирования участка между потоками, относящимися к одному и тому же процессу.

В произвольный момент времени работы системы, вся доступная для использования область ФП представляет собой чередующуюся последовательность из занятых, то есть уже распределенных, и свободных, то есть еще не распределенных участков памяти. Свободные участки называются фрагментами памяти.

Задача управления памятью, решаемая на обоих уровнях, распадается на три подзадачи:

1. Учет памяти;

2. Распределение (выделение) памяти;

3. Возврат (освобождение) памяти.

Реализация этих подзадач составляет основные функции подсистемы управления памятью.

Учету памяти по определенным правилам подлежат либо только фрагменты, либо фрагменты и занятые участки. Как правило, эта задача решается системными программами с использованием специально формируемых служебных структур данных, в которых хранится информация о состоянии фрагментов и занятых участков.

Решение задачи выделения памяти происходит каждый раз, когда со стороны процесса (пользовательского или системного) формируется запрос к подсистеме управления памятью на выделение участка памяти необходимого размера. Этот участок выделяется по определенному алгоритму из резерва свободной памяти, которая, в общем случае, представляется множеством несмежных фрагментов. Задача выделения решается на основе результатов решения задачи учета.

Задача возврата решается в том случае, когда потребность в памяти со стороны процесса или потока исчезает. С помощью системных программ выполняется запрос на освобождение памяти, в результате чего весь ранее выделенный участок или его часть присоединяется к множеству свободных участков.

Помимо названных трех основных функций подсистемы управления памятью, она выполняет ряд дополнительных функций:

1. Перемещение программ и данных процессов из ОП в ВП в том случае, когда размеры свободной области ОП недостаточны для размещения в ней программ и данных выполняющихся процессов, и возвращение этой информации в ОП, когда в ней появляется необходимое свободное место.

2. В ходе работы ОС часто возникает необходимость создания различных служебных (системных) информационных структур данных, например, таблиц распределения ресурсов, описателей процессов и потоков, буферных областей, объектов ядра и ряда других. Все эти структуры требуют для своего размещения соответствующую память. В некоторых ОС эта память резервируется заранее во время установки ОС. В других используется динамический способ выделения памяти для таких структур. В подобных случаях различные подсистемы ОС обращаются к подсистеме управления памятью с запросами на выделение соответствующих участков памяти.

3. Защита памяти. С помощью системных модулей и при использовании аппаратных средств процессоров создаются условия, не позволяющие выполняемому процессу записывать или считывать любые данные в память или из области памяти, выделенной другому процессу.