Ответы:
Режим ядра
Программа, работающая в этом режиме, имеет полный доступ к базовому оборудованию. Он может выполнить любую инструкцию процессора, получить доступ к любому адресу памяти и, по сути, делать все, что захочет.
Код пользовательского режима, выполняемый в этом режиме, ограничен модификацией оборудования через API операционной системы. Он не может получить доступ к оборудованию напрямую на всех .
Интересно, что на обычных архитектурах это обеспечивается аппаратными средствами, а не только ОС. В частности, архитектура x86 имеет защитные кольца .
Большое преимущество такого разделения состоит в том, что когда происходит сбой программы в пользовательском режиме, это не всегда смертельно. На самом деле, в современных системах это обычно не так.
Проверьте рецензию Джеффа . Это его обычные хорошие вещи.
Короткий ответ: он просто говорит вам, где программы проводят свое время.
Для более длинного ответа я объясню это в два шага. Первый:
1. Вход в режим ядра
Каждый обычный код, который вы пишете, работает в «пользовательском режиме».
Программы могут использовать библиотеки для выполнения общих задач. Это также код режима пользователя.
В какой-то момент программе может потребоваться основная функция из системы. Например:
Эта важная - близкая к аппаратной - функциональность является частью ядра. Это центральная программа для всего на вашем компьютере. Он управляет всем, что нужно программам для работы.
Чтобы использовать функцию в ядре, путь выполнения программы буквально делает переход из режима пользователя в код ядра. Ядро выполняет свою работу и сбрасывает путь выполнения обратно в пользовательский режим.
Когда программа проводит много времени в режиме ядра, это часто означает, что она выполняет много действий, связанных с оборудованием. Например, поиск диска или потоковое видео. Аппаратное обеспечение также может работать со сбоями; замедляя обработку и заставляя программу тратить необычное количество времени в пространстве ядра.
2 разница
Код в пространстве ядра высокопроизводительный. Другие части ядра могут вызывать его напрямую, и код имеет прямой доступ ко всем ресурсам системы без какой-либо проверки границ. Переключение между режимом ядра / пользователя также является дорогостоящей операцией, которую полностью избегают, выполняя все в коде ядра.
Однако внутри ядра не так много места для проверки безопасности, защиты от сбоев или записи в неправильные части памяти. Это сервисы, которые ядро может предоставлять другим программам. Это обманывает программы, заставляя их верить, что мир выглядит по-другому (программы живут в виртуальной, изолированной / ограниченной среде), и поэтому все, что входит / выходит из программ, может быть переведено и защищено.
Само ядро не может иметь большой защиты, потому что за ним нет ничего, что могло бы его защитить. Это сердце системы, и когда это останавливается, все заканчивается. Вы получаете панику ядра или на Windows, известный BSOD.
Это также риск кода, основанного на ядре, и причина, по которой все больше подсистем с низкими требованиями к производительности переносятся в пользовательское пространство. Однако основные части, связанные с аппаратным обеспечением, обычно представляют собой код ядра, который в ближайшее время не изменится.
Различие заключается в том, разрешено ли текущему исполняемому коду напрямую взаимодействовать с различными аппаратными компонентами. Код режима ядра может записывать данные на шины устройств, изменять отображения памяти, переключать запущенные процессы и т. Д. Пользовательский режим может выполнять вычисления и выполнять системные вызовы в ядре для взаимодействия с остальным миром.