深入理解linux内核 —— 系统调用

操作系统为在用户运行的进程与硬件设备进行交互提供了一组接口。这极大地提高了系统的安全性,因为内核在试图满足某个请求之前在接口级就可以检查这种请求的正确性。

更重要的是这些接口使得程序更具有可移植性,因为只要内核所提供的一组接口相同,那么在任一内核之上就可以正确有地编译和执行程序。

深入理解linux内核 —— 系统调用

应用编程接口(API)与系统调用的不同:前者只是一个函数的定义,说明了如何获得一个给定的服务;而后者是通过软中断向内核态发出一个明确的请求。

从编程者的观点来看,API和系统调用之间的差别是没有关系的:唯一相关的事情就是函数名、参数类型及返回代码的含义。然而,从内核设计者的观点看,这种差别确实有关系,因为系统调用属于内核,而用户态的库函数不属于内核。

深入理解linux内核 —— 系统调用

因为内核实现了很多不同的系统调用,因此进程必须传递一个名为系统调用号(system call number)的参数来识别所需要的系统调用,eax寄存器就用作此目的。所有的系统调用都返回一个整数值。

为了把系统调用号与相应的服务例程关联起来,内核利用了一个系统调用分派表(dispatch table)。

尽管系统调用主要由用户态进程使用,但也可以被内核线程调用,内核线程不能使用库函数。


分享到:


相關文章: