Структура Windows 2000, executive и защищенные подсистемы

Режим ядра и пользовательский режим

Микропроцессор Pentium имеет четыре уровня привилегий (privilege levels), известных также как кольца (rings), которые управляют, например, доступом к памяти, возможностью использовать некоторые критичные команды процессора (такие как команды, связанные с защитой) и т.д. Каждый поток выполняется на одном из этих уровней привилегий. Кольцо 0 - наиболее привилегированный уровень, с полным доступом ко всей памяти и ко всем командам процессора. Кольцо 3 - наименее привилегированный уровень.

Для обеспечения совместимости с системами на базе процессоров, отличных от тех, что выпускает компания Intel, Windows поддерживает только два уровня привилегий - кольца 0 и 3. Если поток работает в кольце 0, говорят, что он выполняется в режиме ядра (kernel mode). Если поток выполняется в кольце 3, говорят, что он работает в пользовательском режиме (user mode). Низкоуровневый код операционной системы действует в режиме ядра, тогда как пользовательские при­ложения выполняются в основном в пользовательском режиме.

Заметим, что прикладной поток может переключаться из пользовательского режима в режим ядра при вызове некоторых API-функций, которые требуют бо­лее высокого уровня привилегий, например, связанных с доступом к файлам или с выполнением функций, ориентированных на графические операции. В действительности некоторые пользовательские потоки могут работать в режиме ядра даже больше времени, чем в пользовательском режиме.

Но как только завершается выполнение той части кода, которая относится к режиму ядра, пользовательский поток автоматически переключается обратно в пользовательский режим. Такой подход лишает возможности писать код, предназначенный для работы в режиме ядра, программист может только вызывать выполняющиеся в режиме ядра системные функции (system functions). При работе с Windows NT можно определить, когда поток выполняется в пользователъском режиме, а когда - в режиме ядра. Для этого используется утилита Performance Monitor (Системный монитор) из пункта Administrative Tools (Администрирование) меню Start. (Пуск).

 

Интересно, что драйверы устройств работают в режиме ядра. Это обстоятельство имеет два следствия. Во-первых, в отличие от неправильно выполняющегося приложения неправильно работающий драйвер устройства может нарушить работу всей системы, так как он имеет доступ и ко всему системному коду, и ко всей памяти. Во-вторых, прикладной программист может получить доступ к защищенным ресурсам, написав драйвер псевдоустройства (fake device), хотя это и нелегкая задача.

Термин сервис (service) имеет в среде Windows множество значений. Ниже представлены некоторые из них, имеющие отношение к рассматриваемой теме:

Сервис АРI - функция или подпрограмма API, которая реализует некото­рое действие (сервис) операционной системы, такое как создание файла или работа с графикой (рисование линий или окружностей). Например, функ­ция API CreateProcess используется в Windows для создания нового про­цесса; системный сервис - недокументированная (undocumented) функция, которая может вызываться из пользовательского режима. Эти функции часто ис­пользуются функциями Win32 API для предоставления низкоуровневых сервисов; внутренний (internal) сервис - функция или подпрограмма, которая может вызываться только из кода, выполняемого в режиме ядра. Эти функции от­носятся к низкоуровневой части кода Windows: к исполнительной системе Windows NT, к ядру или к слою абстрагирования от аппаратуры (HAL).

Системные процессы (system processes) - это особые процессы, обслуживающие операционную систему. В системе Windows постоянно задействованы следующие системные процессы (учтите, что все они, кроме процесса system, выполняются в пользовательском режиме):

- процесс idle, который состоит из одного потока, управляющего временем простоя процессора;

- процесс system - специальный про­цесс, выполняющийся только в режиме ядра. Его потоки называются системными потоками (system threads);

- процесс Session Manager (диспетчер сеансов) - SMSS.EXE;

- подсистема Win32 - CSRSS.EXE;

- процесс регистрации в системе — WinLogon (WINLOGON.EXE).

