ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2021

Просмотров: 174

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лекция 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 Распределение памяти с перемещающимися разделами


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



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


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

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

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

Рис. 5 Общий принцип организации виртуальной памяти



С позиции объемов двухэтапной схемы отображения адресов выделяются следующие три ситуации:

1. объем виртуального адресного пространства программы Vv меньшем объема физической памяти Vm. Данная ситуация в настоящее время практически не встречается, но тем не менее это реальное соотношение;

2. Vv = Vm. Встречается очень часто, особенно характерна она была для не дорогих вычислительных комплексов. Для этого случая имеется большое количество методов распределения оперативной памяти.

3. Vv > Vm. Такая ситуация встречается повсеместно во всех современных персональных компьютерах и программах. Для нее имеется несколько методов распределения памяти, отличающихся как сложностью, так и эффективностью.

Страничный способ организации виртуальной памяти.

В системе с размещением страниц по запросу виртуальная память процесса разделена на страницы некоторой фиксированной длинны, которые, как правило, размещаются во внешней памяти. Файл размещения виртуальной памяти называют файлом подкачки или страничным файлом (pagefile.sys). В Unix-системах для этих целей выделяется специальный раздел – swap. Реальная память ЭВМ разделяется на страничные кадры той же длины, что и страницы. Любая страница любого процесса потенциально может быть загружена в любой строчный кадр реальной памяти. Отображение в строчные кадры описывается таблицей отображения страницы (ТОС); для каждого процесса в системе имеется одна ТОС. ТОС используется аппаратурой для преобразования адресов виртуальной памяти программы в соответствующие адреса реальной памяти. Такой перевод виртуальных адресов в реальные, называется динамическим преобразованием адресов.

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

При обращении к виртуальной странице, не оказавшейся в данный момент в оперативной памяти, возникает прерывание и управление передается диспетчеру памяти, который должен найти свободное место. Обычно предоставляется первая же свободная страница. Если свободной станицы нет, то диспетчер памяти по одной из дисциплин замещения (LRU – последний из недавно использованных; LFU – используемый реже всех остальных; FIFO – первый пришедший первым и выбывает; random – случайный выбор) определит страницу, подлежащую расформированию или сохранению во внешней памяти. На ее место он разместит ту новую виртуальную страницу, к которой было обращение из задачи, но ее не оказалось в оперативной памяти.