Linux内核学习第五周 系统调用
一、实验截图 二、系统调用流程图: 三、总结:系统调用过程分析 linux 的系统调用过程:用户程序 →C 库(即 API ): INT 0x80 →system_call→系统调用服务例程→内核程序。我们常说的用户 API 其实就是系统提供的 C 库。 系统调用是通过软中断指令 INT 0x80 实现的,而这条 INT 0x80 指令就被封装在 C 库的函数中。软中断和我们常说的硬中断不同之处在于,软中断是由指令触发的,而不是由硬件外设引起的。 INT 0x80 这条指令的执行会让系统跳转到一个预设的内核空间地址,它指向系统调用处理程序,即 system_call 函数。系统调用处理程序 system_call 并不是系统调用服务例程,系统调用服务例程是对一个具体的系统调用的内核实现函数,而系统调用处理程序是在执行系统调用服务例程之前的一个引导过程,是针对 INT 0x80 这条指令,面向所有的系统调用的。简单来讲,执行任何系统调用,都是先通过调用 C 库中的函数,这个函数里面就会有软中断 INT 0x80 语句,然后转到执行系统调用处理程序 system_call , system_call 再根据具体的系统调用号转到执行具体的系统调用服务例程。 system_call 函数是怎么找到具体的系统调用服务例程的呢?通过系统调用号查找系统调用表 sys_call_table