1.6 系统调用
本节主要内容
1.什么是系统调用,有何作用?
2.系统调用和库函数的区别
3.系统调用背后的过程
1.什么是系统调用,有何作用?
1.操作系统作为用户与计算机之间的接口,需要向上提供一些简单易用的服务。
主要包括命令接口和程序接口。其中,程序借口由一组系统调用组成。
2.用户接口
1.命令接口(允许用户直接使用)
1.联机命令接口
用户说一句,系统做一句
2.脱机命令接口
用户说一堆,系统做一堆
2.程序借口(允许用户通过程序简介使用)
由一组系统调用组成
3.“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,
可以理解为一种可供应用程序调用的特殊函数,
应用程序可以发出系统调用请求来获得操作系统的服务。
4.操作系统为什么要提供“系统调用”的功能?
操作系统提供“系统调用”功能,用户进程想要使用一些共享资源时,
只能通过系统调用向操作系统发出请求。操作系统会对各个请求进行协调管理。
5.应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源都由操作系统统一掌管,
因此在用户程序中,凡是与资源有关的操作(如存储分配、I/O操作、文件管理等),
都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。
这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
6.系统调用会使处理器从用户态进入核心态
2.系统调用的分类(按照功能分类)
1.设备管理
完成设备的 请求/释放/启动 等功能。
2.文件管理
完成文件的 读/写/创建/删除 等功能。
3.进程管理
完成进程的 创建/撤销/阻塞/唤醒 等功能。
4.进程通信
完成进程之间的 消息传递/信号传递 等功能。
5.内存管理
完成内存的 分配/回收 等功能。
**注意:
1.系统调用相关处理涉及到对系统资源的管理、对进程的控制,
这些功能需要执行一些特权指令才能完成,
因此系统调用的相关处理需要在核心态下进行。
2.凡是与资源有关的操作、会直接影响到其他进程的操作,
一定需要操作系统介入,即需要通过系统调用来实现
3.系统调用与库函数的区别
1.系统调用是操作系统向上提供的接口
2.有的库函数是对系统调用的进一步封装
3.当今编写的应用程序大多是通过高级语言提供的
库函数间接进行系统调用
4.系统调用背后的过程
1.传递系统调用参数
2.执行陷入指令
3.执行系统调用相关服务程序
4.返回用户程序
**注意:
1.系统调用发生在用户态,对系统调用的处理发生在核心态
2.执行陷入指令会产生内中断,使处理器从用户态进入核心态