第 9 章 · 03 中断与保护模式:隔离的基石


第 9 章 · 03 中断与保护模式:隔离的基石

本节摘要:为什么用户程序不能直接读写硬件、不能访问别人的内存?因为 CPU 的特权级(保护模式)把指令分级,关键操作只能内核做,用户程序通过中断(尤其系统调用)请求内核代劳。本节讲清两个核心概念:中断(硬件/软件事件打断 CPU,让它去处理)与保护模式/特权级(ring 0 内核、ring 3 用户,隔离用户与内核)。理解这两者,你就理解了操作系统的「脉搏」与「隔离墙」。

内容来源:基于 OS 内核机制整理的导读,呼应姊妹篇《Linux 命令》第 6 章信号与系统调用。

学习目标

  1. 说清「中断」:硬件/软件事件打断 CPU 当前执行,跳去处理中断处理程序。
  2. 区分硬件中断(键盘/时钟/磁盘)、软件中断(系统调用、异常)。
  3. 理解保护模式/特权级:ring 0 内核态、ring 3 用户态。
  4. 解释系统调用:用户程序通过「软件中断」(或专用指令)请求内核代劳特权操作。
  5. 理解中断是 OS 的「脉搏」(调度靠时钟中断、IO 完成靠硬件中断)。

一、学习价值:OS 的脉搏与隔离墙

「中断」是 OS 的脉搏——没有中断,CPU 只会一直跑当前程序,无法切换(调度)、无法响应 IO(磁盘完成了不知道)。时钟中断让调度器有机会轮转 CPU;硬件中断让 OS 知道「IO 完成」。

「特权级」是隔离墙——让用户程序跑在受限的 ring 3,不能直接改页表、读写 IO,必须通过系统调用(触发软件中断进入 ring 0)请求内核。这才有「进程互不干扰」「系统不被某程序搞崩」。

理解这两者,你才真正理解 OS 如何实现「多任务 + 隔离」。

二、认知拆解

中断

中断是「事件打断 CPU 当前执行,跳到中断处理程序」:

  • 硬件中断:外部设备发信号(键盘按下、时钟到点、磁盘 IO 完成)。异步。
  • 软件中断/异常:CPU 执行指令时遇到事件(除零、缺页、系统调用 int 0x80 或 syscall)。同步。

中断机制:CPU 维护一张「中断向量表」(每项是一个处理程序地址)。中断发生时,CPU 保存现场(寄存器)、查表跳到对应处理程序、处理完恢复现场返回。

保护模式与特权级

x86 CPU 有 4 个特权级(ring 0-3),实际只用两个:

  • ring 0(内核态):能执行所有指令(包括特权指令:改页表、读写 IO 端口、关中断)。内核跑这里。
  • ring 3(用户态):不能执行特权指令。普通程序跑这里。

用户程序要读写硬件?不能直接做(在 ring 3 没权限)。它通过系统调用:syscall(或老式 int 0x80)触发软件中断,CPU 切到 ring 0,跳到内核的系统调用处理程序,内核代劳后返回 ring 3。这就是第 6 章 strace 看到的 open/read/connect 的来源——它们都是系统调用。

为什么中断是脉搏

  • 时钟中断:固定频率触发,调度器借此轮转 CPU(否则一个进程可能一直占着)。
  • IO 完成中断:磁盘读完发中断,OS 把等待的进程唤醒。
  • 缺页异常:进程访问未映射的内存,CPU 触发异常,OS 的缺页处理程序从磁盘加载页、恢复执行(虚拟内存的实现)。

没有中断,OS 无法主动介入,只能让 CPU 一直跑当前程序——无法调度、无法响应 IO、无法实现虚拟内存。

三、上手第一步

写 OS 时:设中断向量表(IDT),写时钟中断处理程序(用于调度)、键盘中断处理程序(读键)、系统调用处理程序(syscall 入口)。理解「中断来了 → 保存现场 → 处理 → 恢复」的流程。

本节要点回顾

  1. 中断=事件打断 CPU,跳去处理程序;硬件中断(异步,IO/时钟)、软件中断/异常(同步,系统调用/缺页)。
  2. 保护模式/特权级:ring 0 内核(全权)、ring 3 用户(受限);关键指令只 ring 0 能执行。
  3. 系统调用:用户程序触发软件中断进 ring 0,内核代劳后回 ring 3——这就是 open/read 的机制。
  4. 中断是 OS 的脉搏:时钟中断驱动调度、IO 中断驱动响应、缺页异常驱动虚拟内存。

推荐上手顺序

  1. 设 IDT,写一个中断处理程序(如打印字符)。
  2. 设时钟中断,体会它定期触发。
  3. 实现一个最简系统调用(syscall 读一个字符)。
  4. 理解 ring 0/3 切换。

下一节讲调度与虚拟内存——OS 的两大核心抽象。

作者与出处
原作者:灏天文库
来源:codecrafters-io
许可证:CC0-1.0
整理人: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: 灏天文库 转发
评论区 (0)
U