所以我不清楚的一件事是为什么从用户空间到内核空间的转换是依赖于体系结构的。例如,linux kernel v5.4 系统调用进入内核空间的代码对于 x86 与不同的体系结构来说是不同的,并且包含依赖于体系结构的汇编指令,而不仅仅是 C 代码。
这是为什么呢?为什么整个 Linux 内核不能直接用 C 语言编写……?
任何想法表示赞赏。
谢谢。
答案1
内核模式与用户模式有很大不同。内核可以做任何它想做的事/访问硬件的任何部分,但用户空间却不能。代码如何告诉硬件在模式之间切换是特定于体系结构的 - 因此切换机制是作为机器代码实现的 - 但封装在 C 库中。您会在操作系统与硬件接口的任何地方找到同样的东西 - 即在设备驱动程序中。
C 旨在成为一种用于编写操作系统并提供跨架构可移植性的语言。