Понятия "пользовательский режим" и "режим ядра"
В этой главе рассматриваются ключевые архитектурные особенности и характеристики ОС Windows NT. Эти сведения необходимы для получения представления о назначении различных компонентов ОС, их взаимодействии друг с другом, а также для ознакомления с терминологией, используемой в данной книге. Кроме того, знание общей архитектуры ОС позволяет понять, какие возможности операционной системы могут задействовать средства защиты, расположенные на том или ином уровне архитектуры ОС.
Большое внимание в этой главе уделено модели драйвера, его структуре и характеристикам, а также взаимосвязи с другими драйверами и прикладными программами.
При обсуждении архитектуры ОС Windows NT постоянно используются понятия "режим пользователя" и "режим ядра", поэтому стоит определить, что это значит. Начнем с обсуждения разницы между пользовательским режимом и режимом ядра (user mode/kernel mode).
Пользовательский режим – наименее привилегированный режим, поддерживаемый NT; он не имеет прямого доступа к оборудованию и у него ограниченный доступ к памяти.
Режим ядра – привилегированный режим. Те части NT, которые исполняются в режиме ядра, такие как драйверы устройств и подсистемы типа Диспетчера Виртуальной Памяти, имеют прямой доступ ко всей аппаратуре и памяти.
Различия в работе программ пользовательского режима и режима ядра поддерживаются аппаратными средствами компьютера (а именно – процессором).
Большинство архитектур процессоров обеспечивают, по крайней мере, два аппаратных уровня привилегий. Аппаратный уровень привилегий процессора определяет возможное множество инструкций, которые может вызывать исполняемый в данный момент процессором код.
Хотя понятия "режим пользователя" и "режим ядра" часто используются для описания кода, на самом деле это уровни привилегий, ассоциированные с процессором.
Уровень привилегий накладывает три типа ограничений:
- возможность выполнения привилегированных команд,
- запрет обращения к данным с более высоким уровнем привилегий,
- запрет передачи управления коду с уровнем привилегий, не равным уровню привилегий вызывающего кода.