一、系统调用
用户接口分为命令接口(允许用户直接使用)和程序接口(允许用户通过程序间接使用)。程序接口由一种系统调用组成。
“系统调用”是操作系统提供给应用程序(程序员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。
系统调用需要用到的权限很高,需要执行特权指令,因此系统调用的相关处理需要在核心态下进行。
系统调用和库函数的区别:
- 普通应用程序:可直接进行系统调用,也可以使用库函数。有的库函数设计系统调用,有的不涉及。
- 编程语言:向上提供库函数。有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使上层进行系统调用更加方便。
- 操作系统:向上提供系统调用
系统调用流程:传递系统调用参数——执行陷入指令/trap/访管指令(用户态)——执行系统调用相应服务程序(核心态)——返回用户程序
tip:
- 陷入指令是在用户态执行的,执行陷入指令后立刻引发一个内中断,从而CPU进入核心态
- 发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行
- 陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令