Skip to content

系统调用

考情分析

系统调用的概念和执行过程是选择题高频考点,特别是与库函数的区分。🔥🔥🔥 高频。

用户程序想读一个文件、创建一个进程,但这些操作都涉及硬件资源,用户态又没有权限——怎么办?

系统调用的概念

系统调用是操作系统提供给应用程序的程序接口(API),是用户程序请求操作系统服务的唯一方式。

用户程序不能直接执行特权操作(如 I/O、创建进程),必须通过系统调用"请求"操作系统代为执行——就像银行柜台,你不能自己去金库拿钱,只能填单子让柜员帮你操作。

系统调用的分类

类别功能示例
进程控制创建/终止/等待进程fork, exec, exit, wait
文件管理打开/关闭/读写文件open, close, read, write
设备管理请求/释放设备ioctl
信息维护获取系统信息getpid, time
通信进程间通信pipe, shmget, socket

系统调用的执行过程

关键步骤:

  1. 传参:将系统调用号和参数放入寄存器
  2. 陷入:执行 trap 指令(int 0x80syscall),触发从用户态到内核态的切换
  3. 执行:内核根据系统调用号在系统调用表中找到对应处理函数并执行
  4. 返回:结果放入寄存器,执行中断返回指令,回到用户态

系统调用 vs 库函数

比较系统调用库函数
执行环境内核态用户态(可能内部调用系统调用)
提供者操作系统内核语言运行库(如 C 标准库)
开销需要态切换,开销大普通函数调用,开销小
举例read, write, forkprintf, malloc, fopen

printf 是库函数,它在内部调用了 write 系统调用。malloc 在内部调用了 brkmmap 系统调用。

注意

并非所有库函数都涉及系统调用。例如 strlen 只是在用户态计算字符串长度,不需要任何系统调用。

系统调用与中断的关系

系统调用通过 trap(陷入) 指令触发,trap 本质上是一种内中断(异常)

概念层次
系统调用OS 提供的功能接口
trap 指令触发系统调用的机制
中断/异常实现态切换的底层硬件机制

考研高频考点

  • 🔥🔥🔥 系统调用在内核态执行(通过 trap 陷入)
  • 🔥🔥🔥 系统调用 vs 库函数的区别
  • 🔥🔥 系统调用是用户程序获取 OS 服务的唯一方式
  • 🔥🔥 系统调用的执行流程(传参→trap→查表→执行→返回)
  • 🔥 凡是涉及资源管理或硬件访问的操作都需要系统调用

系统调用是程序运行时与 OS 交互的接口,但程序在运行前还要经历编译、链接、装入——下一篇来看一个 .c 文件是怎么一步步变成内存中可执行的进程的。

真题练习

相关真题(9题)

2024Q31选择题2分

系统调用:保存断点和切换模式由硬件完成,保存寄存器和服务程序由OS完成

2023Q26选择题2分

态切换:系统调用完成后返回用户态

2021Q23选择题2分

系统调用:创建新进程(fork)通过系统调用完成

2020Q23选择题2分

系统调用是OS提供给应用程序的接口

2019Q25选择题2分

系统调用:在内核态执行,是OS提供的接口,不同OS接口不统一

2017Q24选择题2分

系统调用流程:先传参→陷入→执行服务→返回

2013Q28选择题2分

态切换:除零异常和read系统调用进入内核态,sin()是库函数不进入

2012Q28选择题2分

read系统调用:需要文件描述符而非文件名,缺数据会阻塞,会切换到内核态

2009Q23选择题2分

系统调用是OS提供给应用程序的接口