考研学习
解题方法操作系统

操作系统第 1 章:操作系统概述

408 操作系统「操作系统概述」复习:核心知识点、真题题型、通用解法与易错点。

Last updated on

本章依据本站 408 真题「操作系统第 1 章 操作系统概述」 和 408 模拟选择题「第 1 章 计算机系统概述」 整理。站内这一章的真题覆盖很完整:发展历程、运行环境、操作系统结构、引导;其中真正的绝对重点是 用户态/内核态 + 特权指令 + 中断异常 + 系统调用。站内也明确建议按“真题确定命题方式,模拟题补充盲点”的顺序复习。(Any Docs)

内容按照 408 实际题型 组织,而不是机械按教材知识点展开。


一、先建立这一章的完整知识地图

这一章看起来知识点零散,实际上只有五条主线:

  1. 操作系统是什么、为什么需要它

    • 操作系统功能
    • 并发、共享、虚拟、异步
    • 用户接口、系统调用
  2. 操作系统怎么发展来的

    • 手工操作
    • 单道批处理
    • 多道批处理
    • 分时系统
    • 实时系统
    • 多任务系统
  3. CPU怎样把操作系统和普通程序隔离开

    • 用户态 / 内核态
    • 特权指令
    • 非特权指令
  4. CPU怎样从用户程序进入操作系统

    • 中断
    • 异常
    • Trap
    • 系统调用
    • 现场保护
  5. 操作系统自己怎么组织和启动

    • 宏内核
    • 微内核
    • 模块化、分层结构
    • BIOS/UEFI → 引导程序 → 内核 → RAM

从网站真题数量也能看出来,第3、4条远远比其他部分重要。2010、2011、2012、2013、2014、2015、2017、2019、2021、2022、2023、2024连续多年都从运行环境这里命题。(Any Docs)


二、题型一:并发和并行的判断

这是最基础,但非常容易被语言绕进去的题型。

1. 必须先分清两个概念

并发

多个事件在同一时间段内交替发生。

单核 CPU:

P1 执行一会儿 → P2 → P1 → P3……

宏观上同时运行,微观上同一时刻只有一个程序占 CPU。

并行

多个事件在同一个时刻真正同时发生。

必须存在彼此独立、能同时工作的硬件执行部件。


典型真题:2009年

题目问:

在单处理机系统中,下列哪些能够并行? I. 进程与进程 II. 处理机与设备 III. 处理机与通道 IV. 设备与设备

答案:II、III、IV,即 D。 (Any Docs)

怎么判断?

这里的“单处理机”意味着只有一个 CPU。

因此两个进程:

P1 和 P2 都需要 CPU。

同一瞬间 CPU 只能给一个:

所以

进程 ↔ 进程:只能并发,不能并行。

但是 CPU 和磁盘呢?

CPU 可以算:

CPU:执行 P2

同时磁盘控制器可以:

磁盘:为 P1 做 I/O

因此:

  • CPU 与设备:可以并行
  • CPU 与通道:可以并行
  • 不同设备之间:可以并行

这类题的万能判断法

看到“A和B能不能并行”,直接问:

A、B 是否必须争抢同一个硬件执行部件?

如果都必须占同一个单核 CPU:

不能并行。

如果一个用 CPU,一个用 I/O 控制器:

可以并行。


三、题型二:多道程序设计

第 1 章最核心的历史知识不是年份,而是:

为什么需要多道程序?


1. 单道程序的问题

假设程序执行过程:

CPU 计算 → 磁盘 I/O → CPU计算

当程序等待磁盘时:

CPU只能闲着。

所以 CPU 利用率很低。


2. 多道程序的思想

内存同时放:

P1、P2、P3……

P1等待磁盘:

P1 → 阻塞

操作系统马上让:

P2 → CPU

于是:

CPU与I/O设备同时工作。

这才是多道程序最本质的目的:

用一个程序的 I/O 等待时间,执行另一个程序。


四、典型真题:2017年

题目:

与单道程序系统相比,多道程序系统有哪些优点? I. CPU利用率高 II. 系统开销小 III. 系统吞吐量大 IV. I/O设备利用率高

答案:

I、III、IV,即 D。(Any Docs)

原因:

CPU利用率提高

一个进程等待:

换另一个进程。

I/O设备利用率提高

不同任务可以同时使用 CPU 和不同 I/O 设备。

吞吐量提高

单位时间完成的作业更多。

但:

系统开销并不会变小。

因为多道程序引入了:

  • 调度
  • 进程切换
  • 内存管理
  • 同步互斥
  • 资源管理

所以复杂度反而增加。


五、超级高频陷阱:程序越多,CPU利用率越高?

2022年真题

题目让选多道程序系统中错误的说法,其中包括:

“进程数越多,CPU利用率越高。”

答案就是这项错误。(Any Docs)

初学者很容易想:

多道程序可以提高利用率 → 那多道程序度越大越好?

不对。

前半段通常成立:

1个 → 2个 → 3个程序

CPU等待I/O的概率下降。

理想化模型中,如果每个进程等待 I/O 的概率为 ,有 个相互独立的进程,则所有进程都等待 I/O 的概率约为:

