76
Здесь, в большинстве случаев, задачи распределения памяти ставятся как ограничения на скорость выполнения отдельных процессов или эффективность использования ОЗУ ЭВМ по управлению самим процессом распределения памяти ЭВМ.
В любом из указанных случаев, ОЗУ расходуется не идеально, а эффективность используемых идей сильно зависит как от величины соотношения объем ОЗУ/ размер процессов, так и от аппаратной реализации поддержки указанных подходов.
Основными причинами неэффективности использования ОЗУ являются:
•сильная фрагментация памяти как во время загрузки, так и во время завершения процессов;
•затраты, связанные с устранением последствий такой фрагментации.
Чтобы показать это наглядно, рассмотрим рисунок 2.6, на котором, слева на право, показано развитие фрагментации, на примере работы некоторой абстрактной ЭВМ.
Рисунок 2.6 - Варианты способов использования памяти
Замечание
Фрагментация вызывается не только из-за различных размеров запускаемых процессов, но и, по-причине, дополнительных требований ряда процессов к динамическому выделению дополнительной памяти ОЗУ.
77
Как показывает практика, во многих случаях, устранение фрагментации за счет «сжатия» ОЗУ не дает должного эффекта, по-причине больших накладных расходов на переписывание в ОЗУ отдельных сегментов выполняемых процессов.
В целом, можно выделить ряд общих задач, по распределению памяти ЭВМ, которые должны решаться каждой ОС:
•отслеживание (учет) свободной и занятой памяти;
•первоначальное и динамическое выделение памяти процессам приложений и самой операционной системе, а также освобождение памяти по завершении процессов;
•настройка адресов программы на конкретную область физической памяти;
•полное или частичное вытеснение кодов и данных процессов из ОЗУ на диск, когда размеры ОЗУ недостаточны для размещения всех процессов, а также возвращение этих процессов в ОЗУ;
•защита памяти, выделенной процессу, от возможных вмешательств со стороны других процессов;
•дефрагментация памяти.
Решение всех указанных задач возложено на «Подсистему распределения памяти», которая, в свою очередь, входит в «Подсистему управления процессами» ядра ОС.
Нормальная работа компьютера обеспечивается двумя способами адресации памяти ЭВМ: программным и аппаратным.
Программный способ адресации неявно присутствует в любом исходном тексте программы в виде операторов команд программы, которые обращаются к объявленным переменным данных и осуществляют различные управляющие действия по определению порядка выполнения самих команд. В последствии, компилятор обеспечит явное присутствие как адресов команд, так и адресов данных.
Соответственно, в каждом отдельном процессе, минимально можно выделить:
•управляющий блок процесса;
•сегмент кода (программы);
•сегмент данных;
•стек;
•«куча», если процесс использует динамическое выделение памяти.
Аппаратный способ адресации заложен сам процессор:
•специализацией регистров процессора: сегментные, смещения и индексные;
•методами адресации команд процессора;
•шинами (каналами) процессора.
Простейшую схему адресации, реализуемую процессором совместно с ОС, связывающую аппаратный и программный способы, можно показать рисунком 2.7.
78
Рисунок 2.7 - Взаимодействие программного и аппаратного способов адресации процесса
Реализация такой схемы имеет недостатки, поскольку:
•каждым, из выделенных блоков, необходимо управлять;
•каждый, из выделенных блоков, использует относительную адресацию, которая требует использования сумматоров для каждой команды и данных процесса;
•каждая команда или обращение данных требуют проверки на возможность
нарушения границ, выделенных областей.
Таким образом, эффективность использования процессора значительно снижается, по-причине использования сложной системы адресации памяти.
Чтобы устранить эти недостатки, как показанно на рисунке 2.8, во всех развитых архитектурах ЭВМ используются аппаратные средства виртуализации памя-ти
(MMU). Это освобождает процессор от указанной выше рутинной работы.
MMU — Memory Managment Unit — диспетчер памяти уже был рассмотрен ранее, при анализе прямого доступа к памяти внешних устройств.
Вего обязанности входит:
•виртуализация адреса, при взаимодействии процессора с ОЗУ;
•аппаратное обеспечение алгоритмов распределения блоков ОЗУ в различных режмах адресации.
79
Рисунок 1.8 - Виртуализация памяти с помощью MMU
Исторически, для управления памятью ОЗУ ЭВМ, в ОС стала разрабатываться
сегментная адресация.
Сегментная адресация ОЗУ реализуется с помощью специальных регистров процессора, которые так и называются: регистры сегментов и регистры смещения. Сегментный способ адресации ОЗУ всегда использует таблицу сегментов, которая сама размещается в ОЗУ и предназначена для решения двух основных задач:
•виртуализация относительных адресов программы относительно физической памяти ЭВМ;
•управление свопингом и перемещение сегментов в физическом пространстве ОЗУ.
Задачи виртуализации памяти могут решаться как с привлечением, так и без привлечения специальных аппаратных средств (MMU).
Управление свопингом — управление перемещением сегментов программ из ОЗУ в специальные файлы или разделы свопинга, расположенные на внешних ЗУ, и обратно.
Для этой цели, таблица сегментов должна содержит управляющую информа-цию, которая указывает не только на наличие или отсутствие сегментв в ОЗУ, но и используется для целей защиты или разделения памяти между процессами.
Общая схема сегментного способа адресации памяти показана на рисунке 2.9.
80
Рисунок 2.9 - Сергментная организация памяти
Замечание
Основная проблема сегментгой адресации ОЗУ заключается в ее фрагментации, которая вызвана разным размером загружаемых и выгружаемых сегментов:
•при равных размерах сегментов, фрагментация была бы минимальна или ее удалось бы устранить;
•чем меньше разделы сегментов, тем меньше становятся непроизводительные потери ОЗУ.
Идея использования блоков одинакового размера, для адресации физической и логической частей ОЗУ, стала называться страничной организацией памяти.
Основное достоинство страничной адресации ОЗУ - отсутствие фрагментации, что не требует затрат ресурса ЭВМ на ее устранение.
Как показано на рисунке 2.10, схема адресации ОЗУ с помощью страниц очень похожа на схему адресации ОЗУ с помощью сегментов, поскольку в обоих случаях используются таблицы переадресации, которые должны размещаться в той же ОЗУ.
Замечание
В связи с малым размером страницы, обычно 4 Кбайт, увеличивается скорость пэйджинга: перемещения страницы на внешний носитель ЗУ и обратно. Пэйджинг (pagging) - свопинг (swapping) страниц.
По традиции, файлы или разделы винчестера, куда осуществляется pagging, называются файлами или разделами свопинга.
Очевидно, что аппратные средства виртуализации (MMU) способны обеспечивать как pagging, так и swapping.