Распределение памяти динамическими и перемещаемыми разделами

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

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

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

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

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

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

a. выделяется первый попавшийся свободный участок достаточного размера;

b. выбор раздела, имеющего наименьший достаточный для нового процесса размер;

c. выбор раздела, имеющего наибольший достаточный для данного процесса размер;

3. Загрузка программ и данных процесса в выделенный участок, преобразование ВАП в ФАП, корректировка содержимого таблиц занятых и свободных областей памяти.
Данный способ предполагает, что программа процесса не перемещаются во время выполнения, поэтому отображение ВАП на ФАП может быть выполнено единовременно во время загрузки процесса в память;

4. Выполнение корректировки системных таблиц свободных и занятых участков после завершения каждого процесса.

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

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

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

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

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