【操作系统】6.系统调用
目录
什么是系统调用,有什么作用?
为了避免程序随意调用共享资源导致混乱,操作系统提供系统调用功能。
用户进程想要使用某种共享资源时,只能通过系统调用对操作系统发出请求。操作系统会对各个请求进行协调管理。
在用户程序中,凡是和资源相关的操作,都必须通过系统调用的方式向操作系统发出请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
系统调用相关的处理涉及到系统资源的管理,对进程的控制,这些需要执行一些特权指令才能完成,因此系统调用的相关处理需要在核心态下进行。
系统调用(按功能分类)
系统调用(按功能分类):
-
设备管理:完成设备的 请求/释放/启动 等功能
-
文件管理:完成文件的 读/写/创建/删除 等功能
-
进程管理:完成进程的 创建/撤销/阻塞/唤醒 等功能
-
进程通信:完成进程之间的 消息传递/信号传递 等功能
-
内存管理:完成内存的 分配/回收 等功能
系统调用和库函数的区别
普通应用程序 | 可以使用系统调用(汇编语言提供),也可以使用库函数(高级语言提供)。有的库函数内部涉及有系统调用,有的不涉及 |
---|---|
编程语言 | 向上提供库函数,有时会将系统调用封装成库函数,以隐藏系统调用的细节,使得上层进行系统调用更为方便 |
操作系统 | 向上提供系统调用 |
裸机 |
系统调用背后的过程
1.传递系统调用参数
2.执行陷入指令(用户态)
3.执行系统调用的相应服务程序(核心态)
4.返回应用程序
要点注意:
-
陷入指令是在用户态执行的,执行陷入指令立即引发一个内中断,从而CPU进入核心态。(系统调用发生在用户态,而系统调用的处理发生在核心态)
-
陷入指令 是唯一只能在用户态执行,而不能在核心态执行的指令。