CPU利用率可粗略表示为:

于是最开始提高 ,CPU利用率会提高。

但真实系统继续增加进程会产生:

  • 上下文切换开销
  • 内存不足
  • 缺页增加
  • Cache/TLB污染
  • 资源竞争
  • 甚至抖动

因此:

适度提高多道程序度可以提高 CPU 利用率,但绝不是越多越好。

模拟题也专门拿这个绝对化说法继续考。(Any Docs)


六、题型三:批处理、分时、实时系统区别

这是典型概念辨析题。


2016年真题

题目:

关于批处理系统: I. 允许多个用户直接与计算机交互 II. 分为单道批处理和多道批处理 III. 中断技术使多道批处理系统中CPU和I/O可以并行

答案:

II、III,即 A。(Any Docs)


三种系统一定要这样区分

系统最核心目标用户交互关键特点
批处理吞吐量弱成批提交
分时响应快强时间片、交互
实时截止时间有或无按时完成

批处理

用户把任务交进去:

提交 → 等结果

作业运行过程中一般不能随时交互。

分时系统

CPU快速轮流服务:

用户A → 用户B → 用户C → 用户A……

强调:

人机交互 + 响应时间。

实时系统

重点根本不是“快”。

而是:

必须在规定时间内产生正确响应。


模拟题很好地考了这个坑

站内竟成模拟题问:

分时系统中的任务是不是必须在约定时间内完成?

答案:不是。

必须满足严格截止时间的是:

实时系统。

分时系统主要要求:

响应及时。(Any Docs)


七、题型四:多任务系统是否必须多CPU?

2018年真题

题目:

多任务操作系统: I. 具有并发和并行特点 II. 要保护共享资源 III. 必须运行于多CPU平台

答案:

I、II,即 C。(Any Docs)

最重要的是 III:

多任务 ≠ 多CPU。

一个 CPU 也可以:

P1 2ms → P2 2ms → P3 2ms……

从而实现并发。

多核只是让部分任务进一步:

真正并行。


八、操作系统的四个基本特征

虽然相应的真题页没有单独大量命题,但模拟题和后续章节会不断隐含使用。

必须掌握:

并发、共享、虚拟、异步。


1. 并发

多个程序同时存在于系统,并在时间上交错运行。

2. 共享

系统资源供多个并发进程使用。

分:

  • 互斥共享
  • 同时共享

3. 虚拟

把一个物理资源表现成多个逻辑资源。

CPU虚拟化

时间复用:

每个进程都仿佛拥有一个CPU。

内存虚拟化

空间复用、虚拟内存:

每个进程都仿佛拥有独立地址空间。

设备虚拟化

典型:

SPOOLing。

模拟题就问过时间片、内存分区和 SPOOLing 是否属于资源虚拟化。(Any Docs)

4. 异步

进程按不可预知速度向前推进。

因为:

  • 调度时机不固定
  • I/O耗时不同
  • 中断发生时刻不同

因此多道程序具有:

异步性。


九、本章真正的第一大重点:用户态和内核态

下面开始进入408极高频区。

CPU通常至少提供两种特权级:

用户态 内核态

也叫:

目态 / 管态 用户模式 / 系统模式


用户态

普通程序运行。

只能执行:

非特权指令。


内核态

操作系统核心代码运行。

可以执行:

非特权指令 + 特权指令。

注意这个超级高频陷阱:

❌ 内核态只能执行特权指令。

错误。

正确是:

内核态什么都可以执行。


十、2022年真题:一句话拿下CPU模式

题目问:

下列关于CPU模式的说法哪个正确?

正确项:

CPU处于用户态时只能执行非特权指令。(Any Docs)

因此直接背:

CPU状态非特权指令特权指令
用户态✓×
内核态✓✓

这张表非常重要。


十一、题型五:什么是特权指令?

判断特权指令不要死背,用一个原则:

如果普通程序随便执行它,会不会破坏整个系统?

如果会:

大概率就是特权指令。


高频特权指令

1. I/O指令

因为可以直接控制设备。

2. 关中断

如果普通程序执行:

CLI 关闭中断

操作系统可能永远拿不回CPU。

3. 设置时钟/定时器

否则用户程序可以让自己的时间片:

永远不到期。

4. 修改页表

否则用户程序可以:

把自己的地址映射到操作系统或别人的内存。

5. 修改中断向量表

否则恶意程序能修改:

中断处理入口。


十二、2014年真题:Trap是不是特权指令?

题目:

哪条指令不能在用户态执行?

选项包括:

  • trap
  • 跳转
  • 压栈
  • 关中断

答案:

关中断。 (Any Docs)

这个题非常重要,因为学生最容易误选:

Trap。

实际上:

Trap恰恰必须允许用户态执行。

为什么?

因为用户程序需要通过它:

主动请求操作系统服务。

如果 Trap 只能内核态执行:

用户程序根本没办法合法进入内核。

因此:

Trap 本身是非特权指令。

但:

Trap执行后,CPU转入内核态。

这两句话同时成立。


十三、2021年真题:I/O指令

题目:

下列哪条指令只能在内核态执行?

  • trap
  • I/O
  • 数据传送
  • 设置断点

答案:

I/O指令。 (Any Docs)

和2014真题合起来,即可能得到408的固定考法:

Trap——用户态可以执行。 I/O、关中断——用户态绝对不能正常执行。


十四、模拟题把这个题型拓展到了极致

站内题目问:

可以在用户态执行的有哪些? I. 除法 II. 初始化中断向量表 III. Trap IV. 内存取数 V. 修改PC VI. 关闭中断

答案:

I、III、IV、V,共4种。(Any Docs)

这道题很适合训练判断原则。

除法

普通计算:

可以。

修改PC

普通跳转、函数调用本质都在改变PC:

可以。

否则程序连 if、for、call 都跑不了。

普通访存

合法用户空间:

可以。

初始化中断向量表

影响整个系统:

特权。

关闭中断

影响OS接管CPU:

特权。


十五、第二大重点:什么事件会导致用户态 → 内核态?

记住三个入口:

中断 + 异常 + 系统调用。

可以把它画成:

                   ┌──────── 外部中断
                   │
用户态 ────────────┼──────── 异常
                   │
                   └──────── 系统调用 / Trap
                             ↓
                           内核态

十六、中断、异常、系统调用到底有什么区别?

这是408最爱综合考的地方。

1. 中断 Interrupt

来自当前CPU执行指令之外。

典型:

  • 键盘
  • 鼠标
  • 磁盘完成
  • 网卡
  • 定时器

所以是:

外部、异步。


2. 异常 Exception

由当前正在执行的指令引起。

例如:

  • 除零
  • 缺页
  • 地址越界
  • 非法指令
  • 保护异常

因此:

内部、同步。


3. 系统调用

用户程序:

主动请求OS服务。

例如:

  • read()
  • write()
  • fork()
  • open()
  • exit()

底层一般通过:

trap / syscall / svc 等指令

产生一个受控异常:

用户态 → 内核态。


十七、2013年经典真题

题目:

哪些操作会导致用户进程从用户态切换到内核态? I. 整数除以0 II. sin() III. read系统调用

答案:

I、III。(Any Docs)

逐项判断。

I 除零

CPU检测到异常:

用户态 → 内核态。

II sin()

通常是普通数学库函数。

可以直接在用户空间算:

不必进入内核。

III read()

要读取文件/设备:

系统调用 → 内核态。


十八、非常重要:库函数 ≠ 系统调用

这一点以后学文件、I/O还会一直考。

比如:

sin(x)

通常纯用户态计算。

但是:

read(fd, buf, n)

需要内核访问文件系统或设备:

系统调用。

不过现实操作系统里:

某些库函数内部可能调用系统调用。

所以不能记成:

所有库函数都不进内核。

408 真正需要掌握的是:

“库函数”和“系统调用”不是同一个概念。


十九、2015年真题:一条普通指令也可能进内核

题目给出:

  • DIV
  • INT
  • NOT
  • MOV访问内存

问:

哪个执行时“不可能”使CPU从用户态进入内核态?

答案:

NOT。 (Any Docs)

这道题非常有价值。


DIV

普通除法本身可以用户态执行。

但是:

除数 = 0

会产生:

除零异常。

所以:

可能进内核。


INT

直接产生软中断:

可以进入内核。


MOV访问内存

MOV本身是普通指令。

但访问地址可能:

  • 缺页
  • 越界
  • 权限错误

因此:

可能产生异常 → 内核态。


NOT

只在CPU寄存器中做按位取反:

基本没有产生OS异常的正常途径。

因此题目问“不可能”:

NOT。


二十、这里有一个超级重要的考试方法

一定区分:

“这是不是特权指令?”

和:

“执行这条指令是否可能导致进入内核态?”

完全不是一回事。

例如:

DIV

非特权指令。

但是:

除零 → 异常 → 内核。

MOV

非特权指令。

但是:

缺页 → 异常 → 内核。

Trap

非特权指令。

但是:

本来就是为了进入内核。

这是第一章最容易混淆的一层。


二十一、2012年真题:什么“不可能在用户态发生”?

题目:

下列哪些事件不可能在用户态发生?

  • 系统调用
  • 外部中断
  • 进程切换
  • 缺页

答案:

进程切换。 (Any Docs)

这题真正考一句话:

“发生在用户态” ≠ “在用户态处理”。

例如:

用户程序正在执行:

MOV...

突然磁盘中断。

此时:

中断是在CPU原本处于用户态时发生的。

随后CPU:

→ 内核态处理。

因此外部中断:

可以在用户态运行过程中发生。

同理缺页:

用户态访问一个未驻留页 → 缺页发生 → CPU进入内核态。

但进程切换:

必须由调度/上下文切换代码执行。

而这些都是:

内核代码。

所以进程切换本身:

不可能在用户态执行。


二十二、2024年真题又考了同一个语言陷阱

题目问:

关于中断、异常、系统调用,哪项错误?

其中错误项是:

“中断或异常发生时,CPU处于内核态。”

为什么错?

因为可能:

用户态运行时发生中断/异常。

正确说法应该是:

CPU开始执行中断或异常处理程序时,CPU处于内核态。 (Any Docs)

以后看到:

发生时 响应时 处理时

一定一个字一个字看。


二十三、第三大重点:系统调用

这是本章出现真题最密集的知识点之一。

定义:

系统调用是操作系统内核向应用程序提供服务的程序接口。


二十四、2010年真题

题目:

操作系统提供给应用程序的接口是什么?

选项:

  • 系统调用
  • 中断
  • 库函数
  • 原语

答案:

系统调用。 (Any Docs)


四个概念必须区分

系统调用

应用程序 → 操作系统

中断

CPU取得控制权的一种机制

库函数

用户程序库提供的函数

原语

操作系统内部:

不可分割的一段基本操作。

不是提供给普通应用程序的接口。


二十五、系统调用完整过程

这个流程必须直接背成一条链。

假设用户执行:

read(fd, buffer, n)

可以抽象成:

用户态
   ↓
准备系统调用号、参数
   ↓
执行 Trap / syscall
   ↓
硬件保存关键现场
   ↓
CPU切换为内核态
   ↓
进入系统调用入口
   ↓
操作系统保存其余现场
   ↓
查找具体服务程序
   ↓
执行 read 服务
   ↓
恢复现场
   ↓
返回用户态

二十六、2017年真题:系统调用顺序

题目给:

I. 返回用户态 II. 执行trap III. 传递系统调用参数 IV. 执行服务程序

正确:

III → II → IV → I。(Any Docs)

记成:

参数 → Trap → 内核服务 → 返回


二十七、2022年真题:哪些是硬件做,哪些是OS做?

这是第一章最值得重点掌握的题之一。

题目:

系统调用过程中: I. 保存断点和PSW II. 保存通用寄存器 III. 执行系统调用服务例程 IV. CPU切换到内核态 哪些由操作系统完成?

答案:

II、III。(Any Docs)

所以一定记下面这张表。

操作通常负责者
保存断点 PC硬件
保存 PSW硬件
修改 CPU 模式硬件
找到入口并跳转硬件机制
保存更多通用寄存器OS
执行服务程序OS
调度等高层操作OS

可以简单理解:

硬件先把CPU安全送进内核,OS再正式接管。


二十八、2015年真题:中断现场谁保存?

题目:

外部中断发生时,应该由操作系统保存的是哪个?

  • PC
  • 通用寄存器
  • TLB
  • Cache

答案:

通用寄存器。 (Any Docs)

原因与前面完全一致:

硬件至少保证保存:

PC + PSW

OS进入处理程序以后再保存:

通用寄存器等软件现场。


二十九、2012年真题:中断和普通函数调用有什么区别?

题目:

中断处理和子程序调用都要保护现场,哪项是中断一定要保存而普通子程序调用不一定需要保存的?

答案:

PSW(程序状态字)。 (Any Docs)

为什么?

普通函数:

main
 ↓
foo()
 ↓
main

主要保存:

返回地址。

但是中断会改变:

  • CPU工作模式
  • 中断允许状态
  • 条件码等处理器状态

这些通常存在:

PSW

所以中断必须恢复原状态。


三十、系统调用与进程切换千万别画等号

系统调用:

用户态 → 内核态

但不意味着:

一定换进程。

例如:

getpid()

进入内核取一个数据:

原进程继续运行。

所以:

模式切换 ≠ 进程切换。

同样:

中断 ≠ 进程切换。

站内模拟题也明确考过:

CPU响应中断,并不一定发生进程切换。(Any Docs)


三十一、用一张图彻底理顺

                    当前进程 P1
                         │
                         │ 用户态
                         ↓
                  执行普通用户程序
                         │
           ┌─────────────┼─────────────┐
           │             │             │
        系统调用         异常          外部中断
         Trap         缺页/除0       时钟/设备
           │             │             │
           └─────────────┼─────────────┘
                         ↓
                       内核态
                         │
                 执行对应处理程序
                         │
                  是否需要调度?
                    /           \
                  否             是
                  │              │
               返回P1         切换P2

所以以后别再把:

进入内核态

和:

切换进程

混成一件事。


三十二、2021年真题:哪些操作属于系统调用?

题目:

哪个操作通过系统调用完成?

  • 页置换
  • 进程调度
  • 创建新进程
  • 生成随机数

答案:

创建新进程。 (Any Docs)

这类题可以用一个很好用的判断方法:


用户主动请求内核服务

通常是系统调用。

例如:

  • 创建进程
  • 终止进程
  • 打开文件
  • 读写文件
  • 分配某些资源
  • 网络通信

内核自己为了管理系统而做

通常不是“应用程序调用的系统调用”。

例如:

  • 页置换
  • 进程调度
  • 中断处理
  • 页面换入
  • TLB管理

这些是:

内核内部机制。


三十三、2019年真题:系统调用四句话

题目判断:

I. 服务程序运行于内核态 II. 系统调用可避免应用直接控制设备 III. 所有操作系统提供统一系统调用接口 IV. 系统调用是内核向应用提供服务的接口

答案:

I、II、IV。(Any Docs)

错误的是:

不同OS系统调用并不统一。

