Режим защита от записи и считывания памяти в вычислительных системах
Защита памяти (англ. Memory protection ) — это способ управления правами доступа к отдельным регионам памяти. Используется большинством многозадачных операционных систем. Основной целью защиты памяти является запрет доступа процессу к той памяти, которая не выделена для этого процесса. Такие запреты повышают надежность работы как программ так и операционных систем, так как ошибка в одной программе не может повлиять непосредственно на память других приложений. Следует различать общий принцип защиты памяти и технологии ASLR или NX-бит. [1]
Метод защиты ключей
Защита памяти по ключам (уровням привилегий) используется в большинстве современных многопрограммных ЭВМ со страничной организацией памяти и динамическим её распределением между параллельно выполняемыми программами. В её основе лежит применение специальных кодов (уровней) для проверки соответствия используемых массивов ячеек памяти номеру выполняемой программы.
Каждой рабочей программе ОС придает специальный ключ — ключ программы. Все выделенные для данной рабочей программы страницы отмечаются одним и тем же ключом страницы или ключом защиты. В качестве ключа защиты обычно указывается двоичный код номера программы. В процессе обращения к ОП производится сравнение ключа выполняемой про граммы с ключами защиты соответствующих страниц памяти. Обращение разрешается только при совпадении сравниваемых кодов ключей. Защита памяти по ключам применяется не только при работе ОП с процессором, но и в ходе обмена информацией с ВЗУ через каналы ввода-вывода. Тогда вместо ключей программ используются ключи каналов. Разрядность кодов ключей определяется максимальным количеством параллельно выполняемых программ. [3]
Содержание
Организация защиты памяти в ЭВМ
При мультипрограммном режиме работы ЭВМ в ее памяти одновременно могут находиться несколько независимых программ. Поэтому необходимы специальные меры по предотвращению или ограничению обращений одной программы к областям памяти, используемым другими программами. Программы могут также содержать ошибки, которые, если этому не воспрепятствовать, приводят к искажению информации, принадлежащей другим программам. Последствия таких ошибок особенно опасны, если разрушению подвергнутся программы операционной системы. Другими словами, надо исключить воздействие программы пользователя на работу программ других пользователей и программ операционной системы. Следует защищать и сами программы от находящихся в них возможных ошибок.
Таким образом, средства защиты памяти должны предотвращать 2
- неразрешенное взаимодействие пользователей друг с другом,
- несанкционированный доступ пользователей к данным,
- повреждение программ и данных из-за ошибок в программах,
- намеренные попытки разрушить целостность системы ,
- использование информации в памяти не в соответствии с ее функциональным назначением.
Чтобы воспрепятствовать разрушению одних программ другими, достаточно защитить область памяти данной программы от попыток записи в нее со стороны других программ, а в некоторых случаях и своей программы ( защита от записи ), при этом допускается обращение других программ к этой области памяти для считывания данных.
В других случаях, например при ограничениях на доступ к информации, хранящейся в системе, необходимо запрещать другим программам любое обращение к некоторой области памяти как на запись , так и на считывание. Такая защита от записи и считывания помогает в отладке программы, при этом осуществляется контроль каждого случая обращения за область памяти своей программы.
Для облегчения отладки программ желательно выявлять и такие характерные ошибки в программах, как попытки использования данных вместо команд или команд вместо данных в собственной программе, хотя эти ошибки могут и не разрушать информацию (несоответствие функционального использования информации).
Если нарушается защита памяти , исполнение программы приостанавливается и вырабатывается запрос прерывания по нарушению защиты памяти .
Защита от вторжения программ в чужие области памяти может быть организована различными методами. Но при любом подходе реализация защиты не должна заметно снижать производительность компьютера и требовать слишком больших аппаратурных затрат.
Методы защиты базируются на некоторых классических подходах, которые получили свое развитие в архитектуре современных ЭВМ. К таким методам можно отнести защиту отдельных ячеек, метод граничных регистров , метод ключей защиты [ 7 ] .
Защита отдельных ячеек памяти организуется в ЭВМ, предназначенных для работы в системах управления, где необходимо обеспечить возможность отладки новых программ без нарушения функционирования находящихся в памяти рабочих программ, управляющих технологическим процессом. Это может быть достигнуто выделением в каждой ячейке памяти специального "разряда защиты". Установка этого разряда в "1" запрещает производить запись в данную ячейку, что обеспечивает сохранение рабочих программ. Недостаток такого подхода - большая избыточность в кодировании информации из-за излишне мелкого уровня защищаемого объекта ( ячейка ).
В системах с мультипрограммной обработкой целесообразно организовывать защиту на уровне блоков памяти, выделяемых программам, а не отдельных ячеек.
Метод граничных регистров (рис. 17.1) заключается во введении двух граничных регистров, указывающих верхнюю и нижнюю границы области памяти, куда программа имеет право доступа .
При каждом обращении к памяти проверяется, находится ли используемый адрес в установленных границах. При выходе за границы обращение к памяти не производится, а формируется запрос прерывания , передающий управление операционной системе. Содержание граничных регистров устанавливается операционной системой при загрузке программы в память .
Модификация этого метода заключается в том, что один регистр используется для указания адреса начала защищаемой области, а другой содержит длину этой области.
Метод граничных регистров , обладая несомненной простотой реализации, имеет и определенные недостатки. Основным из них является то, что этот метод поддерживает работу лишь с непрерывными областями памяти.
Метод ключей защиты, в отличие от предыдущего, позволяет реализовать доступ программы к областям памяти, организованным в виде отдельных модулей, не представляющих собой единый массив .
Память в логическом отношении делится на одинаковые блоки, например, страницы. Каждому блоку памяти ставится в соответствие код, называемый ключом защиты памяти, а каждой программе, принимающей участие в мультипрограммной обработке, присваивается код ключа программы. Доступ программы к данному блоку памяти для чтения и записи разрешен, если ключи совпадают (то есть данный блок памяти относится к данной программе) или один из них имеет код 0 (код 0 присваивается программам операционной системы и блокам памяти, к которым имеют доступ все программы: общие данные, совместно используемые подпрограммы и т. п.). Коды ключей защиты блоков памяти и ключей программ устанавливаются операционной системой.
В ключе защиты памяти предусматривается дополнительный разряд режима защиты. Защита действует только при попытке записи в блок, если в этом разряде стоит 0, и при любом обращении к блоку, если стоит 1. Коды ключей защиты памяти хранятся в специальной памяти ключей защиты, более быстродействующей, чем оперативная память .
Функционирование этого механизма защиты памяти поясняется схемой на рис. 17.2.
При обращении к памяти группа старших разрядов адреса ОЗУ , соответствующая номеру блока, к которому производится обращение, используется как адрес для выборки из памяти ключей защиты кода ключа защиты, присвоенного операционной системой данному блоку. Схема анализа сравнивает ключ защиты блока памяти и ключ программы, находящийся в регистре слова состояния программы ( ССП ), и вырабатывает сигнал "Обращение разрешено" или сигнал " Прерывание по защите памяти". При этом учитываются значения режима обращения к ОЗУ ( запись или считывание), указываемого триггером режима обращения ТгРО, и режима защиты, установленного в разряде режима обращения (РРО) ключа защиты памяти .
Аннотация: Рассматриваются требования к системе защиты информации, общие подходы к организации защиты памяти мультипрограммных ЭВМ, а также организация защиты памяти в персональной ЭВМ.
Защита памяти по маскам
Защита памяти по маскам используется при страничной организации ОП. Для каждой программы перед её выполнением указываются номера страниц, отведенные для размещения её команд и всех необходимых данных. Указание о номерах отведенных страниц для данной программы задается управляющей программой операционной системы в виде кода маски или кода признаков страниц. Код маски формируется для каждой рабочей программы. Под маской программы понимается n-разрядный двоичный код, разрядность которого определяется количеством страниц ОП. Каждый i-й разряд маски указывает о принадлежности i-й страницы ОП данной программе: если в i-м разряде задано значение 1, то при обращении к ОП разрешен доступ к любой ячейке i-ой страницы, если же i-й разряд маски содержит ноль, то выполняемой программе доступ к i-й странице запрещен.
Аннотация: Рассматриваются требования к системе защиты информации, общие подходы к организации защиты памяти мультипрограммных ЭВМ, а также организация защиты памяти в персональной ЭВМ.
Физические основы функционирования
В основе работы запоминающего устройства может лежать любой физический эффект, обеспечивающий приведение системы к двум или более устойчивым состояниям. В современной компьютерной технике часто используются физические свойства полупроводников, когда прохождение тока через полупроводник или его отсутствие трактуются как наличие логических сигналов 0 или 1. Устойчивые состояния, определяемые направлением намагниченности, позволяют использовать для хранения данных разнообразные магнитные материалы. Наличие или отсутствие заряда в конденсаторе также может быть положено в основу системы хранения. Отражение или рассеяние света от поверхности CD, DVD или Blu-ray-диска также позволяет хранить информацию.
Классификация типов памяти
Следует различать классификацию памяти и классификацию запоминающих устройств (ЗУ). Первая классифицирует память по функциональности, вторая же — по технической реализации. Здесь рассматривается первая — таким образом, в неё попадают как аппаратные виды памяти (реализуемые на ЗУ), так и структуры данных, реализуемые в большинстве случаев программно.
Доступные операции с данными
- Память только для чтения (read-only memory, ROM)
- Память для чтения/записи
Память на программируемых и перепрограммируемых ПЗУ (ППЗУ и ПППЗУ) не имеет общепринятого места в этой классификации. Её относят либо к подвиду памяти «только для чтения», либо выделяют в отдельный вид. Также предлагается относить память к тому или иному виду по характерной частоте её перезаписи на практике: к RAM относить виды, в которых информация часто меняется в процессе работы, а к ROM — предназначенные для хранения относительно неизменных данных.
Энергозависимость
- Энергонезависимая память (англ. nonvolatile storage) — память, реализованная ЗУ, записи в которых не стираются при снятии электропитания. К этому типу памяти относятся все виды памяти на ПЗУ и ППЗУ;
- Энергозависимая память (англ. volatile storage) — память, реализованная ЗУ, записи в которых стираются при снятии электропитания. К этому типу памяти относятся память, реализованная на ОЗУ, кэш-память.
- Статическая память (англ. static storage) — энергозависимая память, которой для хранения информации достаточно сохранения питающего напряжения;
- Динамическая память (англ. dynamic storage) — энергозависимая память, в которой информация со временем разрушается (деградирует), и, кроме подачи электропитания, необходимо производить её периодическое восстановление (регенерацию).
Метод доступа
- Последовательный доступ (англ. sequential access memory, SAM) — ячейки памяти выбираются (считываются) последовательно, одна за другой, в очерёдности их расположения. Вариант такой памяти — стековая память.
- Произвольный доступ (англ. random access memory, RAM) — вычислительное устройство может обратиться к произвольной ячейке памяти по любому адресу.
- Буферная память (англ. buffer storage) — память, предназначенная для временного хранения данных при обмене ими между различными устройствами или программами.
- Временная (промежуточная) память (англ. temporary (intermediate) storage) — память для хранения промежуточных результатов обработки.
- Кеш-память (англ. cache memory) — часть архитектуры устройства или программного обеспечения, осуществляющая хранение часто используемых данных для предоставления их в более быстрый доступ, нежели кешируемая память.
- Корректирующая память (англ. patch memory) — часть памяти ЭВМ, предназначенная для хранения адресов неисправных ячеек основной памяти. Также используются термины relocation table и remap table.
- Управляющая память (англ. control storage) — память, содержащая управляющие программы или микропрограммы. Обычно реализуется в виде ПЗУ.
Разделяемая память или память коллективного доступа (англ. shared memory, shared access memory) — память, доступная одновременно нескольким пользователям, процессам или процессорам.
Организация адресного пространства
- Реальная или физическая память (англ. real (physical) memory) — память, способ адресации которой соответствует физическому расположению её данных;
- Виртуальная память (англ. virtual memory) — память, способ адресации которой не отражает физического расположения её данных;
- Оверлейная память (англ. overlayable storage) — память, в которой присутствует несколько областей с одинаковыми адресами, из которых в каждый момент доступна только одна.
Удалённость и доступность для процессора
Первичная память (сверхоперативная, СОЗУ) — доступна процессору без какого-либо обращения к внешним устройствам. Данная память отличается крайне малым временем доступа и тем, что неадресуема для программиста. регистры процессора (процессорная или регистровая память) — регистры, расположенные непосредственно в АЛУ; кэш процессора — кэш, используемый процессором для уменьшения среднего времени доступа к компьютерной памяти. Разделяется на несколько уровней, различающихся скоростью и объёмом (например, L1, L2, L3). Вторичная память — доступна процессору путём прямой адресацией через шину адреса (адресуемая память). Таким образом доступна основная память (память, предназначенная для хранения текущих данных и выполняемых программ) и порты ввода-вывода (специальные адреса, через обращение к которым реализовано взаимодействие с прочей аппаратурой). Третичная память — доступна только путём нетривиальной последовательности действий. Сюда входят все виды внешней памяти — доступной через устройства ввода-вывода. Взаимодействие с третичной памятью ведётся по определённым правилам (протоколам) и требует присутствия в памяти соответствующих программ. Программы, обеспечивающие минимально необходимое взаимодействие, помещаются в ПЗУ, входящее во вторичную память (у PC-совместимых ПК — это ПЗУ BIOS). Положение структур данных, расположенных в основной памяти, в этой классификации неоднозначно. Как правило, их вообще в неё не включают, выполняя классификацию с привязкой к традиционно используемым видам ЗУ.
Управление процессором
Непосредственно управляемая (оперативно доступная) память (англ. on-line storage) — память, непосредственно доступная в данный момент времени центральному процессору. Автономная память — память, реализованная, например при помощи службы внешних носителей в Windows 2000, предусматривающей оперативное управление библиотеками носителей и устройствами с автоматической подачей дисков, облегчающей использование съёмных носителей типа магнитных лент и съёмных дисков, магнитных или оптических.
Организация хранения данных и алгоритмы доступа к ним
Повторяет классификацию структур данных:
- Адресуемая память — адресация осуществляется по местоположению данных.
- Ассоциативная память (англ. associative memory, content-addressable memory, CAM) — адресация осуществляется по содержанию данных, а не по их местоположению.
- Магазинная (стековая) память (англ. pushdown storage) — реализация стека.
- Матричная память (англ. matrix storage) — ячейки памяти расположены так, что доступ к ним осуществляется по двум или более координатам.
- Объектная память (англ. object storage) — память, система управления которой ориентирована на хранение объектов. При этом каждый объект характеризуется типом и размером записи.
- Семантическая память (англ. semantic storage) — данные размещаются и списываются в соответствии с некоторой структурой понятийных признаков.
Защита по уровню привилегей
В защищенном режиме процессор имеет четырехуровневую систему привилегий, которая управляет использованием привилегированных инструкций и доступом к сегментам памяти. Уровень привилегии сегмента указывается в его дескрипторе. Нумерация уровней происходит от 0 до 3, высшие привилегии соответствуют нулевому уровню. Для наглядности их принято изображать в виде колец.
Уровни привилегий обеспечивают защиту целостности операционной системы от «недружелюбных» программ. А также защиту адресных пространств одновременно выполняемых задач. Сервисы операционной системы, обработчики прерываний и другое системное обеспечение могут включаться в виртуальное адресное пространство каждой задачи и защищаться системой привилегий. Как правило, назначение уровней следующее. Нулевой уровень – уровень операционной системы (ядро операционной системы). Уровни 1 и 2 – программы системного назначения. Уровень 3 – прочие прикладные программы (уровень прикладных программ). Дескрипторы (сегменты) и селекторы имеют свои атрибуты привилегий. Привилегии задач оказывают влияние на выполнение инструкций и использование дескрипторов. Текущий уровень привилегии задачи CPL (Current Privilege Level) определяется двумя младшими битами регистра CS.
CPL задачи может изменяться только при передаче управления к новому сегменту через дескриптор шлюза. Задача начинает выполняться с уровня CPL, указанного селектором кодового сегмента внутри TSS, когда задача инициируется посредством операции переключения задач. Задача, выполняемая на нулевом уровне привилегий, имеет доступ ко всем сегментам, описанным в GDT, и является самой привилегированной. Задача, выполняемая на уровне 3, имеет самые ограниченные права доступа. Текущий уровень привилегии задачи может изменяться только при передаче управления через шлюзы. Привилегии сегмента задаются полем DPL байта управления доступом.
DPL определяет наибольший номер уровня привилегий (фактически, наименьшие привилегии), с которым возможен доступ к данному дескриптору. Самый защищенный (привилегированный) дескриптор имеет DPL=0, к нему имеют доступ только задачи с CPL=0. Самый общедоступный дескриптор имеет DPL=3, его могут использовать задачи с CPL=0, 1, 2, 3. Это правило применимо ко всем дескрипторам, за исключением дескриптора LDT. Привилегии селектора задаются полем RPL (Requested Privilege Level) — двумя младшими битами селектора. [2]
Физические принципы
Эта классификация повторяет соответствующую классификацию ЗУ.
Вид | Среда, хранящая информацию | Принцип чтения/записи | Примеры |
---|---|---|---|
Полупроводниковая память (англ. semiconductor storage) | сформированные в полупроводнике элементы, имеющие 2 устойчивых состояния с различными электрическими параметрами | включение в электрическую цепь | SRAM, DRAM, EEPROM, Flash-память |
Магнитная память (англ. magnetic storage) | Намагниченность участков ферромагнитного материала (доменов) | Магнитная запись | Магнитная лента, магнитный диск, магнитная карта |
Оптическая память (англ. optical storage, laser storage) | последовательность участков (питов), отражающих или рассеивающих свет | чтение: отражение либо рассеяние лазерного луча от питов;запись: точечный нагрев, изменяющий свойства отражающего слоя | CD-диск, DVD, Blu-ray, HD DVD |
Магнитооптическая память (англ. magnetooptics storage) | показатель преломления участков информационного слоя | чтение: преломление и отражение луча лазера запись: точечный нагрев и электромагнитный импульс | CD-MO, Fujitsu DynaMO |
Магниторезистивная память с произвольным доступом (англ. Spin Torque Transfer Random Access Memory, STT-RAM) | магнитные домены | В STT-RAM электрическое поле воздействует на микромагниты, заставляя их менять направление магнитного поля (спин). В свою очередь направление магнитного поля (справа — налево или сверху — вниз) вызывает изменение в сопротивлении (логические 0 и 1). | MRAM |
Память с изменением фазового состояния | молекулы халькогенида | использует изменение фазового состояния халькогенида — вещества, способного под воздействием нагрева и электрических полей переходить из непроводящего аморфного состояния (1) в проводящее кристаллическое (0). В ней применены диоды вертикального типа и трехмерная кристаллическая структура. Не требует предварительного удаления старых данных перед записью новых, не требует электропитания для сохранения своего состояния [1] | PRAM |
Ёмкостная память (англ. capacitor storage) | молекулы халькогенида (chalcogenide) | подача электрического напряжения на обкладки | DRAM |
Разновидности полупроводниковой памяти
Разновидности магнитной памяти
- Память на магнитной ленте (англ. magnetic tape memory) — представляет собой пластиковую узкую ленту с магнитным покрытием и механизм с блоком головок записи-воспроизведения (БГЗВ). Лента намотана на бобину, и последовательно протягивается лентопротяжным механизмом (ЛПМ) возле БГЗВ. Запись производится перемагничиванием частиц магнитного слоя ленты при прохождении их возле зазора головки записи. Считывание записанной информации происходит при прохождении намагниченного ранее участка плёнки возле зазора головки воспроизведения.
- Память на магнитных дисках (англ. magnetic disk memory) — представляет собой круглый пластиковый диск с магнитным покрытием и механизм с БГЗВ. Данные при этом наносятся радиально, при вращении диска вокруг своей оси и радиальном сдвиге БГЗВ на шаг головки. Запись производится перемагничиванием частиц магнитного слоя диска при прохождении их возле зазора головки записи. Считывание записанной информации происходит при прохождении намагниченного ранее участка возле зазора головки воспроизведения.
- Память на магнитной проволоке (англ. plated wire memory) Использовалась в магнитофонах до магнитной ленты. В настоящее время по этому принципу конструируется большинство авиационных т. н. «чёрных ящиков» — данный носитель имеет наиболее высокую устойчивость к внешним воздействиям и высокую сохранность даже при повреждениях в аварийных ситуациях.
- Ферритовая память (англ. core storage) — ячейка представляет собой ферритовый сердечник, изменение состояния которого (перемагничивание) происходит при пропускании тока через намотанный на него проводник. В настоящее время имеет ограниченное применение, в основном в военной сфере.
Разновидности оптической памяти
Фазоинверсная память (англ. Phase Change Rewritable storage, PCR) — оптическая память, в которой рабочий (отражающий) слой выполнен из полимерного вещества, способного при нагреве менять фазовое состояние (кристаллическое↔аморфное) и отражающие характеристики в зависимости от режима нагрева. Применяется в перезаписываемых оптических дисках (CD-RW, DVD-RW).
Аппаратные средства защиты информации в микропроцессоре
Если в памяти одновременно могут находиться несколько независимых программ, необходимы специальные меры по предотвращению или ограничению обращений одной программы к областям памяти, используемым другими программами. Программы могут содержать такие ошибки, которые, если этому не воспрепятствовать, приводят к искажению информации, принадлежащей другим программам. Последствия таких ошибок особенно опасны, если разрушению подвергнутся программы операционной системы. Другими словами, надо исключить несанкционированное воздействие программы пользователя на работу программ других пользователей и программ операционной системы.
Чтобы воспрепятствовать разрушению одних программ другими, достаточно защитить область памяти данной программы от попыток записи в нее со стороны других программ, а в некоторых случаях и своей программы ( защита от записи ), при этом допускается обращение других программ к этой области памяти для считывания данных.
В других случаях, например, при ограничениях на доступ к информации, хранящейся в системе, необходимо иметь возможность запрещать другим программам производить как запись , так и считывание в данной области памяти. Такая защита от записи и считывания помогает отладке программы, при этом осуществляется контроль каждого случая выхода за область памяти своей программы.
Для облегчения отладки программ желательно выявлять и такие характерные ошибки в программах, как попытки использования данных вместо команд или команд вместо данных в собственной программе, хотя эти ошибки могут и не разрушать информацию.
Средства защиты памяти должны предотвращать:
- неразрешенное взаимодействие пользователей друг с другом;
- несанкционированный доступ пользователей к данным;
- повреждение программ и данных из-за ошибок в программах;
- намеренные попытки разрушить целостность системы ;
- случайные искажения данных.
Средства защиты микропроцессора делятся на 2 группы:
- защиту при управлении памятью и
- защиту по привилегиям.
Средства управления памятью обнаруживают большинство программных ошибок.
До загрузки селектора в сегментный регистр и кэширования дескриптора осуществляется несколько контро-льных проверок: процессор проверяет, что поле Index селектора находится в пределах таблицы, определяемой его битом TI ;
- при загрузке селектора в сегментный регистр данных ( DS , ES , FS , GS ) тип дескриптора должен разрешать считывание из сегмента.
Только выполняемые сегменты для этих регистров не допускаются, но сегменты с разрешенными операциями выполнения/считывания допустимы;
Если хотя бы одна проверка дала отрицательный результат, то формируется особый случай и загрузка селектора не производится.
После загрузки селектора при фактическом обращении к памяти процессор контролирует, чтобы запрашиваемая операция (чтение/ запись )для этого сегмента была разрешена. На этом этапе обнаруживаются и отвергаются попытки записи в сегмент кода или в только считываемые сегменты данных, а также считывание из сегмента кода, для которого разрешено только выполнение. Здесь же проводится проверка превышения сформированного смещения в сегменте длины сегмента, указанной в поле предела дескриптора. Такие ситуации невозможно выявить при загрузке селектора.
Защита по привилегиям фиксирует более тонкие ошибки и намеренные попытки нарушить целостность системы .
Под привилегиями понимается свойство, определяющее, какие операции и обращения к памяти разрешается производить процессору при выполнении текущей задачи.
На аппаратном уровне в процессоре поддерживаются 4 уровня привилегий. Распознаваемым процессором объектам назначается значение от 0 до 3, причем 0 соответствует высшему, а 3 - низшему уровню привилегий. С помощью указания уровня привилегий и правил защиты обеспечивается управляемый доступ к процедурам и данным операционной системы и других задач.
Привилегии устанавливаются значениями соответствующих полей в следующих основных системных объектах микропроцессора:
- DPL - уровень привилегий сегмента (находится в байте доступа дескриптора сегмента);
- RPL - биты селектора, хранящегося в сегментном регистре ;
текущий уровень привилегий программы CPL задается полем RPL селектора, хранящегося в сегментном регистре CS ;
Так как число программ, которые могут выполняться на более высоком уровне привилегий, уменьшается к уровню 0 и так как программы уровня 0 действуют как ядро системы, уровни привилегий обычно изображаются в виде четырех колец защиты ( Protection Rings ) (рис. 5.1).
Типовое распределение программ по кольцам защиты выглядит следующим образом:
- уровень 0: ядро ОС, обеспечивающее инициализацию работы, управление доступом к памяти, защиту и ряд других жизненно важных функций, нарушение которых полностью выводит из строя процессор;
- уровень 1: основная часть программ ОС (утилиты);
- уровень 2: служебные программы ОС (драйверы, СУБД, специализированные подсистемы программирования и т. д.);
- уровень 3: прикладные программы пользователя.
Аппаратные средства процессора, работающего в защищенном режиме, постоянно контролируют, что текущая программа достаточно привилегированна для того, чтобы:
- выполнять некоторые команды, называемые привилегированными;
- выполнять операции ввода/вывода на том или ином внешнем устройстве;
- обращаться к данным других программ;
- передавать управление внешнему (по отношению к самой программе) коду командами межсегментной передачи управления.
Привилегированные команды - это те команды, которые влияют на механизмы управления памятью, защиты и некоторые другие жизненно важные функции. Это, например, команды загрузки таблиц дескрипторов GDT , IDT , LDT , команды обмена с регистрами управления CRi. Они могут выполняться только программами, имеющими наивысший (нулевой)
уровень привилегий. Это приводит к тому, что простую незащищенную систему можно целиком реализовать только в кольце 0, так как в других кольцах защиты не будут доступны все команды.
Операции ввода/вывода разрешено выполнять программам, уровень привилегий которых не ниже значения, установленного в поле IOPL регистра флагов. То есть должно выполняться соотношение: CPL IOPL .
Обращение к данным других программ разрешается только на своем и менее привилегированном уровнях защиты (рис. 5.2).
Передачи управления между программами ограничиваются только текущим кольцом защиты. В то же время в процессе выполнения любой программы необходимо обращаться к программам, находящимся на более высоком уровне привилегий, например, к драйверам или СУБД . Для этих целей используются специально установленные точки входа в эти программы (шлюзы). Передача управления на более низкий уровень привилегий осуществляется с помощью механизма подчиненных сегментов.
При передаче управления подчиненному сегменту действует правило: DPL >=max ( CPL , RPL ) . Однако при этом подчиненный код будет выполняться на том же уровне привилегий, что и вызвавший его код ( CPL не изменится). Ограничивая передачу управления в пределах одного кольца защиты, процессор предотвращает произвольное изменение уровней привилегий. Ели бы значение CPL можно было легко изменить, все остальные средства защиты по привилегиям потеряли бы смысл.
Компьютерная память (устройство хранения информации, запоминающее устройство) — часть вычислительной машины, физическое устройство или среда для хранения данных, используемых в вычислениях, в течение определённого времени. Память, как и центральный процессор, является неизменной частью компьютера с 1940-х. Память в вычислительных устройствах имеет иерархическую структуру и обычно предполагает использование нескольких запоминающих устройств, имеющих различные характеристики. В персональных компьютерах «памятью» часто называют один из её видов — динамическая память с произвольным доступом DRAM (Dynamic Random Access Memory), — которая в настоящее время используется в качестве ОЗУ персонального компьютера. Задачей компьютерной памяти является хранение в своих ячейках состояния внешнего воздействия, запись информации. Эти ячейки могут фиксировать самые разнообразные физические воздействия. Они функционально аналогичны обычному электромеханическому переключателю и информация в них записывается в виде двух чётко различимых состояний — 0 и 1 («выключено»/«включено»). Специальные механизмы обеспечивают доступ (считывание, произвольное или последовательное) к состоянию этих ячеек. Процесс доступа к памяти разбит на разделённые во времени процессы — операцию записи (сленг. прошивка, в случае записи ПЗУ) и операцию чтения, во многих случаях эти операции происходят под управлением отдельного специализированного устройства — контроллера памяти. Также различают операцию стирания памяти — занесение (запись) в ячейки памяти одинаковых значений, обычно 0016 или FF16. Наиболее известные запоминающие устройства, используемые в персональных компьютерах: модули оперативной памяти (ОЗУ), жёсткие диски(винчестеры), дискеты (гибкие магнитные диски), CD- или DVD-диски, а также устройства флеш-памяти.
Функции памяти
Компьютерная память обеспечивает поддержку одной из функций современного компьютера, — способность длительного хранения информации. Вместе с центральным процессором запоминающее устройство являются ключевыми звеньями так называемой архитектуры фон Неймана, — принципа, заложенного в основу большинства современных компьютеров общего назначения. Первые компьютеры использовали запоминающие устройства исключительно для хранения обрабатываемых данных. Их программы реализовывались на аппаратном уровне в виде жёстко заданных выполняемых последовательностей. Любое перепрограммирование требовало огромного объёма ручной работы по подготовке новой документации, перекоммутации, перестройки блоков и устройств и т. д. Использование архитектуры фон Неймана, предусматривающей хранение компьютерных программ и данных в общей памяти, коренным образом переменило ситуацию. Любая информация может быть измерена в битах и потому, независимо от того, на каких физических принципах и в какой системе счисления функционирует цифровой компьютер (двоичной, троичной, десятичной и т. п.), числа, текстовая информация, изображения, звук, видео и другие виды данных можно представить последовательностями битовых строк или двоичными числами. Это позволяет компьютеру манипулировать данными при условии достаточной ёмкости системы хранения (например, для хранения текста романа среднего размера необходимо около одного мегабайта). К настоящему времени создано множество устройств, предназначенных для хранения данных, основанных на использовании самых разных физических эффектов. Универсального решения не существует, у каждого имеются свои достоинства и свои недостатки, поэтому компьютерные системы обычно оснащаются несколькими видами систем хранения, основные свойства которых обуславливают их использование и назначение.
Метод граничных регисторов
Идея метода состоит в том, что вводят два граничных регистра, указывающих верхнюю и нижнюю границы области памяти, куда программа имеет право доступа.
При каждом обращении к памяти проверяется, находится ли используемый адрес в установленных границах. При выходе за границы обращение к памяти подавляется и формируется запрос прерывания, передающий управление операционной системе. Содержание граничных регистров устанавливается операционной системой перед тем, как для очередной целевой программы начнется активный цикл. Если для динамического распределения памяти используется базовый регистр, то он одновременно определяет и нижнюю границу. Верхняя граница подсчитывается операционной системой в соответствии с длиной программы в ОП. Преимущество данного способа защиты памяти состоит в том, что он позволяет защищать области памяти произвольной длины. Кроме того, блок защиты достаточно прост, а его функционирование не приводит к значительным временным затратам. Однако необходимость размещения программ в областях памяти с последовательными номерами ячеек и ограниченных двумя граничными адресами существенно снижает возможности программирования и даже эффективность работы ЭВМ. Поэтому способ защиты памяти по граничным адресам в настоящее время применяется редко, при статическом распределении памяти, когда для каждой из параллельно выполняемых рабочих программ заранее (до начала их выполнения) отводится определенная область памяти. Реализация способа защиты памяти предполагает разделение основной памяти на блоки, каждому из которых ставится в соответствие некоторый ключ защиты памяти. Каждой действующей программе ставится в соответствие ключ защиты, который имеет ту же длину, что и ключ защиты памяти. Если эти ключи совпадают или ключ защиты памяти равен нулю, та использование данного блока памяти разрешается. В противном случае использование памяти запрещено и вырабатывается сигнал прерывания программы. В ключе защиты памяти часто предусматривается бит защиты памяти при выборке. Если этот бит равен нулю, то защита действует только при записи в память. Если же бит защиты при выборке равен единице, защита действует при операции выборки так же, как и при записи.
Содержание
Организация защиты памяти в ЭВМ
При мультипрограммном режиме работы ЭВМ в ее памяти одновременно могут находиться несколько независимых программ. Поэтому необходимы специальные меры по предотвращению или ограничению обращений одной программы к областям памяти, используемым другими программами. Программы могут также содержать ошибки, которые, если этому не воспрепятствовать, приводят к искажению информации, принадлежащей другим программам. Последствия таких ошибок особенно опасны, если разрушению подвергнутся программы операционной системы. Другими словами, надо исключить воздействие программы пользователя на работу программ других пользователей и программ операционной системы. Следует защищать и сами программы от находящихся в них возможных ошибок.
Таким образом, средства защиты памяти должны предотвращать 2
- неразрешенное взаимодействие пользователей друг с другом,
- несанкционированный доступ пользователей к данным,
- повреждение программ и данных из-за ошибок в программах,
- намеренные попытки разрушить целостность системы ,
- использование информации в памяти не в соответствии с ее функциональным назначением.
Чтобы воспрепятствовать разрушению одних программ другими, достаточно защитить область памяти данной программы от попыток записи в нее со стороны других программ, а в некоторых случаях и своей программы ( защита от записи ), при этом допускается обращение других программ к этой области памяти для считывания данных.
В других случаях, например при ограничениях на доступ к информации, хранящейся в системе, необходимо запрещать другим программам любое обращение к некоторой области памяти как на запись , так и на считывание. Такая защита от записи и считывания помогает в отладке программы, при этом осуществляется контроль каждого случая обращения за область памяти своей программы.
Для облегчения отладки программ желательно выявлять и такие характерные ошибки в программах, как попытки использования данных вместо команд или команд вместо данных в собственной программе, хотя эти ошибки могут и не разрушать информацию (несоответствие функционального использования информации).
Если нарушается защита памяти , исполнение программы приостанавливается и вырабатывается запрос прерывания по нарушению защиты памяти .
Защита от вторжения программ в чужие области памяти может быть организована различными методами. Но при любом подходе реализация защиты не должна заметно снижать производительность компьютера и требовать слишком больших аппаратурных затрат.
Методы защиты базируются на некоторых классических подходах, которые получили свое развитие в архитектуре современных ЭВМ. К таким методам можно отнести защиту отдельных ячеек, метод граничных регистров , метод ключей защиты [ 7 ] .
Защита отдельных ячеек памяти организуется в ЭВМ, предназначенных для работы в системах управления, где необходимо обеспечить возможность отладки новых программ без нарушения функционирования находящихся в памяти рабочих программ, управляющих технологическим процессом. Это может быть достигнуто выделением в каждой ячейке памяти специального "разряда защиты". Установка этого разряда в "1" запрещает производить запись в данную ячейку, что обеспечивает сохранение рабочих программ. Недостаток такого подхода - большая избыточность в кодировании информации из-за излишне мелкого уровня защищаемого объекта ( ячейка ).
В системах с мультипрограммной обработкой целесообразно организовывать защиту на уровне блоков памяти, выделяемых программам, а не отдельных ячеек.
Метод граничных регистров (рис. 17.1) заключается во введении двух граничных регистров, указывающих верхнюю и нижнюю границы области памяти, куда программа имеет право доступа .
При каждом обращении к памяти проверяется, находится ли используемый адрес в установленных границах. При выходе за границы обращение к памяти не производится, а формируется запрос прерывания , передающий управление операционной системе. Содержание граничных регистров устанавливается операционной системой при загрузке программы в память .
Модификация этого метода заключается в том, что один регистр используется для указания адреса начала защищаемой области, а другой содержит длину этой области.
Метод граничных регистров , обладая несомненной простотой реализации, имеет и определенные недостатки. Основным из них является то, что этот метод поддерживает работу лишь с непрерывными областями памяти.
Метод ключей защиты, в отличие от предыдущего, позволяет реализовать доступ программы к областям памяти, организованным в виде отдельных модулей, не представляющих собой единый массив .
Память в логическом отношении делится на одинаковые блоки, например, страницы. Каждому блоку памяти ставится в соответствие код, называемый ключом защиты памяти, а каждой программе, принимающей участие в мультипрограммной обработке, присваивается код ключа программы. Доступ программы к данному блоку памяти для чтения и записи разрешен, если ключи совпадают (то есть данный блок памяти относится к данной программе) или один из них имеет код 0 (код 0 присваивается программам операционной системы и блокам памяти, к которым имеют доступ все программы: общие данные, совместно используемые подпрограммы и т. п.). Коды ключей защиты блоков памяти и ключей программ устанавливаются операционной системой.
В ключе защиты памяти предусматривается дополнительный разряд режима защиты. Защита действует только при попытке записи в блок, если в этом разряде стоит 0, и при любом обращении к блоку, если стоит 1. Коды ключей защиты памяти хранятся в специальной памяти ключей защиты, более быстродействующей, чем оперативная память .
Функционирование этого механизма защиты памяти поясняется схемой на рис. 17.2.
При обращении к памяти группа старших разрядов адреса ОЗУ , соответствующая номеру блока, к которому производится обращение, используется как адрес для выборки из памяти ключей защиты кода ключа защиты, присвоенного операционной системой данному блоку. Схема анализа сравнивает ключ защиты блока памяти и ключ программы, находящийся в регистре слова состояния программы ( ССП ), и вырабатывает сигнал "Обращение разрешено" или сигнал " Прерывание по защите памяти". При этом учитываются значения режима обращения к ОЗУ ( запись или считывание), указываемого триггером режима обращения ТгРО, и режима защиты, установленного в разряде режима обращения (РРО) ключа защиты памяти .
Аннотация: Цель лекции: рассмотреть основные механизмы защиты памяти, поддерживаемые аппаратурой микропроцессора.
Читайте также: