Что такое режим пользователя и режим ядра в Windows

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

Понимание того, что делает(Does) операционная система

Компьютер состоит из аппаратного обеспечения, электронных компонентов и программного обеспечения, компьютерного кода, исполняемого этим аппаратным обеспечением. Но что может быть менее ясно, так это то, как они работают вместе.

Наиболее важным элементом компьютера является бит или «двоичная цифра». Все(” Everything) , что делает компьютер, представлено единицами и нулями. Различные(Different) компьютерные компоненты представляют биты по-разному. В ЦП(CPU) микроскопические транзисторы представляют единицы и нули, будучи включенными или выключенными. Эти транзисторы организованы в логические структуры, называемые логическими вентилями.

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

Независимо от того, как достигается физическое представление двоичного кода, в конечном итоге вы можете сократить все потребительские компьютерные компоненты до этого необработанного машинного кода.

Так как же перейти от удобного для человека интерфейса компьютера к необработанным низкоуровневым процессам в самом компьютере? Вот где в дело вступает операционная система. Она напрямую управляет аппаратным обеспечением компьютера. 

Это программное обеспечение переводит все, что требуется приложениям (и, следовательно, пользователю), в инструкции машинного кода, понятные ЦП(CPU) и другим компонентам. Наиболее важной частью программного обеспечения в этом процессе является ядро.

Что такое ядро?

Ядро, как следует из названия, является ядром операционной системы. Ядро — это программное обеспечение, которое находится в оперативной памяти(RAM) и управляет всем, что делает компьютер. Когда что-то записывается в память, ядро ​​управляет выполнением.

Ядро знает, как взаимодействовать с оборудованием, таким как графические процессоры(GPUs) и сетевые карты, но оно может не знать, как использовать их в полной мере, полагаясь на общие стандарты в компьютерной индустрии.

Здесь в игру вступают аппаратные драйверы. Драйверы сообщают вашей операционной системе, как работать с определенными компонентами, поэтому вам нужны, например, разные драйверы для графических процессоров Nvidia и AMD(AMD GPUs) .

Оснащенное правильными драйверами, ядро ​​является высшим органом управления компьютером, включая действия, которые могут привести к катастрофическому уничтожению данных.

Роль интерфейсов (Role)прикладного(Application Programming Interfaces) программирования ( API(APIs) )

Во времена MS-DOS разработчикам программного обеспечения приходилось писать свое программное обеспечение специально для аппаратного обеспечения пользователя. Самым известным примером этого в системах MS-DOS были драйверы звуковых карт.

Данная видеоигра должна поддерживать самые популярные карты ( Sound Blaster , Ad-lib , Gravis Ultrasound и т. д .) и надеяться, что большинство игроков будут охвачены. Сегодня все работает совсем по-другому благодаря API(APIs) .

Microsoft DirectX — отличный пример. Если вам нужно подробное объяснение, ознакомьтесь с разделом Что такое DirectX и почему это важно? (What Is DirectX and Why Is It Important?)Однако самое важное, что нужно знать, это то, что API предлагает стандартный способ для разработчиков программного обеспечения запрашивать аппаратные ресурсы у таких компонентов, как GPU . Кроме того, производители оборудования должны гарантировать, что их продукты соответствуют DirectX , чтобы обеспечить полную совместимость с любым аналогичным программным обеспечением.

API(APIs) -интерфейсы предлагают уровень перевода между программными приложениями и низкоуровневым ядром с его аппаратными драйверами. Да, это связано с небольшим снижением производительности. Тем не менее, на современных компьютерах это незначительно, и это дает множество преимуществ, и именно здесь мы, наконец, подошли к пользовательскому режиму и режиму ядра.

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

Современные операционные системы запускают сотни или тысячи «процессов» одновременно, динамически выделяя им процессорное(CPU) время по мере необходимости в зависимости от их приоритетов и требований к вычислительной мощности.

Когда вы запускаете приложение, оно генерирует процессы, и ЦП(CPU) может выполнять их либо в пользовательском режиме, либо в режиме ядра.

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

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

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

Ловушки и исключения

Важно понимать, что эти два режима реализуются на аппаратном уровне самим ЦП(CPU) . Если приложение, работающее в пользовательском режиме, пытается сделать что-то, требующее доступа из режима ядра, оно генерирует «ловушку» или «исключение». Затем операционная система будет работать с приложением, обычно закрывая его и создавая журнал сбоев, чтобы разработчики могли увидеть, что произошло в памяти, когда что-то пошло не так.

Опасности режима ядра(Kernel Mode) : синий (Blue Screen)экран(Death) смерти _(Dangers)

Если вы когда-либо сталкивались с « синим экраном(Blue Screen) смерти » (кто не сталкивался(Death) ?), который заставлял ваш компьютер выключаться или перезагружаться, есть большая вероятность, что виноват процесс режима ядра.

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

Это одна из областей, где API(APIs) играют важную роль, поскольку API запрашивает привилегии режима ядра. Приложения пользовательского режима, по сути, делегируют API(API) запросы, для которых требуются привилегии режима ядра .

Вот почему режим ядра обычно предоставляется только низкоуровневым системным процессам, которым требуется прямой доступ к оборудованию компьютера. Обычно эта привилегия распространяется на процесс, потому что ему требуется большая производительность, чем может обеспечить пользовательский режим. Некоторые инструкции ЦП(CPU) работают только в режиме ядра, поэтому, если процессу необходимо использовать эти функции, его необходимо повысить.

Если у вас возникли проблемы с « Синим экраном(Blue Screen) смерти », обязательно прочитайте наше Руководство по устранению неполадок «Синего экрана смерти» для Windows (Blue Screen of Death Troubleshooting Guide for Windows 10)10(Death) !



About the author

Я Windows MVP и работаю с Windows с 2007 года. Мой опыт включает разработку программного обеспечения, оборудования и звука, а также приложений для Windows. Я всегда ищу лучшие способы улучшить взаимодействие с пользователем в своей работе, поэтому, если вам нужна помощь в проектировании или разработке программного приложения, я определенно могу предложить свои услуги.



Related posts