我了解系统调用的存在是为了提供对用户空间中不允许的功能的访问,例如使用read()
系统调用访问 HDD。我也明白这些是由用户模式层以库调用的形式抽象出来的,例如fread()
,以提供跨硬件的兼容性。
所以从应用程序开发人员的角度来看,我们有类似的东西;
//library //syscall //k_driver //device_driver
fread() -> read() -> k_read() -> d_read()
我的问题是;是什么阻止我将fread()
andread()
函数中的所有指令直接内联到我的程序中?指令是相同的,所以 CPU 应该以相同的方式运行?我没有尝试过,但我认为由于某种原因我失踪了,这不起作用。否则任何应用程序都可以获得任意内核模式操作。
TL;DR:是什么允许系统调用“进入”应用程序无法复制的内核模式?