1.系统调用的定义
凡是与共享资源有关的操作、会直接影响到其他进程的操作,
就一定需要操作系统介入,就需要通过系统调用来实现。
1.回顾系统调用
- 操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。
- 主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。
- “系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,
- 应用程序可以通过系统调用来请求获得操作系统内核的服务
2.系统调用与库函数的区别
1.程序调用计算机的过程:
- 普通应用程序:可直接进行系统调用,也可使用库函数。有的库函数涉及系统调用,有的不涉及
- 编程语言:向上提供库函数。有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序员编程更加方便。
- 操作系统:向上提供系统调用,使得上层程序能请求内核的服务。
- 裸机
2.库函数的分类
- 不涉及系统调用的库函数:如“取绝对值”的函数
- 涉及系统调用的库函数:如“创建一个新文件”的函数
3.系统调用的必要性
思考:如果两个进程可以随意地、并发地共享打印机资源,会发生什么情况?
解决方法:由操作系统内核对共享资源进行统一的管理,
并向上提供“系统调用”,用户进程想要使用打印机这种共享资源,
只能通过系统调用向操作系统内核发出请求。
内核会对各个请求进行协调处理
4.系统调用的功能实现
1.功能分类
- 设备管理:完成设备的请求/释放/启动等功能
- 文件管理:完成文件的读/写/创建/删除等功能
- 进程控制:完成进程的创建/撤销/阻塞/唤醒等功能
- 进程通信:完成进程之间的消息传递/信号传递等功能
- 内存管理:完成内存的分配/回收等功能
2.系统调用的作用
- 应用程序通过系统调用请求操作系统的服务。
- 而系统中的各种共享资源都由操作系统内核统一掌管,
- 因此凡是与共享资源有关的操作(如存储分配、V/o操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。
- 这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
5.系统调用的过程
1.过程
- 传递系统调用参数→
- 执行陷入指令(用户态)→
- 执行相应的内请求核程序处理系统调用(核心态)→
- 返回应用程序。
该中断由陷入指令引发,因此转入相应的中断处理程序――即系统调用的入门程序。
注意:
1.陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态。
2.发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行
3.陷入指令= trap 指令=访管指令