Билет №14. Ядро в привилегированном режиме
Для надежного управления ходом выполнения приложений операционная сис¬тема должна иметь по отношению к приложениям определенные привилегии. Иначе некорректно работающее приложение может вмешаться в работу ОС и, например, разрушить часть ее кодов. Все усилия разработчиков операционной системы окажутся напрасными, если их решения воплощены в незащищенные от приложений модули системы, какими бы элегантными и эффективными эти решения ни были. Операционная система должна обладать исключительными полномочиями также для того, чтобы играть роль арбитра в споре приложений за ресурсы компьютера в мультипрограммном режиме. Ни одно приложение не должно иметь возможности без ведома ОС получать дополнительную область памяти, занимать процессор дольше разрешенного операционной системой периода времени, непосредственно управлять совместно используемыми внешни¬ми устройствами.
Обеспечить привилегии операционной системе невозможно без специальных средств аппаратной поддержки. Аппаратура компьютера должна поддерживать как минимум два режима работы — пользовательский режим (user mode) и приви¬легированный режим, который также называют режимом ядра (kernel mode), или режимом супервизора (supervisor mode). Подразумевается, что операционная сис¬тема или некоторые ее части работают в привилегированном режиме, а приложе-ния — в пользовательском режиме.
Так как ядро выполняет все основные функции ОС, то чаще всего именно ядро становится той частью ОС, которая работает в привилегированном режиме (рис. 3.3). Иногда это свойство — работа в привилегированном режиме — служит основным определением понятия «ядро».
Рис. 3.3. Архитектура операционной системы с ядром в привилегированном режиме
Приложения ставятся в подчиненное положение за счет запрета выполнения в пользовательском режиме некоторых критичных команд, связанных с переклю¬чением процессора с задачи на задачу, управлением устройствами ввода-вывода, доступом к механизмам распределения и защиты памяти. Выполнение некото¬рых инструкций в пользовательском режиме запрещается безусловно (очевидно, что к таким инструкциям относится инструкция перехода в привилегированный режим), тогда как другие запрещается выполнять только при определенных ус¬ловиях. Например, инструкции ввода-вывода могут быть запрещены приложе¬ниям при доступе к контроллеру жесткого диска, который хранит данные, общие для ОС и всех приложений, но разрешены при доступе к последовательному порту, который выделен в монопольное владение для определенного приложе¬ния. Важно, что условия разрешения выполнения критичных инструкций нахо¬дятся под полным контролем ОС и этот контроль обеспечивается за счет набора инструкций, безусловно запрещенных для пользовательского режима.
Аналогичным образом обеспечиваются привилегии ОС при доступе к памяти. Например, выполнение инструкции доступа к памяти для приложения разреша¬ется, если инструкция обращается к области памяти, отведенной данному прило¬жению операционной системой, и запрещается при обращении к областям памя¬ти, занимаемым ОС или другими приложениями. Полный контроль ОС над доступом к памяти достигается за счет того, что инструкция или инструкции кон¬фигурирования механизмов защиты памяти (например, изменения ключей за¬щиты памяти в мэйнфреймах IBM или указателя таблицы дескрипторов памяти в процессорах Pentium) разрешается выполнять только в привилегированном режиме.
Очень важно, что механизмы защиты памяти используются операционной сис¬темой не только для защиты своих областей памяти от приложений, но и для за¬щиты областей памяти, выделенных ОС какому-либо приложению, от осталь¬ных приложений. Говорят, что каждое приложение работает в своем адресном пространстве. Это свойство позволяет локализовать некорректно работающее приложение в собственной области памяти, так что его ошибки не оказывают влияния на остальные приложения и операционную систему.
Между количеством уровней привилегий, реализуемых аппаратно, и количест¬вом уровней привилегий, поддерживаемых ОС, нет прямого соответствия. Так, на базе четырех уровней, обеспечиваемых процессорами компании Intel, опера-ционная система OS/2 строит трехуровневую систему привилегий, а операцион¬ные системы Windows NT, UNIX и некоторые другие ограничиваются двух¬уровневой системой.
С другой стороны, если аппаратура поддерживает хотя бы два уровня привиле¬гий, то ОС может на этой основе создать программным способом сколь угодно развитую систему защиты.
Эта система может, например, поддерживать несколько уровней привилегий, обра¬зующих иерархию. Наличие нескольких уровней привилегий позволяет более тонко распределять полномочия как между модулями операционной системы, так и между самими приложениями. Появление внутри операционной системы более привилегированных и менее привилегированных частей позволяет повы¬сить устойчивость ОС к внутренним ошибкам программных кодов, так как такие ошибки будут распространяться только внутри модулей с определенным уров¬нем привилегий. Дифференциация привилегий в среде прикладных модулей по¬зволяет строить сложные прикладные комплексы, в которых часть более при¬вилегированных модулей может, например, получать доступ к данным менее привилегированных модулей и управлять их выполнением.
На основе двух режимов привилегий процессора ОС может построить сложную систему индивидуальной защиты ресурсов, примером которой является типич¬ная система защиты файлов и каталогов. Такая система позволяет задать для любого пользователя определенные права доступа к каждому из файлов и ката-логов.
Повышение устойчивости операционной системы, обеспечиваемое переходом ядра в привилегированный режим, достигается за счет некоторого замедления выполнения системных вызовов. Системный вызов привилегированного ядра инициирует переключение процессора из пользовательского режима в привиле¬гированный, а при возврате к приложению — переключение из привилегирован¬ного режима в пользовательский (рис. 3.4). Во всех типах процессоров из-за до-полнительной двукратной задержки переключения переход на процедуру со сменой режима выполняется медленнее, чем вызов процедуры без смены ре¬жима.
Рис. 3.4. Смена режимов при выполнении системного вызова к привилегированному ядру
Архитектура ОС, основанная на привилегированном ядре и приложениях поль¬зовательского режима, стала, по существу, классической. Ее используют многие популярные операционные системы, в том числе многочисленные версии UNIX, VAX VMS, IBM OS/390, OS/2, и с определенными модификациями — Win-dows NT.
В некоторых случаях разработчики ОС отступают от этого классического вари¬анта архитектуры, организуя работу ядра и приложений в одном и том же ре¬жиме. Так, известная специализированная операционная система NetWare компании Novell использует привилегированный режим процессоров Intel x86/ Pentium как для работы ядра, так и для работы своих специфических приложе¬ний — загружаемых модулей NLM (рис. 3.5). При таком построении ОС обра¬щения приложений к ядру выполняются быстрее, так как нет переключения ре-жимов, однако при этом отсутствует надежная аппаратная защита памяти, занимаемой модулями ОС, от некорректно работающего приложения. Разра¬ботчики NetWare пошли на такое потенциальное снижение надежности своей операционной системы, поскольку ограниченный набор ее специализирован¬ных приложений позволяет компенсировать этот архитектурный недостаток за счет тщательной отладки каждого приложения.
Рис. 3.5. Упрощенная архитектура операционной системы NetWare
В одном режиме работают также ядро и приложения тех операционных систем, которые разработаны для процессоров, вообще не поддерживающих привилеги¬рованного режима работы. Наиболее популярным процессором такого типа был процессор Intel 8088/86, послуживший основой для персональных компьютеров компании IBM. Операционная система MS-DOS, разработанная компанией Mic¬rosoft для этих компьютеров, состояла из двух модулей msdos.sys и io.sys, состав-лявших ядро системы (хотя название «ядро» для этих модулей не употребля-лось, по своей сути они им являлись), к которым с системными вызовами обращались командный интерпретатор command.com, системные утилиты и при¬ложения. Архитектура MS-DOS соответствует архитектуре ОС, приведенной на рис. 3.2. Некорректно написанные приложения вполне могли разрушить основ¬ные модули MS-DOS, что иногда и происходило, но область использования MS-DOS (и многих подобных ей ранних операционных систем для персональных компьютеров, таких как MSX, СР/М) и не предъявляла высоких требований к надежности ОС.