9.4 系统调用的概念和类型
L54
学习目标
系统调用是用户程序获得OS服务的唯一途径,按功能分为进程控制、文件操纵、设备管理等类型。
- 系统调用的基本概念:用户程序通过系统调用请求OS服务,是用户态进入核心态的唯一途径。
- 系统调用的类型:进程控制(创建/终止)、文件操纵(打开/读写/关闭)、设备管理、信息维护、通信。
- 系统调用与库函数的区别:库函数运行在用户态,可能封装系统调用;系统调用直接陷入内核。
- 系统调用的执行过程:设置参数→执行陷入指令→进入核心态→处理程序→返回用户态。
原理 · 深入理解
9.4 系统调用的概念和类型
本节概览:先建立「系统调用的概念和类型」的框架,再依次展开下列小节。
- 系统调用的基本概念
- 系统调用的类型
- POSIX标准
9.4.1 系统调用的基本概念
中断机制:系统调用通过中断机制实现,且一个 OS 的所有系统调用都通过同一个中断入口实现。
例如 MS-DOS 提供 INT 21H,应用程序通过该中断获取操作系统的服务;UNIX/Linux 则通过陷入指令(如 CHMK)进入核心态。
在计算机系统中,通常运行着系统程序和应用程序两类。为防止应用程序对 OS 的破坏,二者运行在不同状态:OS 内核运行在系统态,应用程序运行在用户态。
现代多数 OS 将 CPU 指令集分为特权指令和非特权指令两类。特权指令只能在系统态执行,用户态下不能直接使用,必须通过系统调用进入系统态。
- 特权指令
- 非特权指令
9.4.2 系统调用的类型
文件操纵类系统调用用于对文件进行操作。
- 创建和删除文件
- 打开和关闭文件的系统调用
- 读和写文件的系统调用
进程通信类系统调用:在单处理机系统中,OS 常采用消息传递方式和共享存储区方式。
采用消息传递方式时,通信前需先打开连接:源进程发出打开连接的系统调用,目标进程用接受连接的系统调用表示同意;然后用发送消息或接收消息的系统调用交换信息;通信结束后用关闭连接的系统调用结束通信。
9.4.3 POSIX标准
目前许多操作系统都提供各种类型的系统调用,实现的功能也相类似,但在实现细节和形式上相差很大,这给应用程序与操作系统平台的无关性带来很大困难。
为解决此问题,国际标准化组织 ISO 给出了有关系统调用的国际标准 POSIX 1003.1(Portable Operating System IX),即「基于 UNIX 的可移植操作系统接口」。该标准使应用程序在不同 UNIX/Linux 平台间具有可移植性。
做 · 交互动画
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
系统调用的概念和类型
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能说出一种提高 Flash 寿命的软件策略。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
- 能区分 Shell 与内核。
- 能说明用户态不能直接访问设备寄存器的原因。
延伸思考
- 断电瞬间写元数据为何危险?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?
- 图形 UI 在 SOWL TFT 上对应哪一层?
- 全部函数都链进固件时,还有「用户/内核」边界吗?