比如:

Linux ≠ Windows。

甚至同一个Linux:

x86和ARM底层进入内核的机器指令也可能不同。

模拟题正好继续考了这个问题:同一硬件平台上的不同OS通常利用硬件提供的同类陷入指令;而Linux移植到不同指令集后,底层系统调用指令可能不同。(Any Docs)


三十四、题型六:中断的全过程

中断实际上连接了:

组成原理 + 操作系统。

408特别喜欢跨科。

一个典型外部中断:

设备完成I/O
 ↓
设备控制器发出中断请求
 ↓
CPU完成当前指令
 ↓
检查中断
 ↓
保护关键现场
 ↓
根据中断号查中断向量表
 ↓
转入中断服务程序
 ↓
OS处理中断
 ↓
恢复现场
 ↓
返回

三十五、中断向量表为什么用数组?

2023年真题

题目:

中断向量表最适合使用哪种数据结构?

答案:

数组。 (Any Docs)

原因:

有:

中断类型号

希望直接找到:

第 个中断入口。

数组:

直接索引。

链表:

没必要。

这是典型:

数据结构 + 操作系统交叉题。


三十六、中断返回到哪条指令?

外部中断一般发生在:

一条机器指令执行完成后。

因此中断返回后:

通常执行原本下一条指令。

站内模拟题专门考过这一点。(Any Docs)

但异常就未必。

例如缺页:

MOV ...
 ↓
发现页不在内存
 ↓
缺页异常
 ↓
调页
 ↓
重新执行MOV

所以很多“故障型异常”处理完成后:

需要重新执行产生异常的那条指令。

这个差别非常重要。


三十七、2024年真题:键盘数据最后放哪?

题目:

键盘中断服务例程执行完成时,输入的数据放在哪里?

答案:

内核缓冲区。 (Any Docs)

流程:

键盘
 ↓
键盘控制器数据寄存器
 ↓
产生中断
 ↓
键盘中断服务程序
 ↓
内核缓冲区
 ↓
用户调用 read
 ↓
用户缓冲区

所以不要直接想:

键盘 → 用户数组。

中间必须由OS控制。


三十八、题型七:操作系统内核到底包含什么?

考试一般把内核理解为:

操作系统中运行于最高特权级、管理核心资源的一部分。

常见核心功能:

  • 中断处理
  • 时钟管理
  • 进程调度
  • 内存管理中的核心机制
  • 同步原语
  • 系统调用入口

三十九、宏内核和微内核

这是2023、2024以后非常值得重视的点。


宏内核

大量OS服务运行于:

内核态。

包括:

  • 文件系统
  • 设备驱动
  • 网络协议栈
  • 内存管理
  • 调度

典型思想:

用户程序
────────────────
巨大内核
 调度
 内存
 文件系统
 驱动
 网络
────────────────
硬件

优点

最重要:

性能高。

因为内核模块之间可以直接调用。

缺点

  • 内核庞大
  • 模块耦合高
  • 一个驱动出错可能影响整个系统
  • 安全隔离较弱

四十、微内核

微内核只留:

最基础的机制。

例如:

  • IPC
  • 基本调度
  • 中断
  • 低级地址空间管理

文件系统、设备驱动等:

放到用户态服务器。

应用
文件服务器
驱动服务器
网络服务器
────────────────
微内核
 IPC / 调度 / 中断
────────────────
硬件

四十一、2023年真题:微内核优缺点

题目:

相比宏内核,微内核具有什么特征? I 性能更好 II 可靠性更高 III 安全性更高 IV 可扩展性更强

答案:

II、III、IV。(Any Docs)

因此直接背:

微内核:可靠、安全、可扩展,但性能通常较差。

为什么性能差?

假设应用请求文件:

宏内核:

应用
 ↓ 系统调用
内核文件系统

微内核可能:

应用
 ↓
微内核
 ↓ IPC
文件服务器
 ↓ IPC
微内核
 ↓
应用

出现:

  • IPC
  • 上下文切换
  • 用户态/内核态切换

所以额外开销大。


四十二、模拟题:Unix是不是微内核?

站内题目问:

“Unix属于微内核操作系统”是否正确?

答案:

错。(Any Docs)

传统 Unix:

宏内核。

Linux一般也认为:

宏内核 / 模块化宏内核。

不要因为Linux支持模块:

就认为它是微内核。


四十三、其他内核结构了解这些即可

分层结构

第N层
...
第2层
第1层
硬件

优点:

  • 清晰
  • 易验证

缺点:

  • 层次不好划
  • 跨层调用困难
  • 可能增加开销

模块化结构

一个核心内核:

  • 可动态加载模块。

兼顾:

性能 + 可扩展性。

现代Linux大量采用这种思想。


外核 Exokernel

模拟题出现过,因此知道概念即可。

核心思想:

内核尽量只负责物理资源的安全分配和保护,把高级抽象交给用户态库操作系统。

408优先级:

微内核 > 宏内核 > 模块化/分层 > 外核。


四十四、题型八:操作系统启动过程

这里考得不多,但通常是送分题。


2013年真题

题目:

