Я хотел бы знать, как программист ядра думает о памяти по сравнению с программистом непривилегированного режима. Я также хотел бы знать несколько различий между программированием режима программирования и непривилегированного режима ядра.
Программирование в пользовательском режиме относится к программированию с использованием механизмов защиты, надзора и абстракции ядра операционной системы. например: в пользовательском режиме вы не можете записывать секторы диска, так как они «скрыты» под API файловой системы. Вы не можете писать в адреса физической памяти, так как ядро контролирует преобразование между виртуальной и физической памятью, хотя вы можете зарезервировать память для своих нужд. Кроме того, хотя вы можете перейти на низкий уровень (сборку), вы не можете выполнять инструкции с привилегиями, например, пытаясь вмешаться в кеш-память процессора, TBL и MMU.
Ядро программирования позволяет программировать систему для выполнения задач низкого уровня без каких-либо ограничений. Например, драйверы оборудования не могут быть запрограммированы в пользовательском режиме, поскольку им необходим прямой доступ к оборудованию для ввода-вывода, отображения областей памяти и т. Д.
Конечно, нельзя думать о режиме ядра как о «менее ограниченном» и заниматься разработкой приложений в KM. Многие системные средства для прикладного программирования недоступны в KM, поскольку библиотеки, необходимые для взаимодействия с пользователем, работают в пользовательском режиме. Кроме того, эти библиотеки пользовательского режима не будут ссылаться на модуль ядра.
Это различие может быть более или менее определено в зависимости от операционной системы. KM / UM - это ерунда в DOS, где программам был разрешен свободный доступ к системным ресурсам (по крайней мере, в реальном режиме 8086/88 - это не относится к расширителям DOS).
См. Статью Джеффа Общие сведения о режиме пользователя и ядра