В этом документе Linux приведены некоторые способы взаимодействия (взаимодействия) ядра и пространства пользователя.Это следующие.
Procfs
, sysfs
и аналогичные механизмы.Это включает в себя также /dev
записей и все методы, в которых пространство ядра предоставляет файл в пользовательском пространстве (записи / proc, / dev и т. Д. В основном являются файлами, открытыми из пространства ядра).1011 * основанные механизмы.Netlink
- это тип сокета, который предназначен специально для связи между пространством пользователя и пространством ядра. System calls
. Upcalls
.Ядро выполняет код в пространстве пользователя.Например, создание нового процесса. mmap
- Память, отображающая область памяти ядра в пространство пользователя.Это позволяет как ядру, так и пользовательскому пространству выполнять чтение / запись в одну и ту же область памяти.
Кроме этого, в следующем списке добавлены некоторые другие известные мне механизмы.1027 *Interrupts
.Пользовательское пространство может вызывать прерывания для общения с пространством ядра.Например, некоторые процессоры используют int80
для выполнения системных вызовов (в то время как другие могут использовать другой механизм, такой как syscall
инструкция).Ядро должно заранее определить соответствующий обработчик прерываний.
vDSO/vsyscall
- это механизмы в ядре Linux для оптимизации выполнения некоторых системных вызовов.Идея состоит в том, чтобы иметь общую область памяти, и когда процесс выполняет системный вызов, библиотека пользовательского пространства получает данные из этой области вместо фактического вызова соответствующего системного вызова.Это сохраняет издержки переключения контекста.