计算机开机后,操作系统最终被加载到哪里?

  • BIOS
  • ROM
  • EPROM
  • RAM

答案:

RAM。 (Any Docs)

原因:

CPU正常执行OS内核时:

内核必须进入主存。


四十五、经典BIOS启动流程

传统考研模型可以记:

按下电源
 ↓
CPU执行BIOS
 ↓
POST硬件自检
 ↓
寻找启动设备
 ↓
读取MBR/引导扇区
 ↓
运行Boot Loader
 ↓
加载操作系统内核
 ↓
内核进入RAM
 ↓
启动系统

模拟题问过:

BIOS引导第一步是什么?

答案:

硬件自检 POST。 (Any Docs)


四十六、引导扇区代码是谁写进去的?

模拟题问:

引导扇区中的代码来自哪里?

答案:

安装操作系统或安装引导程序时写入。 (Any Docs)

不是:

BIOS每次开机写进去。

BIOS自己通常存在:

主板ROM / Flash。

它做的是:

去找到磁盘上的引导程序。


四十七、现代机器的补充认识

现实中现在大量使用:

UEFI + GPT

而不是传统:

BIOS + MBR。

但408题目如果明确给:

BIOS、MBR、引导扇区

就按经典模型回答。

不要拿现代UEFI细节反驳题目模型。


四十八、真题逐题地图:复习时至少要知道每题在考什么

站内这一章的真题大致可以压成下面这张表。(Any Docs)

年份题目核心核心结论
2009单处理机哪些能并行进程间只能并发;CPU/I/O可并行
2010OS给应用的接口系统调用
2011哪个在用户态执行命令解释程序
2012不可能在用户态发生进程切换
2012中断与子程序保存现场中断必须保存PSW
2013除零、sin、read谁进内核除零、read
2013OS最终加载到哪里RAM
2014哪条是特权指令关中断
2015中断由OS保存什么通用寄存器
2015哪条不可能进内核NOT
2016批处理系统无直接交互;可多道
2017多道程序优点CPU/I/O利用率、吞吐量提高
2017系统调用步骤参数→Trap→服务→返回
2018多任务OS不要求多CPU
2019系统调用性质内核接口、内核态服务
2021特权指令I/O
2021系统调用操作创建进程
2022多道程序进程不是越多越好
2022CPU模式用户态只能非特权
2022系统调用硬件/OS分工OS保存通用寄存器、执行服务
2023内核→用户态系统调用返回
2023微内核安全、可靠、扩展性
2023中断向量表数组
2024中断/异常发生时状态发生时未必已经在内核态
2024键盘中断后的数据内核缓冲区

这张表本身就非常值得最后冲刺时反复看。


四十九、模拟题中值得额外掌握的几类拓展

模拟题共把第 1 章扩展到了更宽的范围,其中最有价值的是下面几种。


拓展1:哪些操作必须保护?

站内王道模拟题给:

哪个操作必须保护? 包括从内核态回用户态、读内核空间、打开定时器等。

答案:

操作定时器。 (Any Docs)

根本判断原则还是:

用户随便做会不会获得影响整个系统的能力?


拓展2:页面异常也会导致模式切换

模拟题:

页号越界、缺页等情况下CPU是否进入内核?

答案:

会。(Any Docs)

这虽然属于内存管理知识,但第 1 章必须建立联系:

用户访存
 ↓
MMU检查
 ↓
异常
 ↓
CPU进入内核
 ↓
OS处理

拓展3:系统调用发生阻塞后可以调度

模拟题问:

用户进程陷入内核执行系统调用期间,能否调度其他进程?

答案:

可以。(Any Docs)

例如:

read(disk)

需要磁盘:

P1进入内核
 ↓
发起磁盘I/O
 ↓
P1阻塞
 ↓
调度器
 ↓
P2运行

所以系统调用不是:

“进入内核马上原路返回”。


五十、第一章最容易混淆的10组概念

这部分建议重点看。

① 并发 vs 并行

并发:

时间段重叠。

并行:

同一时刻。


② 多任务 vs 多处理器

多任务:

单CPU也可以。


③ 用户态 vs 用户程序

有些“系统程序”:

shell、命令解释程序

照样可以运行于:

用户态。

“系统程序”不等于“内核程序”。

2011真题就考了命令解释程序。(Any Docs)


④ 特权指令 vs 导致陷入的指令

Trap:

非特权。

但会:

导致用户态→内核态。


⑤ 中断发生 vs 中断处理

中断:

可以在用户态运行期间发生。

中断处理程序:

在内核态执行。


⑥ 模式切换 vs 进程切换

模式切换:

P1用户态 → P1内核态

仍然可能是:

P1。

进程切换:

P1 → P2

是另一件事。


⑦ 系统调用 vs 库函数

库函数:

用户层接口。

系统调用:

内核接口。

库函数内部:

可能调用系统调用,也可能完全不调用。


⑧ 中断 vs 异常

中断:

外部 + 异步。

异常:

当前指令导致 + 同步。


⑨ 宏内核 vs 微内核

宏内核:

服务多、性能好、隔离差。

微内核:

服务少、IPC多、可靠安全、扩展性好。


