Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Термин "память" используется для обозначения любого устройства, способного хранить информацию. Мы будем иметь в виду оперативную память компьютера (ОЗУ). Управление памятью – одна из основных задач ОС, и занимается им менеджер памяти, который входит в состав ядра ОС.

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

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

Появление виртуальной памяти стало одним из главных усовершенствований архитектуры компьютеров. Она была впервые реализована в 1959 г. на компьютере "Атлас" в Манчестерском университете и приобрела популярность только спустя десятилетие.

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

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

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

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

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

Размер виртуального адресного пространства программы прежде всего зависит от архитектуры процессора и от системы программирования и практически не зависит от объема реальной физической памяти.

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

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

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

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

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

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

Способ организации памяти определяет выбор одного из альтернативных вариантов в каждом вопросе, связанном с выделением и использованием оперативной памяти:

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

2) Выделение программам одинакового или различного числа ячеек памяти.

3) Статическое разбиение памяти или динамическое планирование.

4) Размещение программы в непрерывном блоке или разбивание ее на отдельные блоки с размещением их в "дырах".

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

1) Выбор момента помещения новой программы в оперативную память – это можно делать по запросу системы или предварительно, предупреждая запрос.

2) Выбор места памяти для размещения очередной программы.

3) Размещение программы как можно более плотное с экономией памяти или как можно быстрое с экономией времени.

4) Выбор программы на удаление для загрузки данной программы в случае, если занята вся память. Возможны различные варианты: выбирается программа, которая дольше всех находилась в памяти, или которая дольше всех не использовалась, или использовалась наименее часто.

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

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

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

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

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

Вариантов простого непрерывного распределения памяти существовало очень много (примером может являться ОС MS-DOS).

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

· Этот сегмент сам обращается к ОС с указанием, какой сегмент нужно загрузить следующим.

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

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

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

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

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

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

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

Для сокращения потерь были предложены варианты:

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

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

Разделы с подвижными границами. Чтобы избавиться от фрагментации, можно попробовать размещать в ОП задачи плотно, одну за другой, выделяя каждой столько памяти, сколько для нее требуется (Первая ОС, реализовавшая этот способ – OS MVT – "мультипрограммирование с переменным числом задач", ОС для больших ЭВМ класса IBM 360). Специальный планировщик (диспетчер памяти) ведет список адресов свободной ОП. При появлении новой задачи он просматривает этот список и выделяет для задачи раздел, объем которого равен необходимому или чуть больше, если память выделяется не ячейками, а некими дискретными единицами. При этом список свободной памяти модифицируется. При освобождении раздела диспетчер пытается объединить смежные свободные участки памяти.

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

· первый подходящий участок;

· самый подходящий участок;

· самый неподходящий участок.

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

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

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

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

Методы распределения памяти, при которых задаче может не предоставляться сплошная область памяти, называются разрывными, или несвязными. Размещение задачи в нескольких областях требует соответствующей аппаратной поддержки – наличия относительной адресации. В настоящее время применяется сегментная, страничная и сегментно-страничная организация памяти, причем способы организации памяти относятся как к виртуальному, так и к физическому адресному пространству.

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

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

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

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

Достоинства сегментного метода:

· программу можно загружать не целиком, а по мере необходимости;

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

Недостатки сегментного метода:

· замедление доступа к требуемой ячейке памяти;

· потери памяти и процессорного времени на размещение и обработку дескрипторных таблиц.

В качестве примера операционной системы, применяющей сегментное преобразование памяти, можно назвать OS/2.

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

Страничное преобразование заключается в замене номера виртуальной страницы на номер физической. Каждой виртуальной странице ставится в соответствие физическая, или говорят, что в виртуальную страницу отображена физическая. Т.е. страничное преобразование – это отображение физических страниц в виртуальные. Для этого отображения существует таблица дескрипторов страниц. Отличие от таблицы дескрипторов сегментов состоит в том, что здесь не требуется поле длины. Поскольку размер страницы – величина фиксированная, то существует проблема его правильного выбора. Чем больше размер страницы, тем меньше будет размер структуры данных, обслуживающих преобразование адресов, но и тем больше будут потери, связанные с тем, что память можно выделять только постранично (возникает фрагментация). На некоторых архитектурах размер страниц задан аппаратно, например, на Intel – это 4 Кбайт, на DEC PDP-11 – 8 Кбайт, а на других архитектурах, таких, как Motorola 68030, размер страниц задается программно.

