Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS 1.docx
Скачиваний:
75
Добавлен:
23.11.2019
Размер:
893.2 Кб
Скачать

3. Работа системы прерываний в защищенном режиме работы процессора

В защищенном режиме система прерываний процессора использует не вектора прерываний, а таблицу дескрипторов прерываний (IDT, interrupt descriptor table). Причем таблица IDT представляет собой таблицу не с адресами обработчиков прерываний, а таблицу со специальными системными структурами данных (дескрипторами), доступ к которой со стороны пользовательских прикладных программ невозможен. Только сам микропроцессор (его система прерываний) и код операционной системы могут получить доступ к этой таблице, которая представляет собой специальный сегмент, адрес и сегмент которой содержатся в таблице регистре таблицы прерываний.

Лекция 5. Распределение оперативной памяти в операционной системе

1. Общие принципы организации управления оперативной памятью.

2. Организация управления виртуальной памятью.

3. Распределение оперативной памяти в MS-DOS.

4. Распределение оперативной памяти в Windows NT.

1. Общие принципы организации управления оперативной памятью

Способы управления памятью.

Простое непрерывное распределение и распределение с перекрытием (оверлейные структуры)

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

область, занимаемая операционной системой;

область, в которой размещается исполняемая задача;

незанятая ничем (свободная) область памяти.

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

Чтобы для задач отвести как можно больший объем памяти, ОС строится таким образом, что постоянно в оперативной памяти располагается только самая нужная ее часть. Эту часть принято называть ядром. Остальные модули ОС могут быть обычными диск-резидентными, т.е. загружаться в оперативную память только по необходимости, и после своего выполнения вновь освобождать память.

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

Метод распределения памяти с перекрытием – оверлейные структуры (overlay – перекрытие, расположение поверх чего-то) – предполагает, что вся программа может быть разбита на части – сегменты. Каждая оверлейная программа имеет одну главную часть (main) и несколько сегментов (segment), причем в памяти компьютера одновременно могут находиться одна главная ее часть и один или несколько не перекрывающихся сегментов. Пока в оперативной памяти располагаются выполняющиеся сегменты, остальные находятся во внешней памяти. После того, как текущий (выполняющийся) сегмент завершит свое выполнение, возможны два варианта. Либо он сам (если данный сегмент не нужно сохранять в памяти в его текущем состоянии) обращается к ОС с указанием, какой сегмент дожжен быть загружен в память следующим. Либо он возвращает управление главному сегменту задачи (в модель main), и уже тот обращается к ОС с указанием, какой сегмент сохранить, а какой сегмент загрузить в оперативную память, и вновь отдает управление одному из сегментов, располагающихся в памяти. Простейшие схемы сегментирования предполагают, что в памяти в каждый конкретный момент времени может располагаться только один сегмент (вместе с модулем main). Более сложные схемы, используемые в больших вычислительных системах, позволяют располагать по несколько сегментов.

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

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

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

Исходные данные.

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

Рис. 1 Исходные данные для пояснения способов распределения памяти

Полный объем доступной памяти ЭВМ предполагается равным 56000 байт; ОС занимает первые 10000 байт. Память, не занятая ОС, состоит из 4-х разделов. Раздел 1 начинается с адреса 10000 сразу за ОС и имеет длину 18000 байт. Раздел 2-3 – по 10000 байт каждый. Раздел 4 – 8000 байт.

В простой схеме распределения с разделением фиксированного размера каждое входящее задание загружается в наименьший подходящий по объему раздел (рис. 2). Если размер раздела превосходит размер задания, то оставшееся внутри раздела память не используется. Система, имея вначале пустыми все 4-е раздела, первым делом загрузит задание 1 в раздел 2. Затем задание 2 будет загружено в единственно достаточно большой для него раздел 1. Задание 3 и 4 загружаются в разделы 3 и 4. После этого все разделы оказываются занятыми, поэтому больше заданий загрузить нельзя.

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

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

По окончании задания 2 в раздел 1 загрузится задание 5.

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

При небольшом объеме памяти и, следовательно, небольшом количестве разделов увеличить количество параллельно выполняемых приложений можно за счет свопинга (swapping). При свопинге задача может быть выгружена на внешний диск, а на ее место загружается либо более привилегированная, либо проста готовая к выполнению другая задача, находившаяся на диске в приостановленном состоянии. При свопинге из основной памяти во внешнюю (и обратно) перемещается вся программа, а не ее отдельная часть.

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

Основным недостатком такого метода распределения памяти является большая ее фрагментация. Сократить потери в использовании оперативной памяти можно двумя способами:

выделять раздел ровно такого объема, который нужен под текущую задачу;

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

Разделы с подвижными границами.

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

Рис. 3 Распределение памяти с подвижными границами

Вначале вся память (кроме той, что отведена ОС) не распределена, т.к. заранее нет определенных разделов. Раздел для задания 1 создается при его загрузке. Предположим, что этот раздел, непосредственно за ОС. Затем заданию 2 отводится раздел, следующий сразу за заданием 1 и т.д. Объем свободной памяти, оставшейся за заданием 5, для загрузки очередного задания уже недостаточен.

Когда завершается задание 2, его раздел освобождается, и новый раздел отводится заданию 6. Как видно из рисунка, этот новый раздел занимает часть памяти, которая отводилась заданию 2. Остаток от прежнего раздела задания 2 остается свободным. Теперь имеются две не смежные свободные области памяти; однако не одна из них не велика на столько, чтобы вместить еще одно задание, и т.д.

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

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

Единой проблемой для всех общецелевых способов динамического распределения является фрагментация памяти. Фрагментация имеет место, когда доступная свободная память разбита на несколько не смежных блоков, каждый из которых слишком мал для использования. Чтобы, например, разместить задание 1, в целом имеется более чем достаточно свободной памяти; однако из-за того, что нет ни одного свободного блока достаточно большого размера, оно не может быть загружено.

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

Рис. 4 Распределение памяти с перемещающимися разделами

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]