Что это значит, когда код выполняется в режиме [kernel | user]?


14

Что это значит, когда код выполняется в режиме ядра или пользователя?

Ответы:


15

Режим ядра

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

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

Интересно, что на обычных архитектурах это обеспечивается аппаратными средствами, а не только ОС. В частности, архитектура x86 имеет защитные кольца .

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

Проверьте рецензию Джеффа . Это его обычные хорошие вещи.


3

Короткий ответ: он просто говорит вам, где программы проводят свое время.

Для более длинного ответа я объясню это в два шага. Первый:

1. Вход в режим ядра

Каждый обычный код, который вы пишете, работает в «пользовательском режиме».

Программы могут использовать библиотеки для выполнения общих задач. Это также код режима пользователя.

В какой-то момент программе может потребоваться основная функция из системы. Например:

  • доступ к содержимому файла с диска
  • резервирование части свободной памяти
  • получить видео кадр из драйвера веб-камеры
  • отправка данных изображения на видеокарту.
  • отправка сетевого пакета.

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

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

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


2 разница

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

Однако внутри ядра не так много места для проверки безопасности, защиты от сбоев или записи в неправильные части памяти. Это сервисы, которые ядро ​​может предоставлять другим программам. Это обманывает программы, заставляя их верить, что мир выглядит по-другому (программы живут в виртуальной, изолированной / ограниченной среде), и поэтому все, что входит / выходит из программ, может быть переведено и защищено.

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

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


2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.