Схема с фиксированными разделами
ТЕМА 2.5: УПРАВЛЕНИЕ РЕАЛЬНОЙ ПАМЯТЬЮ
Функции системы управления памятью.
Чтобы обеспечить эффективный контроль использования памяти, ОС должна выполнять следующие функции:
- отображение адресного пространства процесса на конкретные области физической памяти;
- распределение памяти между конкурирующими процессами;
- контроль доступа к адресным пространствам процессов;
- выгрузка процессов (целиком или частично) во внешнюю память, когда в оперативной памяти недостаточно места;
- учет свободной и занятой памяти.
Первые ОС применяли очень простые методы управления памятью. Вначале каждый процесс пользователя должен был полностью поместиться в основной памяти, занимать непрерывную область памяти, а система принимала к обслуживанию дополнительные пользовательские процессы до тех пор, пока все они одновременно помещались в основной памяти. Затем появился "простой свопинг" (система по-прежнему размещает каждый процесс в основной памяти целиком, но иногда на основании некоторого критерия целиком сбрасывает образ некоторого процесса из основной памяти во внешнюю и заменяет его в основной памяти образом другого процесса).
Базовые механизмы управления памятью.
Системы управления памятью можно разделить на два класса: те, в которых процессы при выполнении перемещаются между оперативной памятью и диском, и те, в которых этого не происходит. Второй вариант проще
Однозадачная система без подкачки и замещения страниц.
В самой простой однозадачной системе управления памятью из всех возможных в каждый конкретный момент времени работает только одна программа, при этом память разделяется между программами и операционной системой. Есть три варианта такой схемы. Как показано на рис. 22 а, операционная система может находиться в нижней части памяти – в оперативной памяти (RAM), или в ОЗУ (оперативное запоминающее устройство).
Рис. 22. Три простейшие модели организации памяти при наличии операционной системы и одного пользовательского процесса.
Кроме того, операционная система может располагаться в самой верхней части памяти (рис. 22 б) – в постоянной памяти (ROM), или в ПЗУ (постоянное запоминающее устройство). В третьей модели драйверы устройств могут размещаться в ПЗУ, а остальная часть системы – ниже в ОЗУ (рис. 22 в). Первая модель раньше применялась на мэйнфреймах и мини-компьютерах, но в настоящее время практически не употребляется. Вторая модель сейчас используется в некоторых встраиваемых системах, а третья модель была характерна для ранних персональных компьютеров (например, работающих под управлением MS-DOS), при этом часть системы, которая располагалась в ПЗУ, носила название BIOS (Basic Input Output System – базовая система ввода-вывода).
Когда система организована таким образом, в каждый конкретный момент времени может работать только один процесс. Как только пользователь набирает команду, операционная система копирует запрашиваемую программу с диска в память и выполняет ее, а после окончания процесса выводит на экран приглашение и ждет новой команды. Получив инструкции, она загружает другую программу в память, записывая ее поверх предыдущей. Защита адресного пространства ОС от пользовательской программы может быть организована при помощи одного граничного регистра, содержащего адрес границы ОС.
Схема с фиксированными разделами.
Большинство современных систем поддерживает одновременную работу нескольких процессов. Это означает, что когда один процесс приостановлен в ожидании завершения операции ввода-вывода, другой вправе использовать центральный процессор. Таким образом, многозадачность увеличивает загрузку процессора.
Самым простым способом управления оперативной памятью является ее предварительное (обычно на этапе генерации или в момент загрузки системы) разбиение на несколько разделов фиксированной величины (возможно не равных). Поступающие процессы помещаются в тот или иной раздел. При этом происходит условное разбиение физического адресного пространства. Связывание логических и физических адресов процесса происходит на этапе его загрузки в конкретный раздел.
Каждый раздел может иметь свою очередь процессов, а может существовать и глобальная очередь для всех разделов (см. рис. 23).
Эта схема была реализована в IBM OS/360 (MFT), DEC RSX-11 и ряде других систем.
Подсистема управления памятью оценивает размер поступившего процесса, выбирает подходящий для него раздел, осуществляет загрузку процесса в этот раздел и настройку адресов.
Рис. 23. Схема с фиксированными разделами: (a) – с общей очередью процессов, (b) – с отдельными очередями процессов.
Очевидный недостаток этой схемы – число одновременно выполняемых процессов ограничено числом разделов.
Другим существенным недостатком является то, что предлагаемая схема сильно страдает от внутренней фрагментации – потери части памяти, выделенной процессу, но не используемой им. Фрагментация возникает потому, что процесс не полностью занимает выделенный ему раздел или потому, что некоторые разделы слишком малы для выполняемых пользовательских программ.
Оверлейная структура.
Так как размер логического адресного пространства процесса может быть больше, чем размер выделенного ему раздела (или больше, чем размер самого большого раздела), иногда используется техника, называемая оверлей (overlay) или организация структуры с перекрытием. Основная идея – держать в памяти только те инструкции программы, которые нужны в данный момент.
Потребность в таком способе загрузки появляется, если логическое адресное пространство системы мало, например 1 Мбайт (MS-DOS) или даже всего 64 Кбайта (PDP-11), а программа относительно велика. На современных 32-разрядных системах, где виртуальное адресное пространство измеряется гигабайтами, проблемы с нехваткой памяти решаются другими способами.
Рис. 24. Организация структуры с перекрытием. Можно поочередно загружать в память ветви A-B, A-C-D и A-C-E программы.
Коды ветвей оверлейной структуры программы находятся на диске как абсолютные образы памяти и считываются драйвером оверлеев при необходимости. Для описания оверлейной структуры обычно используется специальный несложный язык (overlay description language). Совокупность файлов исполняемой программы дополняется файлом (обычно с расширением .odl), описывающим дерево вызовов внутри программы. Для примера, приведенного на рис. 20, текст этого файла может выглядеть так:
A-(B,C)
C-(D,E)
Синтаксис подобного файла может распознаваться загрузчиком. Привязка к физической памяти происходит в момент очередной загрузки одной из ветвей программы.
Оверлеи могут быть полностью реализованы на пользовательском уровне в системах с простой файловой структурой. ОС при этом лишь делает несколько больше операций ввода-вывода.
Возможность организации структур с перекрытиями во многом обусловлена свойством локальности, которое позволяет хранить в памяти только ту информацию, которая необходима в конкретный момент вычислений.