第10章系统调用接口系统调用接口的功能内核为用户与硬件设备(例如:CPU,磁盘,打印机等)交互提供了一个接口
该接口被称为系统调用接口
它的功能是:使用户编程更加容易,把用户从学习硬件设备的低级编程特性中解放出来
可以极大提高系统的安全性,因为内核接收用户请求之前,可以检查其合法性
使用系统调用接口使得程序具有良好的可移植性
1API和系统调用UNIX操作系统为编程员提供了应用编程接口(API)
在API提供的libc标准函数库中,一部分是用户态的库函数,另一部分是系统调用
库函数和系统调用的区别是:库函数是一个函数定义,说明如何获得一个给定的服务,库函数代码不属于内核
系统调用是通过软件中断(int指令)向内核发出的一个明确服务请求,提供服务的代码属于内核代码
为了区别库函数和系统调用,libc标准C库中,每个系统调用都有一个封装例程(wrapperroutine)
应用程序通过这个封装例程来引用API函数库中的系统调用
用户执行一个系统调用时,内核通过(int0x80)软件中断或调用门从用户空间进入内核空间,这就是所谓的模式转换
CPU切换到内核态开始执行与系统调用相对应内核函数
执行结束后内核将执行结果和控制权还给用户进程
图10-6给出调用系统调用的示意图
调用一个系统调用示意图┇printf()┇在应用程序中调用系统调用printf(){┇int0x80┇}在libc库中的封装例程用户态system_call:┇sys_printf()┇ret_from_sys_calliretsys_printf(){┇}内核态系统调用处理机制系统调用服务例程图10-6系统调用示意图10
2模式转换的硬件处理在i386中,完成系统调用接口模式转换的硬件是陷阱门和调用门,软件是int0x80指令或调用指令下面分析陷阱门技术
注:调用门技术请读