⑩ BIOS vs OS

BIOS:

固件。

OS:

从磁盘等存储设备加载到RAM。


五十一、碰到“用户态能不能执行”题目的秒杀算法

以后题目给一堆指令,不要背列表。

问三个问题。

第一步:是否直接控制全局硬件?

例如:

  • I/O
  • 定时器
  • 中断

是:

特权。


第二步:是否修改系统保护机制?

例如:

  • 页表
  • 中断向量表
  • 内存保护寄存器

是:

特权。


第三步:是不是普通程序必须具备的基本能力?

例如:

  • 算术
  • 访存
  • 跳转
  • 压栈
  • Trap

通常:

用户态可以。

特别注意 Trap:

它是用户态进入内核的合法门。


五十二、碰到“会不会进入内核态”题目的秒杀算法

不要问:

“这条指令是不是特权指令?”

而要逐项判断:

A. 是否主动系统调用?

是:

进入。

B. 是否可能产生异常?

例如:

  • 除零
  • 缺页
  • 越界

是:

进入。

C. 执行期间是否可能收到外部中断?

理论上普通用户程序执行期间:

也可能。

因此题目如果写“执行该指令可能导致”:

要小心“可能”这个词。


五十三、碰到系统调用流程题

直接写:

准备参数
↓
执行Trap
↓
硬件保存PC/PSW
↓
切内核态
↓
OS保存通用寄存器
↓
执行内核服务
↓
恢复现场
↓
返回用户态

特别记:

硬件负责“进去”,OS负责“干活”。

这是2022真题的核心。(Any Docs)


五十四、碰到中断题,先分四层

这是一个非常好用的方法。

第1层:发生

谁产生?

外设 / 时钟 / 当前指令异常

第2层:硬件响应

CPU:

保存PC/PSW → 切内核态 → 找入口

第3层:OS处理中断

保存更多现场 → 执行ISR

第4层:后续

可能:

返回原程序

也可能:

进行进程调度。

所以:

中断 ≠ 必定调度。


五十五、这一章最容易被“绝对化词语”坑

408这章特别喜欢:

  • 一定
  • 所有
  • 只能
  • 越多越好
  • 必须
  • 立即

例如:

“进程越多CPU利用率越高”

错。

“中断一定导致进程切换”

错。

“微内核性能一定更高”

错。

“系统调用接口各OS统一”

错。

“内核态只能执行特权指令”

错。

因此遇到绝对化表述:

优先检查反例。


五十六、本章优先级

结合站内2009—2024真题,建议这样分。(Any Docs)

S级:必须完全掌握

1. 用户态 / 内核态

必须秒答。

2. 特权指令

I/O、关中断、时钟、页表等。

3. 系统调用

定义、过程、硬件/OS分工。

4. 中断和异常

来源、模式切换、现场保护。


A级:高频

5. 多道程序

优势、代价、CPU利用率。

6. 并发/并行

单CPU尤其重要。

7. 微内核/宏内核

近年来明显值得重视。


B级:必须会,但通常较简单

8. 批处理、分时、实时

9. OS功能与四特征

10. 操作系统引导


五十七、两道接近未来 408 风格的预测变式

预测题1

某用户进程正在执行:

LOAD R1, [addr]

若地址对应页面当前不在内存,则下列过程正确的是:

I. LOAD是特权指令 II. CPU产生缺页异常 III. CPU转入内核态 IV. 缺页处理完成后可能重新执行LOAD

应该判断:

I错误,II、III、IV正确。

关键

LOAD:

普通指令。

但:

普通指令也可能产生异常进入内核。

这正是2015真题的自然升级版。(Any Docs)


五十八、预测题2:综合系统调用 + 中断 + 调度

假设 P1 在用户态执行:

read(fd, buf, 4096);

随后磁盘尚未完成。

正确过程应为:

P1用户态
 ↓
Trap
 ↓
P1内核态
 ↓
OS发起磁盘I/O
 ↓
P1阻塞
 ↓
调度P2
 ↓
P2运行
 ↓
磁盘完成
 ↓
外部中断
 ↓
内核处理中断
 ↓
P1变为就绪

注意:

磁盘完成并不意味着P1立即运行。

只是:

P1获得重新竞争CPU的资格。

这道题把第 1 章和下一章的进程状态自然结合起来,非常符合408综合化趋势。


五十九、最后压缩成一套考场口诀

如果第 1 章只能带几句话进考场,就带下面这些:

单核进程只并发,CPU设备可并行。

多道提高利用率和吞吐量,但不是程序越多越好。

用户态只能非特权,内核态两种都能执行。

I/O、关中断、改页表、改时钟属于特权操作。

Trap必须允许用户态执行。

中断来自外部,异常来自当前指令,系统调用是主动Trap。

进入内核态不等于发生进程切换。

中断发生时未必已在内核态,中断处理程序一定在内核态。

系统调用:参数 → Trap → 内核服务 → 返回。

PC/PSW主要由硬件保存,通用寄存器和服务例程主要由OS处理。

微内核可靠、安全、易扩展,但IPC和切换多,性能通常较差。

BIOS先引导,OS最终进入RAM。

