Алгоритмы распределения без использования внешней памяти
Распределение памяти динамическими разделами
В случае распределения памяти машины динамическими разделами
каждому вновь поступающему на выполнение приложению на этапе создания процесса выделяется вся необходимая ему память (изначально вся память, отводимая приложениям, свободна). Если достаточный объем памяти отсутствует, то приложение не принимается на выполнение и процесс для него не создается. После завершения процесса память освобождается, и на это место может быть загружен другой процесс. Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера.
При этом операционной системе, использующей этот метод управления памятью, приходится решать перечисленные ниже задачи.
Ведение таблиц свободных и занятых областей. В этих областях указываются начальные адреса и размеры участков памяти.
Анализ требований к памяти. При создании нового процесса просматриваются таблицы свободных областей и выбирается раздел, размер которого достаточен для размещения кодов и данных нового процесса. Выбор раздела может осуществляться по разным правилам, например: «первый попавшийся раздел достаточного размера», «раздел, имеющий наименьший достаточный размер» или «раздел, имеющий наибольший достаточный размер».
Загрузка программы в выделенный ей раздел и корректировка таблиц свободных и занятых областей. Данный способ предполагает, что программный код не перемещается во время выполнения, а значит, настройка адресов может быть проведена единовременно во время загрузки.
Корректировка таблиц свободных и занятых областей. Эта операция проводится после завершения процесса.
Однако этому методу распределения присущ серьезный недостаток, связанный с фрагментацией памяти. Фрагментация - это наличие большого числа несмежных участков свободной памяти малого размера (фрагментов), настолько малого, что ни одна из вновь поступающих программ не может уместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти. Этот метод управления памятью лежит в основе подсистем управления памятью первых ОС 60–70-х годов.