Вопрос 14. Сегментно-страничная организация памяти.

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

Разбиение виртуального адресного пространства на сегменты дает следующие преимущества по сравнению со страничной организацией:

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

- возможность организации совместного использования фрагментов программ разными процессами (например, использование одной и той же подпрограммы).

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

Виртуальное адресное пространство процесса представляет собой набор виртуальных сегментов. Максимальный размер сегмента определяется разрядностью виртуального адреса (4 Гб при 32-разрядной организации). Каждый сегмент располагает своим независимым виртуальным адресным пространством с адресами от нулевого до максимально возможного. Общего для сегментов линейного виртуального адреса не существует. В каждом сегменте виртуальные адреса задаются парой «номер сегмента – смещение внутри сегмента». Схема сегментного распределения памяти приведена на рис. 4.22.

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

· начальный физический адрес сегмента в оперативной памяти;

· размер сегмента;

· права доступа к сегменту;

· признаки модификации, присутствия и обращения к данному сегменту за последний интервал времени, а также некоторая другая информация.

Вопрос 14. Сегментно-страничная организация памяти. - student2.ru

Рис. 3.22. Схема сегментного распределения памяти

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

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

Вопрос 15. Организация защиты памяти.

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

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

- неразрешенное взаимодействие пользователей друг с другом,

- несанкционированный доступ пользователей к данным,

- повреждение программ и данных из-за ошибок в программах,

- намеренные попытки разрушить целостность системы,

- использование информации в памяти не в соответствии с ее функциональным назначением.

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

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

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

Если нарушается защита памяти, исполнение программы приостанавливается и вырабатывается запрос прерывания по нарушению защиты памяти.

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

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

Защита отдельных ячеек памяти организуется в ЭВМ, предназначенных для работы в системах управления, где необходимо обеспечить возможность отладки новых программ без нарушения функционирования находящихся в памяти рабочих программ, управляющих технологическим процессом. Это может быть достигнуто выделением в каждой ячейке памяти специального "разряда защиты". Установка этого разряда в "1" запрещает производить запись в данную ячейку, что обеспечивает сохранение рабочих программ. Недостаток такого подхода - большая избыточность в кодировании информации из-за излишне мелкого уровня защищаемого объекта (ячейка).

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

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

Вопрос 14. Сегментно-страничная организация памяти. - student2.ru

Рис. 4.26. Защита памяти методом граничных регистров

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

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

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

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

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

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

Функционирование этого механизма защиты памяти поясняется схемой на рис. 4.27.

Вопрос 14. Сегментно-страничная организация памяти. - student2.ru


Рис. 4.27.Защита памяти методом ключей защиты

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

Наши рекомендации