Адресация и многозадачность: Механизм защиты |
Программирование - Архитектура и система команд микропроцессоров x86 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Во всех процессорах, начиная с Intel286, при установке CR0.PE = 1 включается защищенный режим работы. В этом режиме помимо средств расширенной адресации и поддержки мультизадачности процессор обеспечивает многоуровневую систему защиты. Защита предотвращает несанкционированное использование данных, исполняемых кодов и портов ввода/вывода. Таким образом обеспечивается устойчивая и безопасная работа всех программ в многозадачной среде. В функции механизма защиты входят следующие действия, выполняемые всякий раз при обращении к данным или программам:
Для обеспечения работы всех этих функций механизм защиты использует специальные поля и флаги в различных регистрах и управляющих структурах данных:
Правильное заполнение и отслеживание значений этих полей и флагов позволяет создать многоуровневую, стойкую к ошибкам и злонамеренным действиям систему защиты программ и данных. Существует два уровня работы системы защиты: защита на уровне сегментов и защита на уровне страниц. Оба механизма не имеют каких-либо специальных средств для их включения/выключения и начинают функционировать сразу, как только процессор оказывается в соответствующем режиме работы (для защиты на уровне сегментов — в защищенном режиме, для страничной защиты — при включении страничного механизма). Защита на уровне сегментовЗащита на уровне сегментов является основной и обеспечивает наибольшее количество функций. Основа ее функционирования — это разделение уровней привилегий и отслеживание текущих прав доступа. Система защиты на уровне сегментов поддерживает четыре уровня привилегий (0, 1, 2, 3). Самым привилегированным уровнем считается нулевой уровень привилегий. На этом уровне предполагается исполнение программ ядра мультизадачных операционных систем (в простых ОС все программы, в т.ч. и пользовательские, могут исполняться на нулевом уровне привилегий, что равнозначно отсутствию защиты по уровням привилегий). Следующие уровни привилегий (1, 2, 3) предназначены для вспомогательных и пользовательских программ. Специальные дескрипторы — т.н. шлюзы, обеспечивают взаимодействие между задачами, выполняемыми на различных уровнях привилегий. Обычно все пользовательские программы работают на уровне привилегий 3, т.е. обладают наименьшим количеством прав доступа к различным компонентам ОС и областям памяти. Для слежения за текущим уровнем привилегий (Current Privilege Level – CPL) и разграничения прав доступа предназначены поля DPL в дескрипторах сегментов и RPL в селекторах сегментов. Текущий уровень привилегий CPL соответствует уровню привилегий текущего сегмента кода и может быть считан из его селектора в регистре CS. Каждый раз при обращении к командам и данным процессор, опираясь на значение CPL, проводит проверку допустимости того или иного действия. В случае несоответствия запрошенного действия правам выполняемой программы, процессор генерирует специальное прерывание #GP (ошибка общей защиты), и далее разрешение возникшей проблемы ложится на обработчик этого прерывания (который, должен функционировать на самом привилегированном уровне). Подробно все проводимые проверки и действия механизма сегментной защиты при выполнении тех или иных команд приведены в описаниях каждой команды. Функциональное назначение и некоторые аспекты использования всех флагов и полей, задействованных механизмом защиты, приведены при описании соответствующих регистров и структур данных. Защита на уровне страницМеханизм страничной защиты введен в процессорах начиная с Intel386 и работает поверх всех средств сегментной защиты. Он включается в работу при инициализации страничного механизма и обеспечивает:
Его работа основана на специальных полях U/S и W/R в элементах таблиц страничных преобразований. Поле U/S определяет права доступа для соответствующей страницы (страниц):
Процессор защищает страницы супервизора от доступа к ним из программ с привилегиями пользователя. То есть происходит расширение механизма сегментной защиты на страничную схему. Программы с текущим уровнем привилегий Поле W/R предназначено для установки защиты пользовательских страниц от записи. Причем в зависимости от текущего значения флага CR0.WP пользовательские страницы могут быть защищены и от записи программами супервизора, а не только от пользовательских программ. Поля U/S и W/R имеются и в элементах каталога страниц и в элементах таблицы страниц. Поэтому возможно задание комбинированных условий защиты для различных страниц.
Таблица 2.6. Комбинация защиты в каталоге и в таблице страниц
Значения флагов: U – пользователь (U/S = 1); S – супервизор (U/S = 0); R – только чтение (R/W = 0); W– чтение/запись (R/W = 1) * Если CR0.WP = 0, то страница защищена от записи и возможно только ее
чтение (R).
Нарушение страничной защиты приводит к генерации страничной ошибки (#PF). Механизм страничной защиты не может быть использован для переопределения уровней сегментной защиты. То есть, если сегмент задан как защищенный от записи, то помещение его в страницу разрешенную для записи не откроет возможности записи в сегмент. Все проверки сегментной защиты производятся до проверки страничной защиты, так что если будет обнаружена ошибка еще на сегментном уровне, то произойдет генерация ошибки общей защиты (#GP).
|
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru