В чем состоят отличия в работе процессора в привилегированном и пользовательском режимах
Для надежного управления ходом выполнения приложений операционная система должна иметь по отношению к приложениям определенные привилегии. Иначе некорректно работающее приложение может вмешаться в работу ОС и, например, разрушить часть ее кодов. Операционная система должна обладать исключительными полномочиями также для того, чтобы играть роль арбитра в споре приложений за ресурсы компьютера в мультипрограммном режиме. Ни одно приложение не должно иметь возможности без ведома ОС получать дополнительную область памяти, занимать процессор дольше разрешенного операционной системой периода времени, непосредственно управлять совместно используемыми внешними устройствами.
Обеспечить привилегии операционной системе невозможно без специальных средств аппаратной поддержки. Аппаратура компьютера должна поддерживать как минимум два режима работы - пользовательский режим (user mode) и привилегированный режим, который также называют режимом ядра (kernel mode) или режимом супервизора (supervisor mode). Подразумевается, что операционная система или некоторые ее части работают в привилегированном режиме, а приложения - в пользовательском режиме.
Так как ядро выполняет все основные функции ОС, то чаще всего именно ядро становится той частью ОС, которая работает в привилегированном режиме. Иногда это свойство - работа в привилегированном режиме - служит основным определением понятия «ядро».
Приложения ставятся в подчиненное положение за счет запрета выполнения в пользовательском режиме некоторых критичных команд, связанных с переключением процессора с задачи на задачу, управлением устройствами ввода-вывода, доступом к механизмам распределения и защиты памяти. Выполнение некоторых инструкций в пользовательском режиме запрещается безусловно (очевидно, что к таким инструкциям относится инструкция перехода в привилегированный режим), тогда как другие запрещается выполнять только при определенных условиях. Важно, что условия разрешения выполнения критичных инструкций находятся под полным контролем ОС, и этот контроль обеспечивается за счет набора инструкций, безусловно запрещенных для пользовательского режима.
Аналогичным образом обеспечиваются привилегии ОС при доступе к памяти. Например, выполнение инструкции доступа к памяти для приложения разрешается, если инструкция обращается к области памяти, отведенной данному приложению операционной системой, и запрещается при обращении к областям памяти, занимаемым ОС или другими приложениями. Полный контроль ОС над доступом к памяти достигается за счет того, что инструкции конфигурирования механизмов защиты памяти разрешается выполнять только в привилегированном режиме.
Очень важно, что механизмы защиты памяти используются операционной системой не только для защиты своих областей памяти от приложений, но и для защиты областей памяти, выделенных ОС какому-либо приложению, от остальных приложений. Говорят, что каждое приложение работает в своем адресном пространстве. Это свойство позволяет локализовать некорректно работающее приложение в собственной области памяти, так что его ошибки не оказывают влияния на остальные приложения и операционную систему. Между количеством уровней привилегий, реализуемых аппаратно, и количеством уровней привилегий, поддерживаемых ОС, нет прямого соответствия. Так, на базе четырех уровней, обеспечиваемых процессорами компании Intel, операционные системы Windows NT, UNIX и некоторые другие ограничиваются двухуровневой системой.
С другой стороны, если аппаратура поддерживает хотя бы два уровня привилегий, то ОС может на этой основе создать программным способом сколь угодно развитую систему защиты. На основе двух режимов привилегий процессора ОС может построить сложную систему индивидуальной защиты ресурсов, примером которой является типичная система защиты файлов и каталогов. Такая система позволяет задать для любого пользователя определенные права доступа к каждому из файлов и каталогов.
Отметим, что повышение устойчивости операционной системы, обеспечиваемое переходом ядра в привилегированный режим, достигается за счет некоторого замедления выполнения системных вызовов. Системный вызов привилегированного ядра инициирует переключение процессора из пользовательского режима в привилегированный, а при возврате к приложению - переключение из привилегированного режима в пользовательский (рис. 3.2). Во всех типах процессоров из-за дополнительной двукратной задержки переключения переход на процедуру со сменой режима выполняется медленнее, чем вызов процедуры без смены режима.
Рис. 3. 2. Смена режимов при выполнении системного вызова
к привилегированному ядру
Архитектура ОС, основанная на привилегированном ядре и приложениях пользовательского режима, стала, по существу, классической. Ее используют многие популярные операционные системы, в том числе многочисленные версии UNIX, VAX VMS, IBM OS/390, OS/2, и с определенными модификациями - Windows NT.
В некоторых случаях разработчики ОС отступают от этого класси-ческого варианта архитектуры, организуя работу ядра и приложений в одном и том же режиме. Так, известная специализированная операционная система NetWare компании Novell использует привилегированный режим процессоров Intel x86/ Pentium как для работы ядра, так и для работы своих специфических приложений – загружаемых модулей NLM. При таком построении ОС обращения приложений к ядру выполняются быстрее, так как нет переключения режимов, однако при этом отсутствует надежная аппаратная защита памяти, занимаемой модулями ОС, от некорректно работающего приложения. Разработчики NetWare пошли на такое потен-циальное снижение надежности своей операционной системы, поскольку ограниченный набор ее специализированных приложений позволяет компенсировать этот архитектурный недостаток за счет тщательной отладки каждого приложения.
Многослойная структура ОС
Вычислительную систему, работающую под управлением ОС на основе ядра, можно рассматривать как систему, состоящую из трех иерархически расположенных слоев: нижний слой образует аппаратура, промежуточный - ядро, а утилиты, обрабатывающие программы и приложения, составляют верхний слой системы (рис. 3. 3).
Рис.3. 3. Трехслойная схема вычислительной системы
Слоистую структуру вычислительной системы принято изображать в виде системы концентрических окружностей, иллюстрируя тот факт, что каждый слой может взаимодействовать только со смежными слоями. Действительно, при такой организации ОС приложения не могут непосредственно взаимодействовать с аппаратурой, а только через слой ядра.
Поскольку ядро представляет собой сложный многофункциональный комплекс, то многослойный подход обычно распространяется и на структуру ядра.
Ядро может состоять из следующих слоев (рис. 3. 4.):
Средства аппаратной поддержки |
Машинно-зависимые компоненты ядра |
Базовые механизмы ядра |
Менеджеры ресурсов |
Интерфейс системных вызовов |
Рис3. 4. Структура ядра
Средства аппаратной поддержки ОС. До сих пор об операционной системе говорилось как о комплексе программ, но часть функций ОС может выполняться и аппаратными средствами. Поэтому иногда можно встретить определение операционной системы как совокупности программных и аппаратных средств, что и отражено на рис. 3. 3. К операционной системе относят, естественно, не все аппаратные устройства компьютера, а только средства аппаратной поддержки ОС, то есть те, которые прямо участвуют в организации вычислительных процессов: средства поддержки привилегированного режима, систему прерываний, средства переключения контекстов процессов, средства защиты областей памяти и т. п.
Машинно-зависимые компоненты ОС. Этот слой образуют программные модули, в которых отражается специфика аппаратной платформы компьютера. В идеале этот слой полностью экранирует вышележащие слои ядра от особенностей аппаратуры. Это позволяет разрабатывать вышележащие слои на основе машинно-независимых модулей, существующих в единственном экземпляре для всех типов аппаратных платформ, поддерживаемых данной ОС.
Базовые механизмы ядра. Этот слой выполняет наиболее примитивные операции ядра, такие, как программное переключение контекстов процессов, диспетчеризацию прерываний, перемещение страниц из памяти на диск и обратно и т. п. Модули данного слоя не принимают решений о распределении ресурсов - они только отрабатывают принятые «наверху» решения, что и дает повод называть их исполнительными механизмами для модулей верхних слоев. Например, решение о том, что в данный момент нужно прервать выполнение текущего процесса «А» и начать выполнение процесса «В», принимается менеджером процессов на вышележащем слое, а слою базовых механизмов передается только директива о том, что нужно выполнить переключение с контекста текущего процесса на контекст процесса «В».
Менеджеры ресурсов. Этот слой состоит из мощных функциональных модулей, реализующих стратегические задачи по управлению основными ресурсами вычислительной системы. Обычно на данном слое работают менеджеры (называемые также диспетчерами) процессов, ввода-вывода, файловой системы и оперативной памяти. Разбиение на менеджеры может быть и несколько иным, например, менеджер файловой системы иногда объединяют с менеджером ввода-вывода, а функции управления доступом пользователей к системе в целом и ее отдельным объектам поручают отдельному менеджеру безопасности. Каждый из менеджеров ведет учет свободных и используемых ресурсов определенного типа и планирует их распределение в соответствии с запросами приложений. Например, менеджер виртуальной памяти управляет перемещением страниц из оперативной памяти на диск и обратно. Для исполнения принятых решений менеджер обращается к нижележащему слою базовых механизмов с запросами о загрузке (выгрузке) конкретных страниц. Внутри слоя менеджеров существуют тесные взаимные связи, отражающие тот факт, что для выполнения процессу нужен доступ одновременно к нескольким ресурсам - процессору, области памяти, возможно, к определенному файлу или устройству ввода-вывода. Например, при создании процесса менеджер процессов обращается к менеджеру памяти, который должен выделить процессу определенную область памяти для его кодов и данных.
Интерфейс системных вызовов. Этот слой является самым верхним слоем ядра и взаимодействует непосредственно с приложениями и системными утилитами, образуя прикладной программный интерфейс операционной системы. Функции API, обслуживающие системные вызовы, предоставляют доступ к ресурсам системы в удобной и компактной форме, без указания деталей их физического расположения.
Приведенное разбиение ядра ОС на слои является достаточно условным. В реальной системе количество слоев и распределение функций между ними может быть и иным. В системах, предназначенных для аппаратных платформ одного типа, например ОС NetWare, слой машинно-зависимых модулей обычно не выделяется, сливаясь со слоем базовых механизмов и, частично, со слоем менеджеров ресурсов. Не всегда оформляются в отдельный слой базовые механизмы - в этом случае менеджеры ресурсов не только планируют использование ресурсов, но и самостоятельно реализуют свои планы.
Возможна и противоположная картина, когда ядро состоит из большего количества слоев. Например, менеджеры ресурсов, составляя определенный слой ядра, в свою очередь, могут обладать многослойной структурой. Прежде всего это относится к менеджеру ввода-вывода, нижний слой которого составляют драйверы устройств, например драйвер жесткого диска или драйвер сетевого адаптера, а верхние слои - драйверы файловых систем или протоколов сетевых служб, имеющие дело с логической организацией информации.
Способ взаимодействия слоев в реальной ОС также может отклоняться от описанной выше схемы. Для ускорения работы ядра в некоторых случаях происходит непосредственное обращение с верхнего слоя к функциям нижних слоев, минуя промежуточные.
Выбор количества слоев ядра является ответственным и сложным делом: увеличение числа слоев ведет к некоторому замедлению работы ядра за счет дополнительных накладных расходов на межслойное взаимодействие, а уменьшение числа слоев ухудшает расширяемость и логичность системы. Обычно операционные системы, прошедшие долгий путь эволюционного развития, например многие версии UNIX, имеют неупорядоченное ядро с небольшим числом четко выделенных слоев, а у сравнительно «молодых» операционных систем, таких, как Windows NT, ядро разделено на большее число слоев, и их взаимодействие формализовано в гораздо большей степени.
привилегированный режим — Режим операционной системы, при котором обеспечивается выполнение всех или части привилегированных команд. [Е. С. Алексеев, А. А. Мячев. Англо русский толковый словарь по системотехнике ЭВМ. Москва 1993] Тематики информационные технологии в целом EN… … Справочник технического переводчика
привилегированный режим — privilegijuotasis režimas statusas T sritis automatika atitikmenys: angl. master mode; privileged mode; trusted mode vok. privilegierter Betrieb, m; privilegierter Modus, m rus. привилегированный режим, m pranc. mode privilégié, m … Automatikos terminų žodynas
Режим супервизора — привилегированный режим работы процессора, как правило используемый для выполнения ядра операционной системы. В данном режиме работы процессора доступны привилегированные операции, как то операции ввода вывода к периферийным устройствам,… … Википедия
РЕЖИМ НАИБОЛЬШЕГО БЛАГОПРИЯТСТВОВАНИЯ — [англ. most favoured nation clause < most наиболее + favoured привилегированный, пользующийся преимуществом + nation нация + clause статья закона, оговорка к статье] экон. предоставление одной стороной другой стороне максимально возможных… … Словарь иностранных слов русского языка
ПРАВОВОЙ РЕЖИМ ИНОСТРАННЫХ ГРАЖДАН — порядок и характер регулирования правового положения иностранных граждан национальным законодательством страны. Существует несколько видов режимов: режим национального пребывания предоставление иностранным гражданам такого объема прав, свобод и… … Энциклопедический словарь «Конституционное право России»
Кольца защиты — Кольца привилегий архитектуры x86 в защищённом режиме Кольца защиты архитектура информационной безопасности и функциональной отказоустойчивости, реализующая аппаратное ра … Википедия
Mach — У этого термина существуют и другие значения, см. Мах. Необходимо проверить качество перевода и привести статью в соответствие со стилистическими правилами Википедии. Вы можете помочь улучшить эту статью … Википедия
Кольца защиты (безопасность) — Кольца привилегий архитектуры защищённом режиме Кольца защиты архитектура информационной безопасности и функциональной отказоустойчивости, реализующая аппаратное разделение системного и пользовательского уровней привилегий. Структуру привилегий… … Википедия
Кольцо 0 — Кольца привилегий архитектуры защищённом режиме Кольца защиты архитектура информационной безопасности и функциональной отказоустойчивости, реализующая аппаратное разделение системного и пользовательского уровней привилегий. Структуру привилегий… … Википедия
Кольцо защиты — Кольца привилегий архитектуры защищённом режиме Кольца защиты архитектура информационной безопасности и функциональной отказоустойчивости, реализующая аппаратное разделение системного и пользовательского уровней привилегий. Структуру привилегий… … Википедия
Иностранцы — Конституционн … Википедия
Основным характерным признаком ядра является то, что оно выполняется в привилегированном режиме.
Рассмотрим особенности этого режима.
Для обеспечения эффективного управления ресурсами компьютера ОС должна иметь определенные привилегии относительно прикладных программ. Надо, чтобы прикладные программы не вмешивались в работу ОС, и вместе с тем ОС должна иметь возможность вмешаться в работу любой программы, например для переключения процессора или решение конфликта в борьбе за ресурсы.
Для реализации таких привилегий нужна аппаратная поддержка: процессор должен поддерживать по крайней мере два режима работы - привилегированный (защищенный режим или режим ядра) и режим пользователя. Подразумевается, что ОС или некоторые её части работают в привелигерованном режиме, а прриложения –в пользовательском режиме.
В режиме пользователя недопустимы команды, которые являются критическими для работы системы (переключение задач, обращение к памяти за заданными границами, доступ к устройствам ввода-вывода и т.п.).
Рассмотрим, каким образом используются разные режимы процессора во время взаимодействия между ядром и прикладными программами.
После загрузки ядро включает процессор в привилегированный режим и получает полнейший контроль над компьютером. Каждое приложение запускается и выполняется в режиме пользователя, где оно не имеет доступа к ресурсам ядра и других программ.
Когда нужно выполнить действие, реализованное в ядре, приложение делает системный вызов. Ядро перехватывает его, включает процессор в привилегированный режим, выполняет действие, переключает процессор назад в режим пользователя и возвращает результат приложению.
Системный вызов выполняется медленнее чем вызов функции, реализованной в режиме пользователя, потому что процессор дважды переключается между режимами. Для повышения производительности в некоторых ОС часть функциональности реализована в режиме пользователя, поэтому для доступа к ней системные вызовы использовать не нужно.
Реализация архитектуры операционных систем
В реальных ОС обычно используют некоторую комбинацию подходов к реализации архитектуры ОС.
Монолитные системы
ОС, в которых все базовые функции сконцентрированы в ядре, называют монолитными системами.
В случае реализации монолитного ядра ОС становится производительнее (процессор не переключается между режимами во время взаимодействия между ее компонентами), но менее надежной (весь ее код выполняется в привилегированном режиме, и ошибка в каждом из компонентов будет критической).
Монолитность ядра не означает, что все его компоненты должны постоянно находиться в памяти. Современные ОС дают возможность динамично размещать в адресном пространстве ядра фрагменты кода (модуль ядра).
-простота разработки; -большой объем оперативной памяти занимаемый ОС;
-высокая скорость работы. -сбой какого либо модуля ОС приводит к сбою всей системы
Примеры: ОС с ядром UNIX такие как: LINUX, BSD
Системы с микроядром
Микроядро –это небольшая часть функций ядра, которая реализуется в привелегированном режиме и осуществляет связь между компонентами системы и выполняет базовое распределение ресурсов.
Суть микроядерной архитектуры состоит в следующем. В привилегированном режиме остается работать только очень небольшая часть ОС, называемая микроядром. Микроядро защищено от остальных частей ОС и приложений. В состав микроядра обычно входят машинно-зависимые модули, а также модули, выполняющие некоторые базовые функции ядра по управлению процессами, обработке прерываний, управлению виртуальной памятью и некоторые другие.
Другие функции ОС выполняются процессами режима пользователя (серверными процессами, серверами). Серверы могут отвечать за поддержку файловой системы, за работу с процессами, памятью и т.п..
Чтобы выполнить системный вызов, процесс (пользовательская программа) обращается к микроядру. Микроядро посылает серверу запрос, сервер выполняет работу и пересылает ответ назад, а микроядро переправляет его клиенту (рис. 1.2). Клиентами могут быть не только процессы пользователя, а и другие модули ОС.
Рис.1.2-Системный вызов в архитектуре с микроядром
Преимущества подхода системы с микроядром:
♦ небольшие размеры микроядра, которое упрощает его разработку и отладку;
♦ высокая надежность системы, вследствие того, что серверы работают в режиме пользователя и в них нет прямого доступа к аппаратному обеспечению;
Главным недостатком применения микроядра является снижения производительности. Вместо двух переключений режима процессора в случае системного вызова происходит четыре (два - во время обмена между клиентом и микроядром, два - между сервером и микроядром).
Примером применения архитектуры с микроядром является Windows NT версий 3.1 и 3.5, а также ОС реального времени QNX.
Создание полноценной прикладной среды, полностью совместимой со средой другой ОС, является достаточно сложной задачей, тесно связанной со структурой ОС. Существуют различные варианты построения множественных прикладных сред, отличающиеся как особенностями архитектурных решений, так и функциональными возможностями, обеспечивающими различную степень переносимости приложений.
Во многих версиях ОС UNIX транслятор прикладных сред реализуется в виде обычного приложения. В ОС, построенных с использованием микроядерной концепции, таких как, например, Windows NT или Workplace OS, прикладные среды выполняются в виде серверов пользовательского режима. А в OS/2 с ее более простой архитектурой средства организации прикладных сред встроены глубоко в ОС. Один из наиболее очевидных вариантов реализации множественных прикладных сред основывается на стандартной многоуровневой структуре ОС.
Рис. 3.13. Прикладные программные среды, транслирующие системные вызовы
К сожалению, поведение почти всех функций, составляющих API одной ОС, как правило, существенно отличается от поведения соответствующих функций другой.
В другом варианте реализации множественных прикладных сред ОС имеет несколько равноправных прикладных программных интерфейсов. В приведенном на рис. 3.14 примере ОС поддерживает приложения, написанные для OS1, OS2 и OS3. Для этого непосредственно в пространстве ядра системы размещены прикладные программные интерфейсы всех этих ОС: API OS1, API OS2 и API OS3. В этом варианте функции уровня API обращаются к функциям нижележащего уровня ОС, которые должны поддерживать все три в общем случае несовместимые прикладные среды.
В разных ОС по-разному осуществляется управление системным временем, используется разный формат времени дня, на основании собственных алгоритмов разделяется процессорное время и т. д. Функции каждого API реализуются ядром с учетом специфики соответствующей ОС, даже если они имеют аналогичное назначение. Например, как уже было сказано, функция создания процесса работает по-разному для приложения UNIX и приложения OS/2. Аналогично при завершении процесса ядру также необходимо определять, к какой ОС относится данный процесс. Если этот процесс был создан по запросу UNIX-приложения, то в ходе его завершения ядро должно послать родительскому процессу сигнал, как это делается в ОС UNIX. А по завершении процесса OS/2, ядро должно отметить, что идентификатор процесса не может быть повторно использован другим процессом OS/2. Для того чтобы ядро могло выбрать нужный вариант реализации системного вызова, каждый процесс должен передавать в ядро набор идентифицирующих характеристик.
Рис. 3.14.Реализация совместимости на основе нескольких равноправных API
Еще один способ построения множественных прикладных сред основан на микроядерном подходе. При этом очень важно отделить базовые, общие для всех прикладных сред, механизмы ОС от специфических для каждой из прикладных сред высокоуровневых функций, решающих стратегические задачи.
В соответствии с микроядерной архитектурой все функции ОС реализуются микроядром и серверами пользовательского режима. Важно, что каждая прикладная среда оформляется в виде отдельного сервера пользовательского режима и не включает базовых механизмов (рис. 3.15). Приложения, используя API, обращаются с системными вызовами к соответствующей прикладной среде через микроядро. Прикладная среда обрабатывает запрос, выполняет его (возможно, обращаясь для этого за помощью к базовым функциям микроядра) и отсылает приложению результат. В ходе выполнения запроса прикладной среде приходится, в свою очередь, обращаться к базовым механизмам ОС, реализуемым микроядром и другими серверами ОС.
Такому подходу к конструированию множественных прикладных сред присущи все достоинства и недостатки микроядерной архитектуры, в частности:
§ очень просто можно добавлять и исключать прикладные среды, что является следствием хорошей расширяемости микроядерных ОС;
§ надежность и стабильность выражаются в том, что при отказе одной из прикладных сред все остальные сохраняют работоспособность;
§ низкая производительность микроядерных ОС сказывается на скорости работы прикладных сред, а значит, и на скорости выполнения приложений.
Рис. 3.15. Микроядерный подход к реализации множественных прикладных сред
Создание в рамках одной ОС нескольких прикладных сред для выполнения приложений различных ОС представляет собой путь, который позволяет иметь единственную версию программы и переносить ее между операционными системами. Множественные прикладные среды обеспечивают совместимость на двоичном уровне данной ОС с приложениями, написанными для других ОС. В результате пользователи получают большую свободу выбора ОС и более легкий доступ к качественному программному обеспечению.
§ Простейшая структуризация ОС состоит в разделении всех компонентов ОС на модули, выполняющие основные функции ОС (ядро), и модули, выполняющие вспомогательные функции ОС. Вспомогательные модули ОС оформляются либо в виде приложений (утилиты и системные обрабатывающие программы), либо в виде библиотек процедур. Вспомогательные модули загружаются в оперативную память только на время выполнения своих функций, то есть являются транзитными. Модули ядра постоянно находятся в оперативной памяти, то есть являются резидентными.
§ При наличии аппаратной поддержки режимов с разными уровнями полномочий устойчивость ОС может быть повышена путем выполнения функций ядра в привилегированном режиме, а вспомогательных модулей ОС и приложений — в пользовательском. Это дает возможность защитить коды и данные ОС и приложений от несанкционированного доступа. ОС может выступать в роли арбитра в спорах приложений за ресурсы.
§ Ядро, являясь структурным элементом ОС, в свою очередь, может быть логически разложено на следующие слои (начиная с самого нижнего):
§ машинно-зависимые компоненты ОС;
§ базовые механизмы ядра;
§ интерфейс системных вызовов.
§ В многослойной системе каждый слой обслуживает вышележащий слой, выполняя для него некоторый набор функций, которые образуют межслойный интерфейс. На основе функций нижележащего слоя следующий вверх по иерархии слой строит свои функции — более сложные и более мощные, которые, в свою очередь, оказываются примитивами для создания еще более мощных функций вышележащего слоя. Многослойная организация ОС существенно упрощает разработку и модернизацию системы.
§ Любая ОС для решения своих задач взаимодействует с аппаратными средствами компьютера, а именно: средствами поддержки привилегированного режима и трансляции адресов, средствами переключения процессов и защиты областей памяти, системой прерываний и системным таймером. Это делает ОС машинно-зависимой, привязанной к определенной аппаратной платформе.
§ Переносимость ОС может быть достигнута при соблюдении следующих правил. Во-первых, большая часть кода должна быть написана на языке, трансляторы которого имеются на всех компьютерах, куда предполагается переносить систему. Во-вторых, объем машинно-зависимых частей кода, которые непосредственно взаимодействуют с аппаратными средствами, должен быть по возможности минимизирован. В-третьих, аппаратно-зависимый код должен быть надежно локализован в нескольких модулях.
§ Микроядерная архитектура является альтернативой классическому способу построения ОС, в соответствии с которым все основные функции ОС, составляющие многослойное ядро, выполняются в привилегированном режиме. В микроядерных ОС в привилегированном режиме остается работать только очень небольшая часть ОС, называемая микроядром. Все остальные высокоуровневые функции ядра оформляются в виде приложений, работающих в пользовательском режиме.
§ Микроядерные ОС удовлетворяют большинству требований, предъявляемых к современным ОС, обладая переносимостью, расширяемостью, надежностью и создавая хорошие предпосылки для поддержки распределенных приложений. За эти достоинства приходится платить снижением производительности, что является основным недостатком микроядерной архитектуры.
§ Прикладная программная среда — совокупность средств ОС, предназначенная для организации выполнения приложений, использующих определенную систему машинных команд, определенный тип API и определенный формат исполняемой программы. Каждая ОС создает как минимум одну прикладную программную среду. Проблема состоит в обеспечении совместимости нескольких программных сред в рамках одной ОС. При построении множественных прикладных сред используются различные архитектурные решения, концепции эмуляции двоичного кода, трансляции API.
Задачи и упражнения
1. Какие из приведенных ниже терминов являются синонимами?
2. Можно ли, анализируя двоичный код программы, сделать вывод о невозможности ее выполнения в пользовательском режиме?
3. В чем состоят отличия в работе процессора в привилегированном и пользовательском режимах?
4. В идеале микроядерная архитектура ОС требует размещения в микроядре только тех компонентов ОС, которые не могут выполняться в пользовательском режиме. Что заставляет разработчиков операционных систем отходить от этого принципа и расширять ядро за счет перенесения в него функций, которые могли бы быть реализованы в виде процессов-серверов?
5. Какие этапы включает разработка варианта мобильной ОС для новой аппаратной платформы?
6. Опишите порядок взаимодействия приложений с ОС, имеющей микроядерную архитектуру.
7. Какими этапами отличается выполнение системного вызова в микроядерной ОС и ОС с монолитным ядром?
8. Может ли программа, эмулируемая на «чужом» процессоре, выполняться быстрее, чем на «родном»?
Чтобы приложения не могли прочитать или изменить данные операционной системы, были предусмотрены разные режимы доступа к процессору.
Переключение из одного режима в другой
Пользовательские приложения могут переключаться из пользовательского режима в режим ядра используя специальные системные функции. Таким образом, для пользовательского потока нормально проводить часть времени в пользовательском режиме, а часть времени в режиме ядра. Более того, поскольку большая часть графической системы выполняется в режиме ядра, процессы приложений, интенсивно работающих с графикой, могут проводить в режиме ядра больше времени, чем в пользовательском режиме. Чтобы убедиться в этом, запустите Paint и понаблюдайте за распределением времени между пользовательским режимом и режимом ядра с помощью Process Explorer:
Process Explorer – Kernel time и User time
Наблюдение за переключениями в Системном мониторе
Запустите “Системный монитор“:
Удалите счетчик “по умолчанию” и добавьте следующие счетчики: объект «Процесс», два счетчика «% работы в пользовательском режиме» и «% работы в привилегированном режиме». Далее выберите процесс mspaint.
Порисовав немного в Paint увидим следующее:
Более современные приложения могут использовать новые технологии, например Direct2D и DirectComposition. Они выполняют большие объемы вычислений в пользовательском режиме и передают ядру только низкоуровневые данные. Таким образом сокращается время, расходуемое на переключение между пользовательским режимом и режимом ядра.
Режимы доступа к процессору
Приложения, которые запускает пользователь в системе, выполняются в пользовательском режиме. А системные службы и драйверы работают в режиме ядра. Такое разделение необходимо, чтобы пользовательские приложения не могли нарушить работу системы. Плохое приложение не должно сломать вам всю систему.
Хотя каждый процесс обладает собственным закрытым адресным пространством, всё что работает в режиме ядра использует единое адресное пространство. К адресному пространству ядра можно получить доступ только из режима ядра. Но к памяти пользовательского процесса можно получить доступ из любого режима. Дополнительно стоит отметить память, которая доступна только для чтения. Такая память недоступна на запись для кода из любого режима.
Память ядра и процессов
В режиме ядра работает часть операционной системы и драйверы. И все они могут вмешиваться в работу друг друга. И очень важно чтобы все компоненты работающие в этом режиме были тщательно спроектированы и протестированы. Любой некорректно написанный драйвер может повредить всю систему.
Именно по этой причине в Windows 2000 появился механизм цифровой подписи драйверов. Этот механизм запрещал установку не подписанных драйверов, но только для Plug and Play устройств.
Ужесточение политики работы со сторонними драйверами
В Windows 8.1 политика подписывания кода режима ядра требует, чтобы все драйверы устройств (а не только Plug and Play) подписывались криптографическим ключом, выданным одним из ведущих центров сертификации. Пользователям запретили установку не подписанных драйверов, даже с правами администратора. Но такое ограничение можно отключить вручную. В этом случае драйверы самоподписываются, а на обоях рабочего стола выводится надпись “Тестовый режим“.
windows 10 тестовый режим
В Windows Server 2016 операционная система действует еще радикальнее. Кроме требований EV простого аттестационного подписывания недостаточно. Чтобы драйвер загружался в серверной системе, он должен пройти жесткий процесс сертификации WHQL (Windows Hardware Quality Labs) в составе НСК (Hardware Compatibility Kit). Только драйверам с подписью WHQL разрешается загрузка в таких системах.
В целом сокращение количества сторонних драйверов, которым разрешается загрузка в режиме ядра, значительно повысило стабильность и безопасность системы.
Читайте также: