目录

【操作系统】6.系统调用

什么是系统调用,有什么作用?

为了避免程序随意调用共享资源导致混乱,操作系统提供系统调用功能。

用户进程想要使用某种共享资源时,只能通过系统调用对操作系统发出请求。操作系统会对各个请求进行协调管理。

在用户程序中,凡是和资源相关的操作,都必须通过系统调用的方式向操作系统发出请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

系统调用相关的处理涉及到系统资源的管理,对进程的控制,这些需要执行一些特权指令才能完成,因此系统调用的相关处理需要在核心态下进行。

系统调用(按功能分类)

系统调用(按功能分类):

  • 设备管理:完成设备的 请求/释放/启动 等功能

  • 文件管理:完成文件的 读/写/创建/删除 等功能

  • 进程管理:完成进程的 创建/撤销/阻塞/唤醒 等功能

  • 进程通信:完成进程之间的 消息传递/信号传递 等功能

  • 内存管理:完成内存的 分配/回收 等功能

系统调用和库函数的区别

普通应用程序 可以使用系统调用(汇编语言提供),也可以使用库函数(高级语言提供)。有的库函数内部涉及有系统调用,有的不涉及
编程语言 向上提供库函数,有时会将系统调用封装成库函数,以隐藏系统调用的细节,使得上层进行系统调用更为方便
操作系统 向上提供系统调用
裸机

系统调用背后的过程

1.传递系统调用参数

2.执行陷入指令(用户态)

3.执行系统调用的相应服务程序(核心态)

4.返回应用程序

要点注意:

  • 陷入指令是在用户态执行的,执行陷入指令立即引发一个内中断,从而CPU进入核心态。(系统调用发生在用户态,而系统调用的处理发生在核心态)

  • 陷入指令唯一只能在用户态执行,而不能在核心态执行的指令

/op-sys/cz118.png
系统调用的过程