Важными характеристиками архитектуры процессора являются размеры физического и виртуального адресных пространств, определяющих соответственно ограничение на размер физической памяти и пределы, в которых может меняться виртуальный адрес. Размеры адресных пространств обычно определяются разрядностью архитектуры процессора. Самыми распространенными сейчас являются 32-разрядные процессоры, позволяющие создавать виртуальные адресные пространства размером 232 байт (4 Гбайта).

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

Основным достоинством страничного способа распределения памяти является минимально возможная фрагментация.

Недостатки страничного преобразования:

· как и при сегментном методе, потери памяти и процессорного времени на размещение и обработку дескрипторных таблиц;

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

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

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

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

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

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

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

2) Выталкивание случайной страницы. Данная стратегия проста, но неэффективна.

3) Алгоритм FIFO (First In – First Out) – для освобождения выбирается страница, дольше всего находившаяся в физической памяти. Реализуется созданием очереди страниц. Недостаток – могут быть удалены активно используемые страницы.

4) Алгоритм LRU (Least Recently Used – дольше всего неиспользуемый) – в памяти освобождается страница, к которой наиболее долго не обращались. Существуют разные реализации алгоритма: основанные на связном списке страниц в памяти, отсортированном по давности обращений; использующие таймер; использующие специальную матрицу. Эти алгоритмы требуют специальной аппаратной поддержки.

5) Алгоритм LFU (Least Frequently Used) – выталкивание реже всего используемой страницы, т.е. страницы, к которой было меньше всего обращений. Недостаток – может быть вытолкнута только что записанная страница, поскольку как раз к ней и было меньше обращений.

6) NUR (Not Used Recently) – выталкивание страницы, не использовавшейся в последнее время. Он предусматривает введение двух битов-признаков на страницу: бита-признака обращения и бита-признака модификации. Биты-признаки обращений периодически сбрасываются в ноль, чтобы давно неиспользуемые страницы не задерживались в памяти. В первую очередь для замещения выбирается страница без обращений, а из них – страница без модификаций.

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

В большинстве современных ОС используется дисциплина LRU как наиболее эффективная. Примеры – операционные системы OS/2, Linux. Но в некоторых ОС, разработчики которых стремились сделать систему максимально независимой от аппаратных возможностей процессора, применяются другие дисциплины. Например, в ОС Windows NT используется правило FIFO. Для того чтобы устранить его недостатки, применяется "буферизация" тех страниц, которые предназначены к выгрузке, как некоторый промежуточный этап. Т.е., прежде чем выгрузить выбранную страницу, ее помечают как кандидата на выгрузку. Если в следующий раз к ней происходит обращение, то она никуда не выгружается, а уходит в конец списка FIFO. В противном случае ее выгружают, а в кандидаты на выгрузку выбирают следующую страницу. Поскольку величина такого "буфера" не может быть большой, эффективность страничной реализации памяти в Windows NT ниже, чем у вышеназванных ОС, и даже при существенно большем объеме памяти начинается явление пробуксовки.

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

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

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

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

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

· при попытке записи в страницу с атрибутом "только чтение";

· при попытке обращения к странице ядра из режима пользователя;

· при попытке чтения или записи страницы с атрибутом "только выполнение";

· при любом обращении к отсутствующей странице.

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

Задание

(выполняются с использованием справочных изданий)

Смоделировать и визуализировать работу n процессов в вычислительной системе для получения информации о состоянии и использовании оперативной памяти в системе, состоянии загрузки процессора, степени использования файла подкачки. Создать ситуацию, когда объема файла подкачки недостаточно для работы Вашего программного продукта и сработает системное прерывание с сообщением для пользователя о невозможности продолжения нормальной работы всей вычислительной системы. Визуализацию (окно 1.8. рисунка 1.1. Вашей среды исследования ОС) осуществите в соответствии с рис. 9.1.

 

 

Рис.9.1. Визуализация использования оперативной памяти.

 

Контрольные вопросы

1. Система управления памятью: ее назначение и функции.

2. Понятия физической и виртуальной памяти, соотношения их размеров. Схемы организации памяти.

3. Схема простого непрерывного распределения памяти, ее достоинства и недостатки. Оверлейные структуры.

4. Управление памятью в мультипрограммном режиме. Статическое и динамическое разбиение памяти. Явление фрагментации.

5. Виртуальная память и механизмы преобразования адресов. Виды организации памяти: сегментная, страничная память.

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

7. Сегментное преобразование памяти – достоинства и недостатки. Дескриптор сегмента.

8. Страничное преобразование памяти – достоинства и недостатки.

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

10. Стратегии управления вталкиванием информации и ее размещением: подробное описание.

11. Алгоритмы выталкивания страниц, их достоинства и недостатки. Способы защиты страниц.

Р а з д е л X




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 706; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.091 сек.