文章目录
- 为什么引入系统调用
- 什么是系统调用
- 系统调用和库函数的区别
- 系统调用的背后
为什么引入系统调用
- 为了防止这样情况的发生,就是防止进程能够随意的去调用我们的系统资源,操作系统提供了系统调用的功能,用户进程想要使用打印机这种共享资源,只能通过向操作系统发出请求,然后操作系统会对各个请求进行协调管理
- 类似我们Java中的封装思想,把属性进行封装,然后提供对应的公共方法进行操作,为了保证安全性
什么是系统调用
- 系统调用是操作系统提供给应用程序的接口
- 作用:应用程序可以通过系统调用(程序接口)来获得操作系统的服务
- 系统调用会从用户态切换道核心态
- 分类(都是涉及到对系统资源的管理,对进程的控制这些功能需要执行一些特权指令才能完成)
- 设备管理 完成设备的请求,释放,启动等
- 文件管理 完成文件的读 写 创建 删除 等
- 进程通信 完成进程之间的消息传递,信号传递等
- 进程控制 完成进程的创建 撤销 阻塞 唤醒等
- 内存管理 完成内存的分配 回收 获取作业占有内存大小及地址等
系统调用和库函数的区别
- 系统调用是操作系统向上提供的接口
- 有的库函数是对系统调用的进一步封装
- 当今编写的应用程序大多是通过高级语言提供的库函数间接的进行系统调用
- 应用程序可以直接进行系统调用,也可以使用库函数,有的库函数涉及系统调用,有的库函数不涉及
系统调用的背后
-
执行过程
-
传递系统调用的参数
-
执行陷入指令(用户态)
-
执行系统调用响应的服务程序(核心态)
-
返回用户程序 处理完成之后,操作系统内核程序会将CPU使用权还给用户
-
-
陷入指令是在用户态执行的,执行陷入指令之后会立即引发一个内中断,从而CPU进入核心态
-
发出系统调用的是在用户态,但是对系统调用进行相关处理是在核心态下进行
-
陷入指令是唯一一个只能在用户态执行,而不在核心态执行的指令