Я пытаюсь создать «общую картину» того, как все работает в ядре Linux и в пользовательском пространстве, и я совершенно смущен. Я знаю, что пользовательское пространство использует системные вызовы для «разговора» с ядром, но я не знаю, как это сделать. Я попытался прочитать библиотеку C и исходные коды ядра, но они сложны и нелегко понять. Я также прочитал несколько книг, касающихся концептуальных фактов об операционных системах, таких как управление процессами, памятью, устройствами, но они не делают ядро «переход» (userpace-> kernel) понятным. Итак, где происходит переход между пользовательским пространством и пространством ядра? Как библиотека C запускает код, находящийся внутри ядра Linux, работающего на машине?Как ядро Linux «слушает» библиотеку C?
Чтобы сделать аналогию: представьте, что есть дом. Дом заперт. Ключ к открытию дома находится внутри самого дома. В доме есть только один человек, ядро. Пользовательское пространство - это кто-то пытается войти в дом. Мой вопрос будет следующим: как ядро знает, что кто-то за пределами дома хочет ключ, и какой механизм позволяет открыть дом с помощью этого ключа?
Они используют дверной звонок. Этот вопрос зависит от платформы. На 'x86-64' ядро настраивает процессор для отправки' syscall' в ядро. 'syscall' - инструкция сборки, которая по аналогии действует как дверной звонок. –
Что вы подразумеваете под «ядро устанавливает процессор для отправки syscall в ядро»? – nowat
В общем, ядро настраивает процессор, записывая значения в определенные регистры и места в памяти. Это разумно сделать, как только ядро загрузится при загрузке. Эта информация используется процессором для обработки инструкции 'syscall' и множества других вещей, как предполагалось ядром. –