LKD_05_系统调用
- 系统调用的目的
与内核进行通信,即系统调用是在用户层和硬件设备层之间增加的一个中间层;其主要有3个作用:
- 为用户空间提供一种硬件的抽象接口: 比如读写文件时,应用程序不用考虑磁盘类型和介质,也不用考虑文件系统类型;
- 保证了系统的稳定和安全: 对应用层需要访问的内核进行判断,如权限、用户类型、地址合法性等;比如避免应用程序不争去的使用硬件设备窃取其他进程资源或危害系统运行。
- 避免应用程序可以随意的访问硬件层,而内核对此一无所知,确保可靠的实现多任务和虚拟内存,及实现良好的系统稳定性和安全性;
- 应用编程接口与C库以及POSIX标准之间的关系
- 应用程序通过用户空间实现的API(应用编程接口)来执行程序,而不需要和内核提供的系统调用直接对应。一个API 定义了一组应用程序使用的编程接口。比如:printf() 函数的执行;
应用层printf() => C库中printf() => C库中write() => write()系统调用
- POSIX 是有IEEE 的一组标准,其目标是提供一套大体上基于 unix的可移植操作系统标准。 在大部分Unix 系统上,POSIX定义的API 函数和系统调用之间有着直接的关系。C库提供了POSIX 的绝大部分API。
- Linux 的系统调用像大多数Unix 系统一样,作为C 库的一部分提供。C库实现了Unix 系统的主要API,包括标准C库函数和系统调用接口。
- 程序员需要考虑的市API,系统调用无关紧要; 内核只跟系统调用打交道; 【Unix接口设计:“提供机制而不是策略”】
- 系统调用
- 系统调用处理原理
- 系统调用的实现步骤
- 系统调用上下文
- 小结