Читайте также:
|
|
Для предотвращения доступа приложений к важным данным ОС и риска их модификации Windows использует два режима доступа к процессору (даже если имеются еще какие-то режимы процессора): пользовательский (User mode) и ядра (Kernel mode). Код приложений работает в пользовательском режиме. Код ОС (системные сервисы и драйверы в режиме ядра). В режиме ядра предоставляется доступ ко всей системной памяти и разрешается выполнять любые системные команды процессора, тем самым предоставляя ОС более высокий уровень привилегий, чем приложение. В процессоре Intel x86 определено четыре уровня привилегий (колец, rings). ОС использует уровень 0 для кода ядра и уровень 3 для приложений. Это связано с тем, что большинство процессоров, на которых должна работать Windows (не Intel x86) имеет два уровня привилегий.
Важно для безопасности: Windows не предусматривает защиты от компонентов ОС, работающих в режиме ядра, т.е. можно получить полный доступ к реальной ОП и таким образом обойти средства защиты. В силу этого важно, чтобы компоненты. в т. ч. обновления были подписаны (имели сертификат).
Для перехода в режим ядра есть недекларированная макрокоманда: mode set=sv (ASM). При компиляции требуется указать опцию для разрешения вставки этой команды. Для обхода содержимое макрокоманды надо объявить константой. Выполнение в сегменте кода невозможно.
Приложения могут переключаться из пользовательского режима в режим ядра, обращаясь к системным сервисам, например функция ReadFile в ходе своего выполнения вызывает внутреннюю программу ОС, которая считывает данные. Она выполняется в режиме ядра. Переключение из пользовательского режима в режим ядра осуществляется специальными командами процессора. ОС перехватывает эту команду, проверяет аргументы и если все нормально, выполняет необходимую системную функцию.
Замечание: переключение из пользовательского режима приложения в режим ядра не влияет на планирование, т.к. контекст выполнения остается тем же самым. Поэтому приложение работает часть времени в пользовательском режиме, часть – в режиме ядра. Это можно проверить. На слайде 8 изображены счетчики, которые используются для измерения различных долей времени.
Наблюдение за активностью потоков с помощью Qslice. Позволяет в динамике наблюдать за соотношением времени, проведенного каждым процессом в режиме ядра и в пользовательском режиме, а также получить детальную информацию о каждом потоке. Ту же задачу можно решить с помощью оснастки Performance.
Дата добавления: 2015-07-07; просмотров: 245 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Инструментарий ОС (на основе Windows) | | | Основные концепции построения Windows |