Вы можете убедиться в том, что эти системные процессы действительно выполняются в системе, посмотрев на вкладку Processes (Процессы) программы Task Manager (Диспетчер

Давайте рассмотрим вкратце некоторые из этих системных процессов.

Процесс Session Manager(менеджер сеансов)

Процесс Session Manager (SMSS.EXE) - один из первых процессов, созда­ваемых операционной системой в процессе загрузки. Он выполняет важные функции инициализации, такие как создание переменных окружения системы; задание имен устройств MS DOS, например, LPT1 и СОМ1; загрузка той части подсистемы Win32, которая относится к режиму ядра; запуск процесса регистрации в систе­ме WinLogon.

Процесс WinLogon

Этот системный процесс управляет входом пользователей в систему и выходом из нее. Вызывается специальной комбинацией клавиш Windows Ctrl+Alt+Delete. WinLogon отвечает за загрузку оболочки Windows (обычно это Windows Explorer).

Процесс system состоит из системных потоков (system threads), являющихся потоками режима ядра. Windows и многие драйверы устройств создают потоки прoцecca system для различных целей. Например, диспетчер памяти формирует системные потоки для решения задач управления виртуальной памятью, диспет­чер кэша использует системные потоки для управления кэш-памятью, а драйвер гибкого диска - для контроля над гибкими дисками.

Csrss.exe Данный процесс является частью подсистемы Win32, выполняющейся в непривилегированном режиме (Win32.sys является модулем привилегированного режима). Процесс Csrss представляет клиент-серверную подсистему времени выполнения. Данный процесс должен быть запущен все время. Процесс Csrss отвечает за консольные окна, создание и удаление потоков и за некоторые части 16-разрядной виртуальной среды MS-DOS.

Подсистема Win32 является разновидностью подсистемы среды (environment subsystem). Другие подсистемы среды Windows (не показаны на рисунке) включают POSIX и OS/2. POSIX является сокращением термина «переносимая операционная система па базе UNIX» (portable operating system based on UNIX) и реализует ограниченную поддержку операционной системы UNIX.

Назначение подсистемы среды - служить интерфейсом между пользовательски­ми приложениями и соответствующей частью исполнительной системы Windows. Каждая подсистема имеет свои функциональные возможности на базе единой исполнительной системы Windows. Любой выполняемый файл неразрывно связан с одной из этих подсистем. Подсистема Win32 содержит Win32 API в виде набора DLL, таких как KERNEL32.DLL, GDI32.DLL и USER32.DLL.

В Windows NT Microsoft перенесла часть подсистемы Win32 из пользовательского режима в режим ядра. В частности, драйвер устройства режима ядра WIN32K.SYS, который управляет отображением окон, вы­водом на экран, вводом данных с клавиатуры или при помощи мыши и передачей сообщений. Он включает также библиотеку интерфейсов графических устройств (Graphical Device Interface library – GDL.DLL), используемую для создания графических объектов и текста.

Сервисы исполнительной системы Windows составляют низкоуровневую часть Windows NT режима ядра, включенную в файл NTOSKRNL.EXE.

Cервисы исполнительной системы делят на две группы: исполнительную систему (executive), относящуюся к верхнему уровню, и ядро (kernel).

Ядро - это самый нижний уровень операционной системы, реализующий наиболее фундаментальные сервисы, такие как:

- планирование потоков;

- обработку исключений;

- обработку прерываний;

- синхронизацию процессоров в многопроцессорной системе;

- создание объектов ядра.

 

Ниже приведены некоторые наиболее важные составляющие исполнительной системы:

- диспетчер процессов и потоков создает и завершает и процессы, и потоки, используя сервисы низкоуровневого ядра;

- диспетчер виртуальной памяти реализует механизм виртуальной памяти;

- диспетчер ввода/вывода реализует аппаратно-независимый ввод/вывод и взаимодействует с драйверами устройств;

- диспетчер КЭШа управляет кэшированием диска;

- диспетчер объектов создает объекты исполнительной системы Windows и управляет ими. Windows использует объекты для представления разнооб­разных ресурсов, таких как процессы и потоки;

- библиотеки времени выполнения содержат такие функции, как обработки строк и арифметическиефункции.

Уровень абстрагирования от аппаратуры (HAL) - это библиотека режима ядра (HAL.DLL), которая реализует низкоуровневый интерфейс с аппаратурой. Компо­ненты Windows и драйверы устройств от других компаний взаимодействуют с аппа­ратурой посредством HAL. Существует много версий HAL под различные аппаратные платформы. Подходящий уровень выбирается в процессе установки Windows.

Процесс - это исполняемый экземпляр приложения инабор ресурсов, которые выделяются данному исполняемому приложению. Ресурсы включают в себя следующее:

- виртуальное адресное пространство;

- системные ресурсы, такие как растровые изображения, файлы, области памяти и т.д.;

- модули процесса, то есть исполняемые модули, которые отображены (загружены) в его адресное пространство. Это могут быть динамические библиотеки (DLL), драйверы (DRV) и управляющие элементы (OCX), основной загрузочный модуль (ЕХЕ) процесса, который иногда и называют собственно модулем. Модуль данных (или программный модуль) может или находиться на диске, или быть загруженным в физическую память (RAM) Правда, термин «загружен» (loaded) имеет иное значение, относящееся к виртуальному адресному пространству процесса. Здесь больше подходит термин «отображен» (mapped), так как само отображение - это просто назначение виртуальным адресам физических адресов. После того как модуль загружен в физическую память, его физические адреса могут отображаться в различные виртуальные адресные пространств, при этом возможно использование в каждом процессе разных виртуальных адресов. Отображение не обязательно требует физического перемещения реальных данных или программ (хотя, как вы увидите позже, бывает и так); уникальный идентификационный номер, называемый идентификатором процесса; один или несколько потоков управления.

Поток - это внутренняя составляющая процесса, которой операционная система выделяет процессорное время. Каждый процесс должен иметь, по крайней мере, один поток. Поток включает:

· текущее состояние регистров процессора;

· два стека, один из которых используется при выполнении в режиме ядра, второй - при выполнении в пользовательском режиме;

· участок памяти для работы подсистем, библиотеки времени выполнения,

· динамические библиотеки;

· уникальный идентификатор, называемый идентификатором потока.

Состояние регистров, содержимое стека и области памяти называют контекстом потока (thread's context).

Основное назначение потоков - дать процессу возможность поддерживать несколько ветвей управления, то есть выполнять больше «дел» одновременно. В многопроцессорной конфигурации (компьютер с двумя и более процессорами) Windows NT может назначать разные потоки разным процессорам в различные моменты времени, обеспечивая действительно параллельную обработку. В однопроцессорной конфигурации процессор должен выделять кванты времени каждому исполняемому в данный момент потоку.








Дата добавления: 2018-11-25; просмотров: 459;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.009 сек.