Introduction¶
参考补充的范围
本页标为“参考补充”的段落对照 NoughtQ:Introduction 选题,重新组织解释与例子;具体实现另附一手资料。课堂时间线保持原样,参考笔记中的往年考试范围不作为本学期要求。来源与许可见页末。
what is a OS?¶
- 硬件 (hardware):包括 CPU、内存、I/O 设备等,为系统提供了基本的计算资源
- 操作系统(operating system):控制硬件,并协调其在不同应用程序之间,以及不同用户之间的使用
- 系统程序 (system programs) 和应用程序 (application programs):定义了用硬件资源解决用户计算问题的方法,比如字处理器、电子表格、编译器、网页浏览器等
- 用户 (user):人、机器或其他计算机

图中的 operating system,此时应该称为 kernel
-
教科书式的字面定义:A program that acts as an intermediary between a user of a computer and the computer hardware(在用户与计算机硬件之间充当媒介的一个程序)
- 目标:execute user programs and make solving user problems easier;make the computer system convenient to use;use the computer hardware in an efficient manner
- 这个定义非常抽象、"摸不着"——只说了 OS 是一个程序、是个媒介,没说它到底做了什么
-
一个更直观的理解:把其他所有程序都关掉,还始终在运行的那个程序,就是操作系统
- 它干两件事:一方面给用户提供方便性,另一方面把计算机的资源管理起来——最大程度地利用内存、处理器、硬盘、各种 I/O 设备,以高效的方式向用户提供服务
- 更精确一点的定义(OS 包括什么):
- resource allocator(资源分配器):管理计算机硬件的各种资源(有时甚至包括软件资源)
- control program(控制程序):控制程序的运行与停止,控制用户对计算机的使用(如你点了一下鼠标,应用程序怎么知道?是操作系统的一种服务告诉它的)
- 注意:OS 没有公认的定义 (no universally accepted definition);"厂商发行操作系统时给你的一切"是个不错的近似,但差异很大
Kernel¶
- 教材用 the one program running at all times on the computer 描述内核的持续存在;应理解为系统运行期间内核持续承担管理职责,不是 CPU 每时每刻都在执行内核指令。应用程序也会直接在用户态执行。
- 常驻的系统服务也可以长期存在,但“是否一直存在”并不足以区分它与内核。
-
Kernel 与 Operating System 的关系
- 前文对 operating system 的定义(控制硬件,并协调其在不同应用程序之间、不同用户之间的使用)描述的是这一层的职责;真正直接与硬件打交道、承担这些职责的核心程序就是 kernel
- 广义 operating system = kernel + system programs:内核之外还包括随系统发行的系统程序(shell、窗口系统、文件管理工具等),其中一些服务也会常驻
- 狭义 operating system = kernel:图 1.1 中间那层 "operating system",实际画的就是 kernel(所以图中称 operating system,此时应称为 kernel)
- 对比总结
- kernel:在受保护的特权模式下管理资源的核心;具体权限层次与代码规模取决于体系结构和内核设计
- operating system:更宽泛的概念,通常按"厂商发行了什么"界定,以 kernel 为核心
-
"kernel 是一个 program"只是暂时的说法:随着逐步去开发一个 kernel,你会发现它更像是一种服务 (service)——kernel 里有大量代码和数据结构,可供外部程序调用
Boot¶
- bootstrap program is loaded at power-up or reboot
- Stored in ROM or EPROM, known an firmware
- Initialize all aspects of system
- Loads operating system kernel and starts execution
- 启动过程可以有多个阶段:固件先执行,再由引导加载程序加载内核;不能把所有阶段都理解成同一段固化在 ROM 中的代码。详细流程留到 System Boot。
Computer Organization¶
- memory:所有指令和数据都存放在内存;指令从 memory 加载到处理器执行(取指, fetch)
- CPU:里面有一大堆寄存器 (register)——放指令、放操作数、维护 stack pointer 等关键信息;程序切换运行时要更新寄存器组 (register set)
- I/O 设备:显卡/GPU(最早用于绘图,"阴差阳错"变成通用 AI 计算)、USB 外设(鼠标、键盘)、硬盘等
- 设备本身提供各种资源:磁盘是存储资源、内存是内存资源、鼠标键盘是 I/O 资源、GPU 含处理资源——连同处理器本身,都需要 OS 来管理
- device driver(设备驱动程序):设备的控制器由软件来驱动管理,这个软件就是 device driver,是 OS 的一部分;装一个新设备,OS 里就多一个对应驱动
- CPU 本质上做的事情很简单:不停地在 memory ↔ register 之间搬数据、运行指令、给设备控制器发指令让它工作
- 中断 (interrupt):设备完成操作后通过中断通知 CPU——"我做完了,数据给你了,你来处理";但中断打断的是正在运行的程序,所以 OS 必须及时介入,判断是哪个设备发出的中断、接下来干什么——中断处理由 OS 提供
设计哲学¶
- Sharing(共享):OS 把计算资源分享给不同的用户、不同的程序(以后称为进程)
- 例如处理器调度:CPU 定期或不定期地释放自己正在处理的任务,转去运行一段无关的代码,由这段代码选择下一个占用处理器的程序——以此实现 CPU 在多个程序之间的共享
- Isolation(隔离):我的程序就是我的程序,你的程序就是你的程序;kernel 与 everything else 划清界限,但外部程序可以调用 kernel 提供的服务(如往屏幕输出文字)
- Abstraction(抽象):进程、线程、文件、virtual memory、调度、文件系统……这些概念全是 OS 创造出来的,是人类智慧的结晶——有计算机之前它们并不存在
- Isolation 与 Sharing 是相冲突的:隔离 = 不要搞在一起,共享 = 要搞在一起。OS 通过 Abstraction 实现了这对对立的统一——既共享资源,又保证有序、互不搅和(现在没感觉没关系,越学越具体)
参考补充:用三条主线串起后续章节¶
| 主线 | 要解决的问题 | 课程中的落点 |
|---|---|---|
| Virtualization(虚拟化) | 怎样让多个程序方便地使用有限的物理资源? | 用进程和调度分享 CPU,用虚拟地址空间组织和隔离内存 |
| Concurrency(并发) | 多条执行流交错访问共享状态时,怎样保持正确? | 线程、锁、同步与死锁 |
| Persistence(持久化) | 程序退出、重启甚至崩溃后,怎样保留数据? | 文件、目录、文件系统与恢复机制 |
这里的虚拟化比“运行一台虚拟机”更宽泛。并发问题在单核交错执行时也会出现,并不要求多核同时运行。三条主线与课堂的 sharing / isolation / abstraction 是观察同一系统的不同角度。参见 OSTEP 第 2 章。
Interrupt & Trap¶
- 中断处理流程(微观视角):
- 中断发生,控制转到 OS——具体就是处理器跳转到中断向量 (interrupt vector):一张存有所有中断服务程序地址的表,用下标 (index) 定位到对应表项
- 控制转到该地址指向的代码,即中断服务程序 (interrupt service routine)
- 以 I/O 中断为例:输入数据暂存在 kernel 里,中断从 kernel 返回用户程序时,再把数据拷贝给用户程序
- An operating system is interrupt driven——中断是 OS 极其重要的组成部分
- 中断的分类:
- interrupt(硬中断):由硬件触发
- trap(软中断):由软件引起,又分两种:
- error/异常:例如非法访问;异常可能被修复后继续执行,也可能导致程序收到信号或终止。按需分页产生的缺页异常不一定是程序错误
- system call(系统调用):用户程序故意调用系统提供的服务(如输出一段文本到 terminal)——这个词要牢牢记住,以后要自己实现
- RISC-V 术语对照(实验基于 RISC-V,看手册别被术语迷惑):
- Trap 是控制权转移的总称,原因分为 interrupt(异步中断)与 exception(同步异常);
ecall属于后者 - 用户态系统调用通常通过 environment call (
ecall) 请求执行环境服务;ecall也能用于其他执行环境调用,不能脱离运行模式把它一概等同于用户态系统调用。术语依据:RISC-V 特权架构导论
- Trap 是控制权转移的总称,原因分为 interrupt(异步中断)与 exception(同步异常);
参考补充:中断与轮询¶
Polling(轮询)由 CPU 主动检查设备状态;interrupt(中断)由事件通知 CPU 进入处理入口。比如等待磁盘完成时,可以反复读状态寄存器,也可以先运行别的任务,待完成中断到来再收尾。
轮询可能消耗 CPU 时间,中断也有保存现场与处理开销,因此两者可以结合使用。不要将“中断驱动”理解为所有 I/O 都只用中断,也不要将“同步 I/O”直接等同于“CPU 忙等”。
中断控制器与 IRQ(x86 示例)¶
- CPU 之外有一块专门的芯片:中断控制器 (interrupt controller),老 Intel 架构中就是 8259
- 把 CPU 想象成特别忙的明星:不可能亲自接所有通告,它只与"助理"(中断控制器)对接;外部各种中断请求通过 IRQ(interrupt request,中断请求线路的编号) 汇入,不同中断类型有不同的 IRQ 编号
- 两次中断应答的握手流程(8259A 的 8086/8088 模式):
- 设备(如打印机)任务完成,8259 向 CPU 发中断请求:"数据搬运好了,你要不要接管继续处理?"
- 第一次 INTA:8259A 确定被响应的请求,设置相应的 in-service 位并清除 pending 位;这一周期不向数据总线输出向量号
- 第二次 INTA:8259A 将中断向量号放到数据总线上,供 CPU 读取
- CPU 开始正式执行中断服务程序 (ISR)
应答中断不等于处理完成
非自动 EOI 模式下,处理程序还需要发送 EOI(End of Interrupt),清除控制器的相应 in-service 状态。设备侧的中断原因也需按设备协议处理。第二次 INTA 不能概括为“撤销 IRQ、处理完毕”。核对依据:Intel 8259A 数据手册,第 7、9 页。
I/O¶
- I/O 与中断密切相关,宏观上由 OS 管理(也存在不牵涉具体物理设备的 I/O,以后会见到)
- 流程:用户程序通过 system call 发起 I/O 请求 → 设备执行 I/O → 完成后设备发起中断 → 控制转到中断处理程序 → 中断返回,用户程序拿到 I/O 结果继续运行
- 两种 I/O 模式:
- 同步 (synchronous):I/O 操作完成后控制才返回调用程序(C 语言里的
read/fread就是同步的) - 异步 (asynchronous):I/O 操作还没完成,控制就已经返回调用程序
- 同步 (synchronous):I/O 操作完成后控制才返回调用程序(C 语言里的
- 课堂演示(同步 vs 异步):
read()同步读 4 秒——期间 UI 完全冻结、无任何更新;换成POSIX aio_read()异步读——UI 持续保持响应 - 这里演示的是在执行 UI 更新的线程里等待 I/O 的情形;不能据此认为同步 I/O 一定会让整个系统停下来,也不能据演示的吞吐数字判断异步总比同步快。

9 月 17 日补记的依据
原笔记停在同步/异步 I/O;下文补到 Process Management,与第二章开头的内存、存储和 I/O 管理衔接。依据为智云课堂 2026-09-17 第 7–8 节的 PPT 截图 ppt_037–ppt_052(课件页码 1.34–1.50)。该录像约 07:03–50:30 的字幕混入了其他课程内容,这一段按课件整理,不作为老师口述的逐字记录。
Device-Status Table¶
- 设备状态表为每个 I/O 设备保留一个条目,记录设备类型、地址和状态(如 idle / busy)。
- 忙碌设备还可以关联等待处理的请求队列;请求里包含操作类型、数据地址、长度等信息。
- 区分三个容易混淆的对象:interrupt vector 用于找到中断处理入口;device-status table 用于管理设备及请求;CPU context 保存被打断程序的 PC、寄存器等执行状态。
DMA:批量搬运数据¶
Direct Memory Access(直接内存访问)用于高速 I/O:CPU 设置传输任务后,由控制器在设备缓冲区与主存之间搬运数据块,CPU 不必逐字节参与搬运。
- CPU / 驱动准备缓冲区并设置传输方向、地址和长度。
- 控制器完成数据传输,CPU 可以处理其他工作。
- 传输完成后通知 CPU,由 OS 做后续处理。
课件用“每块一次中断,而非每字节一次中断”说明减少 CPU 开销的思路。DMA 仍需要 CPU / OS 配置与收尾;它解决的是谁搬数据,同步/异步解决的是调用何时返回,两者是不同维度。
Storage Structure 与 Hierarchy¶
- Main memory(主存):CPU 可直接寻址的大容量工作存储,程序的指令和数据要进入这一层才能执行、处理。
- Secondary storage(二级存储):提供较大容量、非易失的存储,如硬盘、SSD。CPU 访问磁盘文件通常需要通过 I/O 将数据送入主存。
- 机械磁盘的盘面按 track(磁道)、sector(扇区)组织;disk controller 负责与主机的交互。不要把机械磁盘结构直接套用到 SSD。
存储层次与缓存¶
典型层次是 register → cache → main memory → secondary storage。越靠近 CPU,通常访问越快、容量越小、每字节成本越高;易失性也是区分存储层次的重要维度。

- Caching:把较慢一层的数据复制到较快的一层,以便后续访问更快;主存也可以用来缓存二级存储中的内容。
- 同一份数据可能同时出现在磁盘、主存、cache、register 中,因此必须考虑哪一份是有效值,以及修改如何对其他使用者可见。
- 多处理器可能各有 cache,需要 cache coherence(缓存一致性)机制协调副本。它不替代程序中的同步:共享数据仍可能发生竞争。
- 课件性能表的容量和延迟是示例,学习重点是层次间的数量级差异,不把表中数字当成所有机器的固定参数。
Multiprocessor、Multicore 与 NUMA¶
参考补充:先区分芯片、核心和执行上下文¶
- Processor / package 常指一颗物理处理器芯片;一颗芯片可以包含多个 core(核心)。
- OS 可调度的 logical CPU(逻辑处理器)不一定与核心一一对应;支持 SMT 的核心可呈现多个硬件执行上下文。
- RISC-V 的 hart(hardware thread)指硬件执行线程;不要与软件创建的线程混淆。“CPU”在教材和工具中可能指不同层次,要看上下文。
因此,“8 个逻辑 CPU”不能直接推出“8 颗芯片”,也不能推出任意程序一定能加速 8 倍;任务可并行的程度、同步和内存带宽都会限制收益。
| 概念 | 课件中的结构 | 对 OS 的影响 |
|---|---|---|
| SMP(对称多处理) | 各处理器有自己的寄存器,通过互连共享物理内存 | 在处理器之间分配任务,协调共享数据访问 |
| Multicore(多核) | 一块芯片包含多个执行核心;课件例子中各有 L1,共享 L2 | 可并行执行,片内通信通常比跨芯片通信更便宜 |
| NUMA(非一致内存访问) | 不同 CPU / 节点连接各自的本地内存,也能经互连访问远端内存 | 远端访问较慢,调度和内存分配要一起考虑数据局部性 |
NUMA 的关键是访问不同位置的内存,代价不同。例如一个任务的数据主要位于某节点,调度时让它尽量靠近该节点,可以减少远端访问。多核并不规定所有机器都采用课件中的 cache 共享方式。
Multiprogramming 与 Multitasking¶
来源:9 月 17 日课件 1.45–1.46;9 月 20 日 12:03–14:30 的随堂题再次解释了两者目的。
| 概念 | 核心目标 | 基本做法 |
|---|---|---|
| Multiprogramming(多道程序设计) | 提高 CPU utilization,尽量让 CPU 有活干 | 内存中保留多个作业,一个等待 I/O 时切换到另一个可运行作业 |
| Timesharing / Multitasking(分时 / 多任务) | 改善 interactivity,让用户及时得到响应 | 更频繁地切换任务,使多个程序都能持续取得进展 |
- 一个任务等待 I/O,不意味着 CPU 必须跟着空闲;OS 可以调度其他任务。
- 单核上通过交替运行实现并发;多核才可能让多个任务在同一时刻真正并行执行。
- 多个任务同时准备好时,需要 CPU scheduling;任务的数据放不下时,需要内存管理、换入换出等机制。
- Virtual memory 允许进程在并非全部内容都驻留物理内存的情况下运行,后续内存管理章节会展开。
Dual Mode 与 Timer¶
用户态和内核态¶
OS 需要保护自身和其他程序,防止用户程序任意访问资源或修改系统状态。
- User mode:应用程序通常执行的权限级别。
- Kernel mode:内核处理受保护操作时使用的权限级别;某些 privileged instructions(特权指令)只能在相应高权限下执行。
- 区分模式需要硬件支持,不能仅靠程序自觉遵守。课件用 mode bit 表示两种模式;具体体系结构可能有更多特权级。
- 用户程序主动请求内核服务时使用 system call;硬件中断和异常也可能把控制权交给内核。进入内核并不只有系统调用这一种原因。
参考补充:模式切换不等于进程切换¶
| 操作 | 改变的是什么? | 例子 |
|---|---|---|
| Mode switch(模式切换) | CPU 执行的权限级别 | 进程 A 发起系统调用,由用户态进入内核态 |
| Context switch(上下文切换,此处指调度切换) | 当前运行的线程 / 进程及其执行现场 | A 等待磁盘,调度器改为运行 B |
一个立即完成的系统调用可以按 A 用户态 → 内核为 A 服务 → A 用户态返回,期间没有调度到 B。若 A 阻塞,才可能发生 A 进入内核 → 切换到 B → 日后恢复 A。两者经常出现在同一路径上,却不是同一个动作。
Timer:OS 怎样重新拿回 CPU?¶
用户程序即使执行死循环、从不主动系统调用,OS 也必须能重新获得控制权。因此,OS 在交出 CPU 前设置定时器,由硬件在到期时触发中断。
运行用户程序 → 定时器到期 → 进入内核的中断处理 → 根据调度策略继续当前任务或切换任务。
定时器提供“到期打断”的能力,调度器决定“接下来运行谁”。不要把时间片到期直接等同于终止进程,也不要把课件的倒计时示意理解为 OS 必须占着 CPU 不断递减计数。
Process Management¶
- Program 是静态的程序,process 是程序的一次执行。进程需要 CPU、内存、I/O、文件等资源,结束时 OS 要回收可复用的资源。
- 单线程进程只有一条执行流,可用一个 PC 描述其下一条指令位置;多线程进程中的每个线程各有执行位置和上下文。
- OS 的进程管理职责包括创建与删除、挂起与恢复、调度,以及提供同步、通信和死锁处理机制。
- 多个进程可以共享 CPU 时间,但不能因此随意访问彼此的数据;这里同时体现 sharing 与 isolation。
内存管理、存储管理与 I/O 子系统的概述接在第二章笔记开头,保留原有课堂记录的顺序。
参考来源与许可¶
- 选题与补充参考:NoughtQ,Introduction(Markdown 源文件),访问日期 2026-09-22。
- 原仓库采用 CC BY-NC-SA 4.0。本页参考补充对相关内容作了重组、改写并加入辨析;其中改编内容按同一许可提供。
- 一手核对资料见对应段落中的 OSTEP、RISC-V 手册与 Intel 数据手册链接。