如果把这套逻辑真正理解了,操作系统第 1 章绝大多数408选择题基本都不需要纯背答案,而可以现场推出来。站内历年真题也非常明显地围绕这些规则反复做变式。(Any Docs)

On this page

一、先建立这一章的完整知识地图二、题型一:并发和并行的判断1. 必须先分清两个概念并发并行典型真题:2009年怎么判断?这类题的万能判断法三、题型二:多道程序设计1. 单道程序的问题2. 多道程序的思想四、典型真题:2017年CPU利用率提高I/O设备利用率提高吞吐量提高五、超级高频陷阱:程序越多,CPU利用率越高?2022年真题六、题型三:批处理、分时、实时系统区别2016年真题三种系统一定要这样区分批处理分时系统实时系统模拟题很好地考了这个坑七、题型四:多任务系统是否必须多CPU?2018年真题八、操作系统的四个基本特征1. 并发2. 共享3. 虚拟CPU虚拟化内存虚拟化设备虚拟化4. 异步九、本章真正的第一大重点:用户态和内核态用户态内核态十、2022年真题:一句话拿下CPU模式十一、题型五:什么是特权指令?高频特权指令1. I/O指令2. 关中断3. 设置时钟/定时器4. 修改页表5. 修改中断向量表十二、2014年真题:Trap是不是特权指令?十三、2021年真题:I/O指令十四、模拟题把这个题型拓展到了极致除法修改PC普通访存初始化中断向量表关闭中断十五、第二大重点:什么事件会导致用户态 → 内核态?十六、中断、异常、系统调用到底有什么区别?1. 中断 Interrupt2. 异常 Exception3. 系统调用十七、2013年经典真题I 除零II sin()III read()十八、非常重要:库函数 ≠ 系统调用十九、2015年真题:一条普通指令也可能进内核DIVINTMOV访问内存NOT二十、这里有一个超级重要的考试方法DIVMOVTrap二十一、2012年真题:什么“不可能在用户态发生”?二十二、2024年真题又考了同一个语言陷阱二十三、第三大重点:系统调用二十四、2010年真题四个概念必须区分系统调用中断库函数原语二十五、系统调用完整过程二十六、2017年真题:系统调用顺序二十七、2022年真题:哪些是硬件做,哪些是OS做?二十八、2015年真题:中断现场谁保存?二十九、2012年真题:中断和普通函数调用有什么区别?三十、系统调用与进程切换千万别画等号三十一、用一张图彻底理顺三十二、2021年真题:哪些操作属于系统调用?用户主动请求内核服务内核自己为了管理系统而做三十三、2019年真题:系统调用四句话三十四、题型六:中断的全过程三十五、中断向量表为什么用数组?2023年真题三十六、中断返回到哪条指令?三十七、2024年真题:键盘数据最后放哪?三十八、题型七:操作系统内核到底包含什么?三十九、宏内核和微内核宏内核优点缺点四十、微内核四十一、2023年真题:微内核优缺点四十二、模拟题:Unix是不是微内核?四十三、其他内核结构了解这些即可分层结构模块化结构外核 Exokernel四十四、题型八:操作系统启动过程2013年真题四十五、经典BIOS启动流程四十六、引导扇区代码是谁写进去的?四十七、现代机器的补充认识四十八、真题逐题地图:复习时至少要知道每题在考什么四十九、模拟题中值得额外掌握的几类拓展拓展1:哪些操作必须保护?拓展2:页面异常也会导致模式切换拓展3:系统调用发生阻塞后可以调度五十、第一章最容易混淆的10组概念① 并发 vs 并行② 多任务 vs 多处理器③ 用户态 vs 用户程序④ 特权指令 vs 导致陷入的指令⑤ 中断发生 vs 中断处理⑥ 模式切换 vs 进程切换⑦ 系统调用 vs 库函数⑧ 中断 vs 异常⑨ 宏内核 vs 微内核⑩ BIOS vs OS五十一、碰到“用户态能不能执行”题目的秒杀算法第一步:是否直接控制全局硬件?第二步:是否修改系统保护机制?第三步:是不是普通程序必须具备的基本能力?五十二、碰到“会不会进入内核态”题目的秒杀算法A. 是否主动系统调用?B. 是否可能产生异常?C. 执行期间是否可能收到外部中断?五十三、碰到系统调用流程题五十四、碰到中断题,先分四层第1层:发生第2层:硬件响应第3层:OS处理中断第4层:后续五十五、这一章最容易被“绝对化词语”坑“进程越多CPU利用率越高”“中断一定导致进程切换”“微内核性能一定更高”“系统调用接口各OS统一”“内核态只能执行特权指令”五十六、本章优先级S级:必须完全掌握1. 用户态 / 内核态2. 特权指令3. 系统调用4. 中断和异常A级:高频5. 多道程序6. 并发/并行7. 微内核/宏内核B级:必须会,但通常较简单8. 批处理、分时、实时9. OS功能与四特征10. 操作系统引导五十七、两道接近未来 408 风格的预测变式预测题1关键五十八、预测题2:综合系统调用 + 中断 + 调度五十九、最后压缩成一套考场口诀