Управление памятью


Управление памятью — это форма управления ресурсами, применяемая к памяти компьютера . Существенным требованием к управлению памятью является предоставление способов динамического выделения частей памяти программам по их запросу и освобождения ее для повторного использования, когда она больше не нужна. Это критически важно для любой продвинутой компьютерной системы, где в любой момент времени может выполняться более одного процесса . [1]

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

В некоторых операционных системах , например OS/360 и последующих версиях , [2] памятью управляет операционная система. [примечание 1] В других операционных системах, например Unix-подобных операционных системах, управление памятью осуществляется на уровне приложений.

Управление памятью в адресном пространстве обычно классифицируется либо как ручное управление памятью, либо как автоматическое управление памятью .

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

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


Пример внешней фрагментации