Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая ос.rtf
Скачиваний:
50
Добавлен:
09.05.2015
Размер:
2.98 Mб
Скачать

4.2 Сегментный способ распределения виртуальной памяти

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

- о месте расположения сегмента (в оперативной памяти или на жестком диске);

- права доступа;

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

Преимуществом является то, что это был первый способ распределения с использованием файла подкачки, так же можно было устанавливать права доступа к сегментам.

Недостатки: потеря процессорного времени на загрузку сегментов и на обработку информационных структур, информационные структуры требовали для себя памяти, дефрагментация памяти.

4.3 Сегментно-страничный способ распределения виртуальной памяти

В данном способе программа разбивается на логически-законченные части, а сегменты на страницы и адрес страницы состоит из номера сегмента, при этом сегмент при загрузке в оперативную память размещается целиком, но страницы одного сегмента могут занимать несмежные страницы.

Преимущества: сокращается время для загрузки страниц, но требуются вычислительные ресурсы для хранения информационных структур – способ используется в дорогих ос.

5. Подсистема управления памятью в ос ms-dos

MS-DOS – это ОС, работающая в реальном режиме процессора i86, что предполагает использование адресного пространства размером всего лишь 1 Мб. На самом деле, в компьютерах IBM гарантируется наличие лишь 640 Кб основной памяти, старшие же адреса памяти заняты под BIOS и видеопамять, хотя среди них попадаются разрозненные куски оперативной памяти, называемые UMB (верхний блок памяти).

Адрес в реальном режиме записывается в формате [сегмент : смещение], однако здесь сегмент – это не селектор, адресующий строку таблицы сегментов, а просто номер параграфа памяти (1 параграф = 16 байт). Поэтому можно считать, что в MS-DOS используются только физические адреса.

В принципе, программы, работающие в MS-DOS, могут получить доступ к памяти за пределами 1 Мб, но для этого требуется специальный драйвер расширенной памяти.

Поскольку делить имеющуюся память между несколькими процессами не приходится, распределение получается бесхитростное.

Рис. 4 Основные области памяти ОС MS-DOS

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

Для пущей экономии памяти некоторые нерезидентные модули DOS могут занимать верхнюю часть области пользователя, но только до тех пор, пока не будут затерты пользовательской программой, которой потребуется вся имеющаяся память.

Часть системной памяти и вся область пользователя разбита на прилегающие друг к другу блоки, размер которых кратен параграфу. Перед началом каждого блока памяти размещается блок управления памятью (MCB, Memory Control Block), который занимает один параграф и содержит следующие данные:

· признак, определяющий, последний ли это блок памяти или за ним будут еще блоки (соответственно буква ‘Z’ или ‘M’);

· адрес PSP программы, владеющей этим блоком (0 означает свободный блок);

· размер блока в параграфах;

· имя программы-владельца (до 8 символов); это поле избыточно (зная PSP программы, можно найти имя ее файла), оно было добавлено, вероятно, чтобы хоть как-то занять пустующие байты параграфа MCB.

Когда система должна выделить блок памяти для собственных нужд или по запросу программы пользователя, она просматривает список блоков от начала, перемещаясь от одного MCB к следующему. Найдя свободный блок достаточного размера, система отмечает его как занятый соответствующим владельцем. Если выделяется не весь свободный блок, то после выделенного блока система записывает еще один MCB, описывающий свободный остаток блока.

При освобождении блока система записывает 0 в поле владельца MCB. Если с одной или с двух сторон от освобождаемого блока лежат свободные блоки, то два или три свободных блока сливаются в один.

При запуске программы система выделяет ей два блока памяти: сначала небольшой блок для переменных среды, затем самый большой среди оставшихся свободных блоков для самой программы (блок PSP). Обычно этот блок занимает всю свободную память. Такое решение приемлемо, поскольку других претендентов на память нет.

Почему блок среды выделяется раньше, чем блок PSP?

При завершении программы система просматривает все блоки памяти и освобождает те из них, владельцем которых указана завершаемая программа. Исключением является случай завершения с установкой резидента, при этом блок PSP не освобождается, но уменьшается до указанного размера. В дальнейшем этот блок остается занятым до перезагрузки системы.

MS-DOS предоставляет в распоряжение пользователя функции, позволяющие выполнять основные действия с блоками памяти.

· Выделение блока указанного размера. Если свободного блока достаточной величины не имеется, то система возвращает максимальный размер, который может быть выделен.

· Освобождение ранее выделенного блока.

· Изменение размера блока. Уменьшение блока возможно всегда, увеличение – только в том случае, если после данного блока расположен свободный блок достаточного размера.

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

Заключение

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