Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Решение задачи в защищенном режиме

Легко понять, что разделение доступа к данным невозможно без контроля над доступом к другим объектам системы, в первую очередь к оперативной памяти, физическим внешним устройствам и драйверам этих устройств. Без такого контроля все средства управления доступом к данным во внешней памяти оказываются бессмысленными, как запертая дверь в сарае без одной стены. Поэтому нельзя всерьез говорить о безопасности в системах, не разделяющих доступ задач к физической памяти, таких как DOS, MS Windows 3.x, Windows 95, MacOS и др.

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

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

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

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

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

Например, в PDP-11 системные вызовы реализуются через команду EMT - Emulate Trap (программное прерывание). Эта команда имеет 6-битовое поле операнда, которое, однако, не интерпретируется процессором. Пользовательская программа проталкивает параметры системного вызова в стек и исполняет EMT с операндом, равным коду исполняемого системного вызова. При этом вызывается обработчик прерывания по вектору 8.

Прерывание 8 обрабатывается диспетчером системных вызовов. Обработчики прерываний в PDP-11 всегда исполняются в системном режиме, поэтому при вызове диспетчера автоматически происходит переключение в режим ядра. Диспетчер извлекает из пользовательского стека адрес команды EMT и параметры. Затем он извлекает код команды EMT, анализирует ее операнд и в зависимости от результатов анализа вызывает соответствующую процедуру ядра. Для копирования параметров используются специальные команды доступа к пользовательскому адресному пространству: MFPI/MFPD (Move From Previous Instruction/Data - копировать из предыдущего [адресного пространства] команд/данных).

В RSX-11, использующей разделение памяти, fork-процесс драйвера все время имеет доступ к пользовательскому адресному пространству через команды MFPI/MFPD, поэтому не возникает необходимости копировать данные в системные буфера, как в Linux.

Несколько иная схема обмена данными используется в Windows NT и некоторых микроядерных системах: вместо прямого отображения пользовательских адресов в системные или специальных команд копирования между адресными пространствами используются небольшие (4 кбайта в случае NT) разделяемые буфера. Такое решение позволяет отчасти защитить пользовательские программы от ошибок в модулях ОС и упрощает синхронизацию доступа к разделяемым данным, но приводит к значительным накладным расходам.

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

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

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

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

Желание защитить ядро и пользовательские программы от ошибок в системных модулях вынуждает разработчиков современных процессоров усложнять структуру аппаратных привилегий. Некоторые процессоры, например семейство x86, предлагают несколько уровней привилегий в отличие от двух в модели пользователь/супервизор, но и они сохраняют «концентрическую» структуру привилегий, когда более привилегированный уровень автоматически получает доступ ко всем объектам предыдущего уровня. Таким образом, код, исполняющийся в нулевом кольце защиты, мало чем отличается по возможностям от кода супервизора в системах c двумя уровнями привилегий.

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

Описанная архитектура с различными вариациями используется в большинстве систем семейства Unix, OS/2, Windows NT, VAX/VMS-OpenVMS и ОС для больших компьютеров фирмы IBM: MVS, VM/ESA, OS/390. В совокупности эти системы образуют подавляющее большинство современных ОС общего назначения.

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

Поражают воображение заявления фирмы Microsoft по этому поводу. В одном из пресс-релизов, опубликованных еще до выпуска системы, официальные представители фирмы на полном серьезе утверждали, что на самом деле защищать надо лишь первые 64 килобайта адресного пространства, поскольку, по их измерениям (?!), 90 % ошибочных доступов приходятся именно на эти адреса. Комментарии излишни.

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

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

сительная сложность разделения памяти между задачами, что особенно заметно при разделении кода. Прослеживание множественных ссылок на разделяемую библиотеку подпрограмм приводит к снижению производительности алгоритмов подкачки и поиска жертвы, а также к более сложному управлению файлом подкачки. Из-за этого у систем с динамической сборкой (OS/2 и Windows NT) виртуальная память заметно менее эффективна, чем у систем семейства Unix, использующих статические загрузочные модули. Статические же загрузочные модули обеспечивают гораздо меньшую гибкость, чем динамическая сборка. Такой выбор между «бедным, но здоровым» и «богатым, но больным» трудно назвать привлекательным.

 

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

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

 

 


Выводы:

1) чтобы поддержать защищенный режим (ЗР), необходимо работать с таблицей дескрипторов;

2) можно работать с таблицей дескрипторов и не в явном режиме, а в виртуальном режиме (за счет распределителей памяти).

 

Начиная с i80386, появился следующий механизм для ЗР – TSS (Task Status Segment):

 
 

 

 


! В Pascal’е достаточно запоминать IP и CS (все остальное реализуется на уровне компилятора).

 

<== предыдущая лекция | следующая лекция ==>
Механизмы переключения контекстов | Void longjmp (jmp_buf, int val);
Поделиться с друзьями:


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


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



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




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