Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ос_ЛЕКЦИИ_для _методички_.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
821.76 Кб
Скачать

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

Алгоритмы распределения памяти.

1. Без привлечения внешней памяти.

- фиксированными разделами

- динамическими разделами

- перемещаемыми разделами

2. С привлечением внешней памяти (используется перемещения содержимого памяти между ОП и внешней памятью).

- страничные

- сегментные

- сегментно-страничные

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

В этом случае, память, как правило, разбивается на две области. В одной находится резидентная и нерезидентная часть ОС, в другой – пользовательский процесс.

Возможны следующие варианты:

1. Код ОС находится в нижней (ближе к нулю) части ОП – как правило, применяется в ОС в уже умерших мейнфреймах.

2. Код ОС находится в верхней части ОП – применяется, например, в карманных компьютерах и встроенных системах.

В каждый момент времени работает один процесс. Исполнительный файл загружается и выполняется. По окончанию выполнения очередной команды выполняется следующая. Загрузка нового процесса в ОП осуществляется поверх предыдущего.

Например: распределение оперативной памяти в MS DOS: ОС управляет ОП с помощью блоков MCB (memory control block). Память разбивается на блоки. Каждому блоку ОП в реальной ОП предшествует MCB, в котором записаны характеристики блока, следующего за ним. Для каждой вновь запускаемой задачи создается различное количество блоков MCB. Все блоки MCB выстраиваются в цепочку(в каждом есть адресная ссылка на следующий MCB). Адрес первого блока хранится в векторной таблице связей CVT. Прикладной процесс в ходе выполнения может заказать себе дополнительную память, использую функцию INT21H. Карта распределения реальной памяти в MS DOS следующая:

- 0000 – 0500.

Векторы прерываний(адреса обработчиков прерываний).

Область данных BIOS (внутренние переменные).

Таблицы DOS(область данных DOS).

Переменная область (включает резидентную часть DOS – command.com, TCR-программы – нерезидентные).

Выполняющийся в настоящее время .com или .exe. процесс.

Транзитная область ОС – этот интервал памяти разбивается на блоки. Каждый блок описывается MCB. Внутри MCB находится длина блока и тип блока. Возможны 4 типа блоков памяти sys – системный, free – свободный, proc – занятый под процесс, env – environment – блок среды. Для каждого запущенного процесса создается блок среды и программный блок. Программный блок начинается с префикса PSP, после которого находится исполняемый код.

- A000 –0000

Память адаптера.

Внешнее ПЗУ.

ПЗУ интерпретатора Basic.

ПЗУ BIOS.

Распределение и управление ОП в многозадачных ОС без подкачки на диск.

Многозадачность вносит проблемы – настройка адресов для перемещения программ в различные адреса ОП и защита памяти процессов друг от друга. Когда программа компилируется и компануется, компоновщик не может знать по каким адресам будет загружен модуль, поэтому загружаемый модуль должен быть загружен по месту нахождения в ОП. Эта проблема известна, как перемещение программ в памяти или настройка адресов. Одним из решений является модификация адресной части команды при каждой загрузке в ОП. Для этого необходимо знать где в исполнительном модуле находятся ссылки на адреса и при загрузке в ОП в то или иное место их модифицировать в зависимости от адреса загрузки. В этом случае, исполнительный модуль разбивается компановщиком на участки, в которых указываются ссылки на адреса операндов и данных в модуле (так называемая, абсолютная адресация). Недостаток – большие системные издержки. Для исключения обращения по адресам, не принадлежавшим исполняемому в настоящий момент модулю, использовалась так называемая память ключей защиты, которая хранила ключи памяти данного блока. Другой блок имел другие ключи защиты. При загрузке модуля в ОП, ОС устанавливала одинаковые ключи PSW процесса и памяти ключей защиты для данного модуля. При обращении к ОП они сравнивались. Если они были различны, считалось, что обращение осуществлялось в ОП, выделенную для другого модуля. Другим решением является использование базового регистра и предельного регистра. При загрузке модуля в ОП, в базовый регистр загружается адрес начала раздела, выделенного модулю, а в предельный – длина раздела. Точным указателем адреса операндов и данных в модуле является смещение относительно начала. При выполнении модуля, адрес операнда и данных (база + смещение) сравнивается в адресом в предельном регистре с целью проверки выхода за границы раздела. Базовый регистр объявляется при компиляции (Assemblировании – директивой). Установка базового и предельного регистра осуществляется компонентой управления памятью ОС при загрузке в ОП.

Распределение памяти фиксированными разделами.

Память разбивается на несколько областей фиксированной длины, называемых разделами. Разбиение осуществляется вручную с помощью системной утилиты. Для доступа к ОП(тому или иному разделу), процессы становятся в очередь. Подсистема управления памятью выполняет следующие задачи:

- Сравнивает объем памяти, требуемый для вновь поступившего процесса с размером свободных разделов и выбирает подходящий раздел

- Осуществляет загрузку исполнительного кода процесса в один из разделов и настройку адресов(абсолютная адресация).

Достоинства: простота реализации.

Недостатки:

- В каждом разделе может выполняться только один процесс. Уровень мультипрограммирования(многозадачности) ограничен количеством разделов.

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

