Skip to content

408

操作系统

中断、异常与系统调用


一、定位信息

  • 所属圈层:核心层
  • 前置知识:了解CPU用户态/内核态的概念(OS-01-03),了解指令执行周期
  • 知识网络位置:中断是OS运行的核心驱动力——时钟中断驱动进程调度,I/O中断驱动设备管理,系统调用是用户程序请求OS服务的唯一途径。本单元与CPU调度(OS-02-06)、进程切换(OS-02-08)直接关联
  • 考点热度等级H级(高频重点)——近5年选择题出现≥4次,综合题也频繁涉及

二、知识点讲解

2.1 中断(Interrupt)

定义:来自CPU外部的事件,与当前执行的指令无关,是异步的。

  • 来源:外部设备(如键盘输入、磁盘I/O完成)、时钟定时信号

  • 处理过程

    1. 外部设备向CPU发送中断请求信号
    2. CPU在每条指令执行末尾检查中断请求
    3. 若有中断且中断开启(IF=1),则保存当前进程上下文
    4. 跳转到中断处理程序(根据中断向量表查找入口地址)
    5. 执行中断处理
    6. 恢复上下文,返回原程序继续执行
  • 分类

    • 可屏蔽中断:可通过关中断指令屏蔽,如I/O中断
    • 不可屏蔽中断(NMI):无法屏蔽,如电源掉电、硬件故障

2.2 异常(Exception)

定义:由CPU内部事件引起,与当前执行的指令直接相关,是同步的。

  • 类型
类型触发原因处理方式举例
故障(Fault)执行指令时发现的可恢复错误修复后重新执行该指令缺页异常、段错误
陷阱(Trap)有意执行的特殊指令执行下一条指令系统调用(trap指令)
终止(Abort)不可恢复的严重错误终止进程硬件故障、非法指令

2.3 系统调用(System Call)

定义:用户程序请求操作系统内核服务的编程接口,是用户态进入内核态的主动通道

  • 本质:执行一条特殊的陷入指令(trap / syscall / int 0x80),触发从用户态到内核态的切换
  • 常见系统调用分类
类别功能例子
进程控制创建/终止/等待进程fork()exit()wait()
文件管理文件读写/创建/删除open()read()write()
设备管理设备请求/释放ioctl()read()write()
信息维护获取/设置系统信息getpid()time()
通信进程间通信pipe()shmget()
  • 系统调用的执行步骤
    1. 用户程序将系统调用号和参数放入指定寄存器
    2. 执行陷入指令(trap),CPU切换到内核态
    3. OS根据系统调用号查找系统调用表,找到对应处理函数
    4. 执行内核函数,完成服务
    5. 将返回值放入寄存器,执行中断返回指令
    6. CPU回到用户态,用户程序继续执行

2.4 中断、异常、系统调用三者对比

维度中断异常系统调用
触发源CPU外部设备CPU内部(当前指令)用户程序主动执行trap指令
同步/异步异步同步同步
与指令关系与当前指令无关与当前指令直接相关有意执行
模式切换用户态→内核态用户态→内核态用户态→内核态
处理后行为继续执行下一条指令故障→重新执行;陷阱→继续下一条继续执行下一条指令
典型例子键盘输入、时钟缺页、除零fork()read()

三、记忆与理解辅助

  1. 口诀:"中断外来异步生,异常内部同步成,系统调用用户请"——三者的触发源和同步特性
  2. 异常三种类型口诀:"故修(故障修复重执行),陷续(陷阱执行下一条),终止(终止不可恢复)"
  3. 系统调用流程一句话:"放参数→执行trap→查表→执行→返回"五步完成一次系统调用
  4. 中断 vs 异常核心区别:中断是"外面的事打扰了你",异常是"你自己做的事出了问题"

四、例题与精解

例题1(基础巩固)

题目:下列事件中,属于异常(Exception)的是( )

A. 时钟中断 B. 键盘输入中断 C. 缺页故障 D. 磁盘I/O完成中断

命题意图:考查中断与异常的区分。

精解

  1. 审题分析:核心区分点——中断来自CPU外部(异步),异常来自CPU内部(同步)
  2. 解题思路:逐项判断事件的触发源
  3. 完整步骤
    • A选项:时钟中断来自外部时钟硬件,属于中断,不是异常
    • B选项:键盘输入中断来自外部键盘设备,属于中断
    • C选项:缺页是CPU执行访存指令时发现页不在内存中,由当前指令触发,属于异常(故障类)
    • D选项:磁盘I/O完成中断来自外部磁盘控制器,属于中断
  4. 方法反思:判断中断还是异常,关键看事件源——外部设备→中断,CPU内部执行指令→异常

答案:C

例题2(中等提升)

题目:用户程序调用 printf("Hello") 的过程中,以下说法正确的是( )

A. printf直接执行系统调用,将字符串写入屏幕 B. printf是库函数,通过系统调用(如write)请求内核服务 C. printf运行在内核态,直接操作显示设备 D. printf不需要系统调用,直接在用户态完成输出

命题意图:考查库函数与系统调用的关系。

精解

  1. 审题分析:需要区分库函数和系统调用的关系
  2. 解题思路printf是C标准库函数,不是系统调用本身;实际输出需要通过内核的I/O服务
  3. 完整步骤
    • A选项:不准确。printf本身是库函数,不是直接的系统调用。它内部会调用write系统调用
    • B选项:正确。printf是标准库函数,在用户态运行,当需要实际输出时,通过write等系统调用请求内核完成I/O操作
    • C选项:错误。printf运行在用户态,只有系统调用陷入内核后才在内核态执行
    • D选项:错误。屏幕输出涉及I/O操作,必须通过内核完成,需要系统调用
  4. 方法反思:库函数(如printf)是用户态代码,系统调用(如write)是进入内核态的通道。库函数可能封装了系统调用,但不等于系统调用

答案:B


五、考情分析

  • 考查频次:近5年约4–5次
  • 常见题型:选择题为主,综合题中偶尔涉及系统调用过程
  • 分值占比:2分/题(选择题)
  • 命题趋势:近年倾向于考查中断/异常/系统调用三者的区分,以及系统调用的完整执行流程。可能与进程调度(时钟中断驱动)结合出题

六、易错点提醒

  1. 错误表现:将系统调用等同于库函数 错误原因printfmalloc等库函数经常被误认为系统调用 正确理解:库函数运行在用户态,系统调用是进入内核态的服务请求。库函数可能封装了系统调用(如printf内部调write),但不是系统调用本身

  2. 错误表现:认为缺页异常处理后会执行下一条指令 错误原因:混淆了故障(Fault)和陷阱(Trap)的返回行为 正确理解:缺页属于故障类异常,处理完成后重新执行触发缺页的那条指令,而不是执行下一条

  3. 错误表现:认为中断可以在任意时刻发生 错误原因:忽略了CPU在关中断状态下不响应中断 正确理解:中断响应需要CPU开中断(IF=1),且在每条指令执行末尾才检查中断请求

  4. 错误表现:混淆中断向量表和系统调用表 错误原因:两者都是"查表跳转",但用途不同 正确理解:中断向量表存放各类中断/异常处理程序的入口地址;系统调用表存放各系统调用对应的内核处理函数地址


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《计算机操作系统》(汤小丹/汤子瀛版)第1章
  • 依据《操作系统概念》(Silberschatz版)第1–2章
  • 依据王道考研408操作系统辅导讲义

考研全科复习资料 - 基于2026考研统考大纲