Статическое и динамическое распределение памяти



Управление оперативной памятью тесно связано с управлением другими ресурсами, в частности, временем центрального процессора. Эта связь определяет различия между двумя уровнями распределения памяти: на уровне долгосрочного планирования память распределяется статически, а на уровне краткосрочного планирования - динамически.

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

В ВС статически обычно выделяется память для размещения резидентных программ (например, компонентов ядра ОС), системных таблиц.

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

Некоторые системы программирования поддерживают возможность только статического распределения памяти (FORTRAN).

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

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

Динамически память может выделяться автоматически и по запросам, выдаваемым программой. Автоматически выделяется память для размещения локальных данных процедур при их вызовах, для сохранения служебной информации и передачи параметров. Кроме того, в программе могут использоваться специальные операторы запроса на выделение памяти на уровне обращений к операционной системе или операторов языка программирования. При использовании динамического распределения памяти может возникнуть проблема появления “мусора” и висячих ссылок.

Динамическое распределение памяти дает многочисленные преимущества разработчикам программ. Например, одно из главных достоинств функциональных языков, объектно-ориентированных языков заключается в том, что они освобождают программиста от необходимости планировать размещение программы и данных в памяти компьютера. Типы данных описываются на абстрактном уровне, а размещение их в памяти машины происходит автоматически. Но такие системы программирования (Лисп (LISP), SmallTalk, Java) должны иметь должны иметь в своем составе средства управления памятью (в частности, сборщики мусора).

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

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


Дата добавления: 2016-01-05; просмотров: 19; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!