Распределение памяти динамическими разделами.

Реальная память не делится на разделы. Каждому процессу реальная память выделяется динамически, в зависимости от потребности. После завершения процесса, память освобождается и в нее может быть загружен другой процесс или его часть. Функции ОС по управлению и распределению реальной ОП:

- Ведение таблиц свободных и занятых областей реальной ОП, в которых указываются начальные адреса и размеры участков.

- При создании процесса – анализ потребной памяти, просмотр таблиц свободных областей, выделение памяти процессу.

- Загрузка исполнительного кода в отведенный раздел и корректировка таблиц свободных и занятых областей.

- После завершения процесса – освобождение, корректировка таблиц свободных и занятых областей.

Недостатки:

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

Устранение фрагментации – перемещение всех занятых участков в сторону старших или младших адресов ОП с тем, чтобы свободная память образовала единую свободную область (дефрагментация). Для этого могут потребоваться большие системные ресурсы.

Распределение ОП в ОС такого типа рассмотрим на примере OS MVT. ОС ведет два уровня учета основной памяти: учет динамической области, в которую загружаются процессы и учет памяти внутри процесса (так как процесс может порождать в своем разделе другие процессы). Размер зоны памяти для процесса определяется на этапе планирования. Учет памяти внутри зоны строится на основе запросов на создание и завершение новых потоков внутри процесса. Запросы на предоставление ОП процессу или потоку могут быть явные или неявные. Явные могут задаваться при помощи системных макрокоманд Assemblerа (GetMain, FreeMain) как из ядра, так и из пользовательского процесса. Запрос на освобождение по команде FreeMain. В случае пользовательской программы, по запросу может быть выделена ОП как из динамической области, так и из области, в которой находится процесс. Неявные запросы – запросы, которые в явном виде не включают эти макрокоманды. Очередь пустых зон(свободных, незанятых) описывается элементом DPQE (descriptor point of queue element). Ссылка на элемент DPQE имеется в главной таблице ОС CVT. DPQE описывает элементы свободных блоков в динамической памяти FBQE (free block queue element). Вся динамическая область делится на блоки одинакового размера. Каждый элемент FBQE содержит длину свободного блока, который он описывает, и адрес следующего блока. FBQE выстраиваются в цепочку. FBQE имеет длину 2,4,6 байт в зависимости от размера реальной ОП.

динамическая область

ЯДРО

FBQE

FBQE

FBQE

CVT

DPQE

Для учета свободного пространства внутри зоны, выделенной процессу, создается описатель, который называется PQE. Ссылка на первый PQE имеется в дескрипторе процесса, который в данной ОС называется TCB (task control block). Ссылка на TCB процесс имеется в CVT. Элемент PQE содержит адрес начала свободного участка и его длину. PQE также выстраиваются в цепочку. Свободное место в ОП, выделенной процессу появляется из-за того, что оперативная память выделяется блоками, кратными 2k, 200k... Выделение памяти внутри памяти, выделенной под процесс осуществляется с помощью аппарата подпулов, то есть, если процесс хочет породить какой-то поток в своей зоне, он может запросить под этот поток выделить место.

CVT

TCB

PQE

PQE

PQE

SPQE

Подпул – логическая единица ОП, состоящая из множества кусочков ОП, объединенных одним номером и управлением. Блоки в подпуле не являются смежными. В данной ОС допускается нумеровать до 128 подпулов. Управление подпулами осуществляется элементами SPQE. Элементы SPQE различных подпулов одного процесса объединяются в список, ссылка на который есть в TCB процесса.

Распределение и управление ОП в многозадачных ОС с подкачкой на диск.

Оперативная память может не обеспечить места для хранения всех процессов в ОП (ожидающие – приостановленные, находящиеся в очередях). В этом случае, ОП должна быть освобождена для загрузки процессов, которые готовы для предоставления времени ЦП. Существует два основных подхода для управления ОП в этом случае:

1. Свопинг (swapping), или обычная подкачка. В этом случае, процесс полностью переносится в обычную память, а затем, по мере необходимости, в оперативную. Когда в результате подкачки процессов с диска в ОП может появиться множество неиспользуемых фрагментов, как и в случае многозадачных ОС без подкачки на диск, выполняется операция дефрагментации с переназначением базовых и предельных регистров. Недостатки: не всегда требуется перемещать процесс полностью, а только его неактивную часть, свопинг этого не учитывает.

2. Overlay в этом случае, программист сам делит программу на части, которые могут храниться в ОП или внешней памяти. Подкачка модулей при их выполнении осуществляется по частям, предусмотренным программистом.

Управление ОП осуществляется, как правило, следующими способами:

1. Управление памятью с помощью битовых массивов. В этом случае, память разделяется на блоки. Совокупности блоков соответствует карта ОП. Каждый занятый блок в карте помечается единицей, свободный – нулем. При выделении памяти, ОС ищет серию следующих друг за другом нулей в карте, чтобы сумма величин была достаточна для загрузки модуля (части модуля). Если подходящей последовательности нет, осуществляется перемещение процессов. Недостаток: большие системные издержки.

2. Управление с помощью связных списков. В этом случае осуществляется ведение двух списков: свободных и занятых областей.