Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700363.doc
Скачиваний:
16
Добавлен:
01.05.2022
Размер:
3.69 Mб
Скачать

Стратегии размещения данных

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

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

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

В зависимости от правила, определяющего пригодность свободной области для размещения новых данных, различают три стратегии распределения памяти:

  • стратегия первого подходящего – для размещения новых данных выбирается первый же встреченный свободный участок достаточного размера;

  • стратегия наиболее подходящего – для размещения новых данных выбирается самый маленький свободный участок, способный вместить эти данные;

  • стратегия наименее подходящего – для размещения новых данных выбирается самый большой свободный участок.

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

Выделение памяти по стратегии первого подходящего

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

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

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

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

Стратегия следующего подходящего исключает скопление коротких свободных блоков в какой-либо части списка, но имеет другой недостаток.

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

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

Тем не менее, стратегия следующего подходящего в большинстве практических случаев работает вполне приемлемо, и часто применяется на практике.