1. 概述

在操作系统中,应用程序的执行依赖于各种事件的触发,因此操作系统通常采用事件驱动模型。事件的发生会改变系统状态,比如从用户态切换到内核态

在本教程中,我们将重点讨论操作系统中两种常见的事件机制:Trap(陷阱)与 Interrupt(中断)。我们会从基本概念入手,逐步厘清它们之间的核心差异,并结合实际例子帮助理解。

2. Trap 简介

Trap 是一种由用户进程中的异常引发的同步中断。常见的触发场景包括:非法内存访问、除以零、断点等。

当 Trap 被触发时,操作系统会切换到内核态,执行相应的处理逻辑,然后将控制权交还给用户进程。也就是说,Trap 的处理具有明确的“调用-返回”语义。

举个例子,当程序中调用 printf() 函数时:

printf("%s\n", str);

该语句会触发系统调用(如 write()),从而引发一个 Trap。操作系统将执行打印逻辑,并在完成后返回用户态继续执行。

Trap 的执行流程如下图所示:

Copy of gfdsgdg

关键点

  • 同步发生,由程序指令主动触发
  • 优先级高于普通用户代码
  • 处理完毕后返回原程序继续执行

3. Interrupt 基础知识

Interrupt 是一种由硬件或软件发出的信号,要求操作系统立即响应。它通常用于通知 CPU 某些紧急事件(如键盘输入、磁盘 I/O 完成)。

现代计算机系统是中断驱动的。CPU 执行指令时,除非遇到中断信号,否则会持续执行当前任务。

每个 CPU 都有一个 INT 引脚,用于连接外部硬件(如键盘、网卡)。当用户按下键盘时,硬件会通过 INT 引脚发送中断信号,操作系统随即切换上下文,调用对应的中断处理程序(Interrupt Service Routine, ISR)。

中断的执行流程如下图所示:

gfdsgdg

关键点

  • 异步发生,通常由外部设备触发
  • 可以由硬件或软件产生
  • 多个设备可共享一个中断线(通过中断控制器管理)

4. Trap 与 Interrupt 的核心区别

特性 Trap Interrupt
触发源 用户程序指令 硬件设备或软件
同步性 ✅ 同步 ❌ 异步
发生位置 仅在程序执行时 任意时间
是否可屏蔽 ❌ 不可屏蔽 ✅ 可屏蔽
所属关系 Interrupt 的子集 包含 Trap 的超集
处理机制 调用 Trap 处理程序 调用中断服务程序(ISR)
示例 系统调用、除零异常 键盘输入、磁盘 I/O 完成

⚠️ 常见误区

  • 有些开发者误以为“中断就是 Trap”,这是错误的。实际上,Trap 是中断的一种特殊形式。
  • 中断可以屏蔽(通过 CPU 的中断屏蔽寄存器),而 Trap 不能屏蔽。

5. 总结

在本教程中,我们介绍了操作系统中两个关键概念:Trap 和 Interrupt,并从触发机制、同步性、执行流程等多个维度进行了对比。

一句话总结

Trap 是程序主动触发的同步中断,Interrupt 是外部设备或系统引发的异步中断。

掌握它们之间的区别,有助于深入理解操作系统如何响应外部事件、管理硬件资源,以及实现高效的上下文切换机制。


原始标题:What Is the Difference Between Trap and Interrupt?