Чтобы приложения не могли прочитать или изменить данные операционной системы, были предусмотрены разные режимы доступа к процессору.

Режимы доступа к процессору

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

Хотя каждый процесс обладает собственным закрытым адресным пространством, всё что работает в режиме ядра использует единое адресное пространство. К адресному пространству ядра можно получить доступ только из режима ядра. Но к памяти пользовательского процесса можно получить доступ из любого режима. Дополнительно стоит отметить память, которая доступна только для чтения. Такая память недоступна на запись для кода из любого режима.

Память ядра и процессов
Память ядра и процессов

В режиме ядра работает часть операционной системы и драйверы. И все они могут вмешиваться в работу друг друга. И очень важно чтобы все компоненты работающие в этом режиме были тщательно спроектированы и протестированы. Любой некорректно написанный драйвер может повредить всю систему.

Именно по этой причине в Windows 2000 появился механизм цифровой подписи драйверов. Этот механизм запрещал установку не подписанных драйверов, но только для Plug and Play устройств.

Ужесточение политики работы со сторонними драйверами

В Windows 8.1 политика подписывания кода режима ядра требует, чтобы все драйверы устройств (а не только Plug and Play) подписывались криптографическим ключом, выданным одним из ведущих центров сертификации. Пользователям запретили установку не подписанных драйверов, даже с правами администратора. Но такое ограничение можно отключить вручную. В этом случае драйверы самоподписываются, а на обоях рабочего стола выводится надпись «Тестовый режим«.

windows 10 тестовый режим
windows 10 тестовый режим

В Windows 10 ещё сильнее ужесточили правила подписывания драйверов. Теперь все новые драйверы должны подписываться только двумя возможными центрами сертификации с сертификатом SHA-2 Extended Validation (EV) вместо обычного файлового сертификата SHA-1 и его 20 центрами сертификации. Но это ещё не все, после подписания драйвер нужно отправить в Microsoft через портал SysDev для аттестации. И только после аттестации драйвер получит цифровую подпись Microsoft. Соответственно, ядро принимает только драйверы с подписью Microsoft без каких-либо исключений, кроме «Тестового режима«.

В Windows Server 2016 операционная система действует еще радикальнее. Кроме требований EV простого аттестационного подписывания недостаточно. Чтобы драйвер загружался в серверной системе, он должен пройти жесткий процесс сертификации WHQL (Windows Hardware Quality Labs) в составе НСК (Hardware Compatibility Kit). Только драйверам с подписью WHQL разрешается загрузка в таких системах.

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

Переключение из одного режима в другой

Пользовательские приложения могут переключаться из пользовательского режима в режим ядра используя специальные системные функции. Таким образом, для пользовательского потока нормально проводить часть времени в пользовательском режиме, а часть времени в режиме ядра. Более того, поскольку большая часть графической системы выполняется в режиме ядра, процессы приложений, интенсивно работающих с графикой, могут проводить в режиме ядра больше времени, чем в пользовательском режиме. Чтобы убедиться в этом, запустите Paint и понаблюдайте за распределением времени между пользовательским режимом и режимом ядра с помощью Process Explorer:

Process Explorer - Kernel time и User time
Process Explorer — Kernel time и User time

Наблюдение за переключениями в Системном мониторе

Запустите «Системный монитор«:

Устройство Windows. Режим ядра и пользовательский режим, изображение №2

Удалите счетчик «по умолчанию» и добавьте следующие счетчики: объект «Процесс», два счетчика «% работы в пользовательском режиме» и «% работы в привилегированном режиме». Далее выберите процесс mspaint.

Устройство Windows. Режим ядра и пользовательский режим, изображение №3

Порисовав немного в Paint увидим следующее:

Устройство Windows. Режим ядра и пользовательский режим, изображение №4

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


Вернуться к оглавлению

Сводка
Режимы доступа к процессору: режим ядра и пользовательский
Имя статьи
Режимы доступа к процессору: режим ядра и пользовательский
Описание
В Windows предусмотрели разные режимы доступа к процессору: режим ядра (Kernel mode) и пользовательский режим (User mode). Я покажу, как это работает

Добавить комментарий

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