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