摘要

操作系统是计算机系统中最重要的系统软件,也是 408 计算机统考的核心科目之一。第一章虽然以概念为主,但知识点多、术语相似,选择题中经常考查并发与并行、中断与异常、用户态与内核态、系统调用与函数调用等易混内容。

本文按照 408 操作系统常见知识体系,详细介绍操作系统的概念、功能、基本特征、发展历程、运行机制、中断和异常、系统调用、体系结构、系统启动以及虚拟机,并总结常见考点与易错结论。


一、什么是操作系统

1. 操作系统的定义

操作系统(Operating System,OS)是计算机系统中负责管理软硬件资源、组织程序运行,并为用户和应用程序提供服务的系统软件。

可以从三个角度理解操作系统:

  1. 操作系统是计算机资源的管理者;

  2. 操作系统是用户与计算机硬件之间的接口;

  3. 操作系统是对计算机硬件的扩充。

计算机系统的层次结构如下:

用户
  ↓
应用程序
  ↓
操作系统
  ↓
计算机硬件

应用程序通常不会直接控制 CPU、内存和磁盘,而是通过操作系统提供的接口使用这些资源。

例如,一个程序需要读取文件时,并不是自己控制磁盘磁头或者固态硬盘,而是向操作系统提出请求,由操作系统完成设备访问。


2. 操作系统在计算机系统中的地位

操作系统位于硬件和应用程序之间。

┌────────────────────────────┐
│           用户             │
├────────────────────────────┤
│         应用程序           │
├────────────────────────────┤
│         操作系统           │
├────────────────────────────┤
│ CPU、内存、磁盘、I/O设备   │
└────────────────────────────┘

向下,操作系统管理硬件资源;向上,操作系统为用户和应用程序提供方便、统一的接口。

因此,操作系统具有承上启下的作用。


3. 操作系统的设计目标

操作系统的主要设计目标包括:

3.1 方便性

操作系统隐藏了底层硬件的复杂细节。

用户不需要理解磁盘扇区、内存地址和设备控制器的具体工作方式,只需要使用文件名、目录、窗口、命令等抽象概念。

3.2 有效性

操作系统需要提高计算机资源的利用率和系统吞吐量。

例如,在一个程序等待磁盘输入时,操作系统可以让 CPU 执行另一个程序,避免 CPU 长时间空闲。

3.3 可扩充性

操作系统应当便于增加新的功能、支持新的硬件和改进原有模块。

3.4 开放性

操作系统需要遵循一定的标准,使不同系统之间能够进行程序移植、数据交换和网络通信。


二、操作系统的主要功能

从资源管理的角度看,操作系统主要负责处理机管理、存储器管理、文件管理和设备管理。

此外,操作系统还需要向用户提供接口。


1. 处理机管理

处理机管理也称为 CPU 管理,其核心是对进程和处理机资源进行管理。

主要内容包括:

  • 进程创建与撤销;

  • 进程调度;

  • 进程同步;

  • 进程通信;

  • 处理死锁;

  • CPU 分配与回收。

在多道程序系统中,内存中可能同时存在多个程序,但单核 CPU 在任意时刻只能执行其中一个程序。

操作系统需要决定:

当前应该让哪个进程使用 CPU?
这个进程可以使用 CPU 多长时间?
什么时候暂停它并切换到其他进程?

这些工作由处理机管理功能完成。


2. 存储器管理

存储器管理主要负责内存空间的分配、回收、保护和扩充。

主要功能包括:

  • 内存空间的分配与回收;

  • 地址转换;

  • 内存保护;

  • 内存共享;

  • 内存扩充;

  • 虚拟存储器管理。

程序中使用的地址通常是逻辑地址。程序运行时,操作系统和硬件需要将逻辑地址转换为实际的物理地址。

内存保护则用于防止一个进程非法访问另一个进程或操作系统所在的内存区域。


3. 文件管理

文件管理负责对存储在外部存储器中的信息进行组织和管理。

主要功能包括:

  • 文件创建与删除;

  • 文件读写;

  • 文件目录管理;

  • 文件存储空间管理;

  • 文件访问控制;

  • 文件共享与保护。

操作系统将磁盘上的数据抽象为文件和目录,从而让用户不必直接操作磁盘扇区。


4. 设备管理

设备管理负责管理计算机中的各种输入输出设备。

主要功能包括:

  • 设备分配与回收;

  • 设备驱动;

  • 缓冲管理;

  • 设备独立性管理;

  • 输入输出控制;

  • 虚拟设备管理。

不同设备的硬件工作方式差异很大。操作系统通过设备驱动程序屏蔽设备之间的差异,为应用程序提供相对统一的接口。

例如,程序向普通文件和打印机写入数据时,可以使用形式相似的接口,而不需要知道设备内部如何工作。


5. 提供用户接口

操作系统向用户提供两类主要接口。

5.1 命令接口

命令接口允许用户直接控制计算机。

命令接口又可以分为:

  • 联机命令接口;

  • 脱机命令接口。

联机命令接口

用户输入一条命令,操作系统立即执行,然后返回结果。

例如:

cd project
dir
mkdir test

其特点是交互性强。

脱机命令接口

用户提前将多条命令写入作业控制文件,由操作系统依次执行。

其特点是用户通常不能在作业运行过程中直接进行交互。


5.2 程序接口

程序接口由一组系统调用组成,应用程序通过系统调用请求操作系统服务。

例如:

  • 创建进程;

  • 打开文件;

  • 读取文件;

  • 申请内存;

  • 创建网络连接。

系统调用是应用程序获得操作系统服务的重要途径。

需要注意:

程序接口主要面向应用程序,命令接口主要面向用户。

图形用户界面本质上通常也是通过命令接口或系统调用使用操作系统功能。


6. 操作系统是对硬件的扩充

裸机只提供 CPU 指令、内存地址和设备控制寄存器等底层功能,使用起来十分复杂。

操作系统在硬件基础上提供了进程、文件、虚拟内存、目录等更易使用的抽象。

因此:

裸机 + 操作系统 = 功能更强、使用更方便的扩充机器

这种经过操作系统扩充的计算机也称为虚拟机。

这里的“虚拟机”是广义概念,不一定指 VMware、VirtualBox 等具体虚拟化软件。


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

操作系统的四个基本特征是:

  1. 并发;

  2. 共享;

  3. 虚拟;

  4. 异步。

其中,并发和共享是操作系统最基本的两个特征。


1. 并发

并发是指两个或多个事件在同一时间间隔内发生。

例如,在 1 秒的时间内,CPU 交替执行进程 A 和进程 B:

时间轴:A → B → A → B → A

虽然在某一个具体时刻,单核 CPU 只能执行一个进程,但从一段时间来看,多个进程都得到了执行,因此这些进程是并发执行的。


2. 并发和并行的区别

并发和并行是 408 中的常见考点。

概念 含义
并发 多个事件在同一时间间隔内发生
并行 多个事件在同一时刻同时发生

单核 CPU 可以实现并发,但不能真正同时执行多个程序。

多核 CPU 可以让多个程序在多个核心上并行执行。

例如:

单核 CPU:
时刻 t1 执行 A
时刻 t2 执行 B
时刻 t3 执行 A

这是并发。

双核 CPU:
核心 1 执行 A
核心 2 同时执行 B

这是并行。

需要特别注意:

并行一定具有并发性,但并发不一定是真正的并行。


3. 共享

共享是指系统中的资源可以供多个并发执行的进程共同使用。

资源共享可以分为互斥共享和同时共享。

3.1 互斥共享

某些资源在一段时间内只允许一个进程访问。

例如:

  • 打印机;

  • 某些临界资源;

  • 需要独占使用的设备。

当进程 A 正在使用打印机时,进程 B 必须等待。

这种资源称为临界资源,对临界资源的访问需要互斥进行。

3.2 同时共享

某些资源可以在一段时间内被多个进程共同访问。

例如,多个进程可以同时读取同一个只读文件。

这里的“同时”既可能表示真正的同一时刻,也可能表示多个进程在一段时间内交替访问。

因此,不能简单地把同时共享理解为绝对意义上的物理同时。


4. 并发与共享的关系

并发和共享互为存在条件。

一方面,只有多个程序并发执行,才会产生资源共享的需求。

另一方面,只有操作系统能够合理地管理和共享资源,多个程序才能顺利地并发执行。

例如:

如果没有并发:
系统中通常只有一个程序运行,不需要考虑多个程序共享资源。

如果不能共享资源:
多个程序就难以共同驻留并交替执行,并发也无法正常实现。

因此:

并发和共享是操作系统最基本的两个特征,二者互为存在条件。


5. 虚拟

虚拟是指通过某种技术,将一个物理实体变为若干逻辑上的对应物。

虚拟技术主要包括时分复用和空分复用。

5.1 时分复用技术

多个用户或进程在不同时间使用同一个物理资源。

例如,多个进程轮流使用一个 CPU,使每个进程都感觉自己拥有一个独立的处理器。

5.2 空分复用技术

将一个物理资源在空间上划分为多个部分,供多个用户或进程使用。

例如:

  • 将内存划分为多个区域;

  • 将磁盘空间划分给多个文件;

  • 使用虚拟存储技术扩充逻辑内存空间。

常见的虚拟化现象包括:

  • 虚拟处理器;

  • 虚拟存储器;

  • 虚拟设备。

需要注意:

如果没有并发执行多个程序的需要,虚拟技术往往也失去了主要的应用基础。


6. 异步

异步也称为不确定性,是指在多道程序环境下,多个程序以不可预知的速度向前推进。

例如,进程 A 和进程 B 并发执行时,A 可能因为等待磁盘输入而暂停,B 可能因为时间片耗尽而被切换。

因此,无法仅根据程序代码准确预测某个进程在什么时刻执行到哪一步。

异步不代表程序运行结果一定不正确。

只要操作系统能够正确处理进程同步与互斥,同一个程序在相同输入下仍然应当得到符合预期的结果。


四、操作系统的发展历程

操作系统的发展与提高计算机资源利用率的需求密切相关。

整体发展过程可以概括为:

手工操作阶段
    ↓
批处理阶段
    ↓
多道程序系统
    ↓
分时操作系统
    ↓
实时操作系统
    ↓
网络、分布式和现代操作系统

1. 手工操作阶段

早期计算机没有操作系统。

程序员需要人工完成以下操作:

  1. 将程序和数据装入计算机;

  2. 启动程序;

  3. 等待程序运行结束;

  4. 取走运行结果;

  5. 再装入下一个程序。

这一阶段存在两个突出矛盾。

1.1 人机速度矛盾

人的操作速度远低于计算机运行速度。

CPU 运行完成后,往往需要长时间等待人工装入下一个程序。

1.2 CPU 与 I/O 设备速度矛盾

CPU 的速度远高于输入输出设备。

程序进行输入输出时,CPU 只能等待,造成资源浪费。


2. 单道批处理系统

为解决人机速度矛盾,出现了批处理系统。

操作员将一批作业集中起来,系统按照一定顺序自动处理。

其特点是:

  • 自动性;

  • 顺序性;

  • 单道性。

在单道批处理系统中,内存中通常只有一个作业。

当该作业进行 I/O 操作时,CPU 仍然需要等待,因此 CPU 利用率不高。


3. 多道批处理系统

多道程序设计技术允许多个程序同时进入内存。

当一个程序因为等待 I/O 而暂停时,CPU 可以转去执行另一个程序。

例如:

程序 A:计算 → 等待 I/O ─────────→ 继续计算
程序 B:        开始计算 → 等待 I/O
CPU:    执行 A → 执行 B → 执行 A

这样可以让 CPU 和 I/O 设备尽量同时工作,提高资源利用率。

3.1 多道程序设计的特点
  • 多道:内存中同时存放多个程序;

  • 宏观并行:从较长时间看,多个程序都在运行;

  • 微观串行:单核 CPU 在任意时刻只执行一个程序。

3.2 多道批处理系统的优点
  • CPU 利用率高;

  • 系统吞吐量大;

  • 资源利用率高。

3.3 多道批处理系统的缺点
  • 用户响应时间较长;

  • 缺少人机交互能力;

  • 用户难以了解程序的实时运行情况。

3.4 多道程序设计的意义

多道程序设计技术是操作系统发展过程中的重要转折点。

需要注意:

多道程序设计的主要目的不是缩短某一个作业的运行时间,而是提高整个系统的资源利用率和吞吐量。


4. 分时操作系统

分时系统将 CPU 时间划分为多个很短的时间片,各个用户或进程轮流使用 CPU。

由于时间片很短,用户会感觉自己的程序一直在运行。

分时系统具有四个主要特征:

特征 含义
同时性 多个用户可以同时使用系统
交互性 用户可以与系统进行交互
独立性 用户之间互不干扰
及时性 系统能够在较短时间内响应用户请求

分时系统最重要的目标之一是:

向用户提供及时的交互响应。


5. 实时操作系统

实时操作系统要求系统在规定时间内完成任务并作出响应。

实时系统可以分为硬实时系统和软实时系统。

5.1 硬实时系统

系统必须在规定的截止时间之前完成任务,否则可能造成严重后果。

例如:

  • 导弹控制系统;

  • 飞行控制系统;

  • 工业安全控制系统;

  • 医疗生命支持系统。

5.2 软实时系统

系统希望任务尽量在截止时间之前完成,偶尔超过截止时间通常不会导致灾难性后果。

例如:

  • 视频播放;

  • 在线会议;

  • 网络直播;

  • 多媒体系统。

5.3 分时系统与实时系统的区别
对比项 分时系统 实时系统
主要目标 提高交互性和响应速度 在规定时间内完成任务
服务对象 多个交互用户 实时任务
时间要求 尽快响应 有明确时间约束
可靠性要求 一般较高 通常非常高

6. 网络操作系统

网络操作系统用于管理网络中的计算机和共享资源。

主要功能包括:

  • 网络通信;

  • 远程资源访问;

  • 文件共享;

  • 打印机共享;

  • 网络安全管理。

网络操作系统中的各台计算机通常具有较强的独立性,用户一般能够感知不同计算机的存在。


7. 分布式操作系统

分布式操作系统将多台计算机组织成一个统一的系统。

其主要特点包括:

  • 分布性;

  • 并行性;

  • 资源共享;

  • 较好的容错能力;

  • 对用户具有一定透明性。

理想情况下,用户不需要知道任务具体在哪一台计算机上运行。

网络操作系统与分布式操作系统的区别
对比项 网络操作系统 分布式操作系统
系统形态 多台相对独立的计算机 一个统一的整体
用户感知 通常知道资源位于哪台计算机 尽量隐藏资源位置
资源管理 各计算机分别管理 更强调全局统一管理
透明性 较弱 较强

五、操作系统的运行机制

操作系统和普通应用程序都需要在 CPU 上运行。

但是,操作系统能够执行某些具有较高权限的操作,而普通应用程序不能随意执行这些操作。

为了保护系统,CPU 通常设置不同的运行模式。


1. 用户态与内核态

CPU 的运行状态通常可以分为:

  • 用户态,又称目态;

  • 内核态,又称管态、核心态。

1.1 用户态

普通应用程序运行在用户态。

用户态程序受到较多限制,不能直接执行可能影响整个系统的敏感操作。

1.2 内核态

操作系统内核通常运行在内核态。

在内核态下,CPU 可以执行特权指令,访问关键系统资源。

用户态和内核态是 CPU 的状态,不是进程固定不变的属性。

同一个进程执行普通用户代码时处于用户态;执行系统调用进入内核后,CPU 会切换到内核态。


2. 特权指令与非特权指令

2.1 特权指令

只能在内核态执行的指令称为特权指令。

例如:

  • 修改中断屏蔽字;

  • 启动 I/O 设备;

  • 修改页表寄存器;

  • 设置系统时钟;

  • 修改 CPU 运行模式;

  • 执行停机指令。

如果用户程序可以随意执行这些指令,就可能破坏操作系统或其他进程。

2.2 非特权指令

用户态和内核态都可以执行的指令称为非特权指令。

例如:

  • 普通算术运算;

  • 逻辑运算;

  • 合法范围内的数据传送;

  • 普通程序控制指令。

特别注意:

用户程序中可以包含访管指令或系统调用指令,用于主动进入内核,但用户程序不能直接执行具体的特权操作。


3. 内核程序与应用程序

操作系统内核是操作系统中最核心的部分。

内核通常包括:

  • 时钟管理;

  • 中断处理;

  • 原语;

  • 进程调度;

  • 内存管理中的核心部分;

  • 设备管理中的核心部分。

不同操作系统的内核边界可能不同,因此不能认为操作系统的所有功能都一定运行在内核态。


4. 原语

原语是由若干条指令组成,用于完成某个特定功能的程序段。

原语具有原子性:

原语在执行过程中不能被中断,只能全部执行完成,或者完全不执行。

常见原语包括:

  • 进程创建原语;

  • 进程阻塞原语;

  • 进程唤醒原语;

  • 进程撤销原语。

原语一般运行在内核态。

原语的原子性可以借助关中断、硬件原子指令等机制实现。


六、中断和异常

中断机制是操作系统实现并发、设备管理和系统保护的重要基础。

如果没有中断机制,CPU 很难在多个程序之间切换,也很难及时处理输入输出设备发出的请求。


1. 中断的基本概念

CPU 在执行程序的过程中,如果发生了某个需要立即处理的事件,就会暂停当前程序,转去执行相应的中断处理程序。

中断处理完成后,CPU 通常返回原程序继续运行。

基本过程如下:

执行当前程序
    ↓
检测到中断或异常
    ↓
保存当前程序的现场
    ↓
切换到内核态
    ↓
执行中断处理程序
    ↓
恢复原程序现场
    ↓
返回原程序继续执行

2. 内中断与外中断

按照中断信号的来源,可以分为内中断和外中断。

类型 来源 是否与当前指令有关 常见例子
内中断 CPU 内部 通常有关 除零、越界、缺页、系统调用
外中断 CPU 外部 通常无关 时钟中断、I/O完成、人工干预

内中断通常也称为异常。

外中断通常称为狭义上的中断。


3. 外中断

外中断来自 CPU 外部,与当前正在执行的指令通常没有直接关系。

常见外中断包括:

3.1 时钟中断

时钟设备按照一定周期发出中断信号。

操作系统可以利用时钟中断:

  • 进行时间片轮转;

  • 统计程序运行时间;

  • 更新系统时间;

  • 判断进程是否超时。

时钟中断是分时系统和抢占式调度的重要基础。

3.2 I/O 中断

输入输出设备完成操作后,通过中断通知 CPU。

例如,磁盘读取完成后发出中断,操作系统随后处理读取到的数据,并唤醒等待磁盘数据的进程。

3.3 人工干预中断

例如用户按下某些控制按键,要求暂停或终止程序。


4. 内中断或异常

异常来自 CPU 内部,通常与当前正在执行的指令有关。

常见异常包括:

  • 除数为零;

  • 算术溢出;

  • 非法指令;

  • 地址越界;

  • 缺页;

  • 访问权限错误;

  • 系统调用。

异常可以进一步理解为故障、自陷和终止。

4.1 故障(Fault)

故障通常可以被修复。处理完成后,程序可能重新执行引发故障的指令。

典型例子是缺页异常。

访问某一页面
    ↓
页面不在内存
    ↓
产生缺页异常
    ↓
操作系统将页面调入内存
    ↓
重新执行原来的访存指令
4.2 自陷(Trap)

自陷通常是程序主动产生的异常,常用于系统调用或调试。

处理结束后,一般从引发自陷指令的下一条指令继续执行。

4.3 终止(Abort)

终止表示发生了严重且通常无法恢复的错误。

操作系统一般会终止当前程序,而不是返回原程序继续运行。


5. 中断处理过程

一次完整的中断处理通常包括以下步骤:

  1. CPU 执行当前程序;

  2. 检测到中断请求;

  3. 判断是否响应中断;

  4. 保存断点和部分程序状态;

  5. 根据中断类型找到中断处理程序;

  6. 切换到内核态;

  7. 保存其他必要现场;

  8. 执行中断处理程序;

  9. 恢复现场;

  10. 执行中断返回;

  11. 回到被中断程序或执行新的进程。

其中,保存程序计数器、切换状态等操作通常由硬件自动完成;保存通用寄存器等工作往往由中断处理程序完成。

不同计算机体系结构的具体实现会有所不同。


6. 中断向量

中断向量通常包含某类中断处理程序的入口地址以及相关信息。

多个中断向量构成中断向量表。

CPU 发生中断后,可以根据中断类型号查找中断向量,从而找到对应的中断处理程序。

需要区分:

  • 中断向量:中断处理程序的入口信息;

  • 中断向量表:多个中断向量组成的表;

  • 中断处理程序:真正负责处理中断的程序。


7. 中断的作用

中断机制具有以下重要作用:

  • 实现 CPU 与 I/O 设备并行工作;

  • 实现多道程序并发执行;

  • 实现进程调度;

  • 支持系统调用;

  • 处理程序运行错误;

  • 实现操作系统对计算机的控制;

  • 提高 CPU 利用率。


七、系统调用

1. 什么是系统调用

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

应用程序通过系统调用,请求操作系统完成自己没有权限或不便直接完成的操作。

常见系统调用包括:

  • 进程控制;

  • 文件管理;

  • 设备管理;

  • 内存管理;

  • 进程通信;

  • 信息维护。

例如:

open();
read();
write();
fork();

这些函数在具体系统中可能是系统调用,也可能是对系统调用的库函数封装。


2. 为什么需要系统调用

某些操作涉及关键资源,必须由操作系统统一管理。

例如:

  • 直接控制磁盘;

  • 修改页表;

  • 创建或撤销进程;

  • 分配物理内存;

  • 设置系统时钟。

如果允许应用程序直接执行这些操作,可能导致:

  • 破坏其他进程的数据;

  • 破坏操作系统;

  • 多个程序争抢设备;

  • 系统状态不一致;

  • 安全问题。

因此,应用程序只能提出请求,真正的特权操作由操作系统在内核态完成。


3. 系统调用的执行过程

系统调用的基本执行过程如下:

用户程序准备系统调用参数
        ↓
执行系统调用指令
        ↓
产生自陷或异常
        ↓
CPU由用户态切换到内核态
        ↓
操作系统找到对应的系统调用处理程序
        ↓
在内核态执行服务
        ↓
返回结果
        ↓
CPU由内核态切换到用户态
        ↓
用户程序继续执行

可以将其概括为:

用户态 → 系统调用 → 内核态 → 返回用户态

4. 系统调用与函数调用的区别

对比项 普通函数调用 系统调用
是否进入操作系统 通常不会
是否切换 CPU 状态 通常不会 通常会从用户态进入内核态
调用开销 较小 较大
执行内容 普通程序代码 操作系统服务
是否可执行特权操作 不可以 内核处理程序可以

普通函数调用一般通过调用指令跳转到函数入口。

系统调用则需要通过特殊指令触发异常,使 CPU 进入内核态。


5. 库函数与系统调用的关系

库函数不一定是系统调用。

可能存在以下三种情况:

  1. 库函数完全在用户态运行,不需要系统调用;

  2. 一个库函数封装一个系统调用;

  3. 一个库函数内部调用多个系统调用。

例如,某些数学库函数只完成普通计算,不需要进入内核。

而文件读写库函数通常需要使用操作系统提供的文件操作系统调用。

因此:

库函数是从程序设计角度提供的接口,系统调用是操作系统提供的程序接口,二者不能完全等同。


6. 状态切换的常见方式

用户态进入内核态

常见原因包括:

  • 系统调用;

  • 外部中断;

  • 程序异常。

用户态进入内核态通常由硬件在中断、异常或自陷机制支持下完成。

内核态返回用户态

操作系统执行中断返回或异常返回指令,恢复用户程序现场,并将 CPU 切换回用户态。

需要注意:

进程切换和 CPU 状态切换不是同一个概念。

一次系统调用可能只发生用户态与内核态之间的切换,完成后仍然返回原进程,不一定发生进程切换。

一次中断也不一定导致进程切换,是否切换取决于中断处理结果和调度决策。


八、操作系统的体系结构

随着操作系统规模不断扩大,如何组织操作系统内部模块成为重要问题。

常见操作系统结构包括:

  • 分层结构;

  • 模块化结构;

  • 宏内核;

  • 微内核;

  • 外核等。


1. 分层结构

分层结构将操作系统划分为多个层次。

较低层为较高层提供服务,较高层通常只能调用相邻或较低层提供的功能。

第 5 层:用户接口
第 4 层:文件管理
第 3 层:进程管理
第 2 层:内存管理
第 1 层:中断与硬件控制
第 0 层:计算机硬件
优点
  • 结构清晰;

  • 便于设计和调试;

  • 易于验证系统正确性;

  • 模块间接口明确。

缺点
  • 合理划分层次比较困难;

  • 跨层调用可能降低效率;

  • 某些功能难以严格放入某一层。


2. 模块化结构

模块化结构将操作系统划分为若干功能相对独立的模块。

模块之间通过规定的接口进行通信。

例如:

进程管理模块
内存管理模块
文件管理模块
设备管理模块
网络管理模块
优点
  • 提高设计效率;

  • 便于维护和扩展;

  • 模块可以单独修改;

  • 模块间功能边界较清晰。

缺点
  • 模块接口设计复杂;

  • 模块之间可能存在较强依赖;

  • 模块划分不当会增加系统复杂度。

模块之间可以通过调用关系构成一定层次,但模块化结构不一定像严格分层结构那样只能逐层调用。


3. 宏内核

宏内核又称单体内核或大内核。

操作系统的主要功能都作为内核的一部分运行在内核态。

典型功能包括:

  • 进程调度;

  • 内存管理;

  • 文件系统;

  • 设备驱动;

  • 网络协议。

优点
  • 各模块之间可以直接调用;

  • 通信效率高;

  • 系统调用处理速度较快。

缺点
  • 内核规模较大;

  • 模块耦合度较高;

  • 一个内核模块出错可能影响整个系统;

  • 维护和调试难度较大。


4. 微内核

微内核只保留最基本的核心功能,例如:

  • 进程或线程管理的基本机制;

  • 低级存储管理;

  • 中断处理;

  • 进程间通信。

文件系统、设备驱动和网络服务等功能可以放在用户态服务进程中。

用户态:
应用程序
文件服务
设备服务
网络服务

内核态:
进程间通信
基本调度
基本内存管理
中断处理
微内核的基本思想

微内核强调机制与策略分离。

  • 机制:提供实现某种功能的基本能力;

  • 策略:决定如何使用这些能力。

例如,内核提供进程调度机制,而具体采用何种调度策略可以由其他模块决定。

优点
  • 内核规模小;

  • 可靠性和安全性较高;

  • 易于扩展和移植;

  • 用户态服务发生故障时,通常更容易隔离和恢复;

  • 适合分布式系统。

缺点
  • 用户态服务之间需要频繁通信;

  • 可能发生多次用户态和内核态切换;

  • 消息传递开销较大;

  • 性能可能低于宏内核。


5. 宏内核与微内核对比

对比项 宏内核 微内核
内核功能
内核规模
模块通信 内核内部直接调用 常通过消息传递
性能 通常较高 可能受到通信开销影响
可靠性 单个模块故障影响可能较大 故障隔离能力较好
可扩展性 相对较弱 较强
用户态与内核态切换 相对较少 可能较多

考试中常见结论:

微内核不是把所有操作系统功能都放入内核,而是只保留最基本的机制。


6. 外核

外核的基本思想是尽量减少操作系统内核对硬件资源的抽象。

内核主要负责:

  • 资源保护;

  • 资源分配;

  • 资源回收。

应用程序可以根据自身需求构建更合适的资源抽象。

优点
  • 应用程序可以更灵活地使用硬件;

  • 减少不必要的抽象开销;

  • 有利于针对特定应用进行优化。

缺点
  • 应用开发难度较大;

  • 系统设计复杂;

  • 通用性和易用性可能受到影响。


九、操作系统的启动过程

计算机刚接通电源时,内存中还没有操作系统内核。

操作系统需要经过引导程序加载到内存中,这一过程称为操作系统引导或系统启动。


1. 基本启动过程

系统启动过程可以概括为:

接通电源
    ↓
CPU执行固件中的启动代码
    ↓
进行硬件自检和初始化
    ↓
查找启动设备
    ↓
加载引导程序
    ↓
引导程序加载操作系统内核
    ↓
内核初始化
    ↓
创建系统进程和用户环境
    ↓
系统进入可用状态

2. 固件

固件保存在主板上的非易失性存储器中。

传统计算机通常使用 BIOS,现代计算机常使用 UEFI。

固件负责:

  • 硬件自检;

  • 初始化部分硬件;

  • 查找可启动设备;

  • 启动引导程序。


3. 引导程序

引导程序又称 Bootloader,主要负责定位并加载操作系统内核。

由于最初运行的引导代码空间有限,启动过程可能分为多个阶段:

  1. 第一阶段引导程序加载更完整的第二阶段程序;

  2. 第二阶段程序识别文件系统;

  3. 找到操作系统内核;

  4. 将内核装入内存;

  5. 将 CPU 控制权交给内核。


4. 内核初始化

内核开始运行后,通常需要完成:

  • 初始化内存管理;

  • 建立中断向量表;

  • 初始化时钟;

  • 初始化设备驱动;

  • 初始化进程管理;

  • 挂载根文件系统;

  • 创建第一个系统进程;

  • 启动系统服务。

完成这些工作后,系统才进入正常运行状态。


十、虚拟机

虚拟机技术可以在一台物理计算机上模拟出多个相对独立的计算机环境。

每个虚拟机可以运行自己的操作系统。

应用程序       应用程序
    ↓              ↓
客户操作系统   客户操作系统
        ↓      ↓
      虚拟机管理程序
             ↓
          物理硬件

负责管理虚拟机的软件称为虚拟机监控程序或 Hypervisor。


1. 第一类虚拟机管理程序

第一类 Hypervisor 直接运行在物理硬件上。

应用程序
客户操作系统
Hypervisor
物理硬件

其特点是:

  • 直接管理硬件;

  • 性能通常较好;

  • 隔离性较强;

  • 常用于服务器和数据中心。


2. 第二类虚拟机管理程序

第二类 Hypervisor 运行在宿主操作系统之上。

应用程序
客户操作系统
Hypervisor
宿主操作系统
物理硬件

其特点是:

  • 安装和使用方便;

  • 依赖宿主操作系统;

  • 相比第一类结构多一层;

  • 常用于个人学习、测试和开发。


3. 虚拟机的优点

  • 提高硬件利用率;

  • 隔离不同运行环境;

  • 便于系统测试;

  • 支持多个操作系统;

  • 方便迁移、备份和恢复;

  • 提高服务器部署灵活性。

4. 虚拟机的缺点

  • 存在一定性能开销;

  • 需要额外的资源管理;

  • 虚拟机管理程序本身可能成为安全攻击目标;

  • 多个虚拟机竞争资源时可能相互影响。


十一、408 高频易错点总结

易错点 1:并发不等于并行

并发强调同一时间间隔,并行强调同一时刻。

单核 CPU 可以实现并发,但不能让两个程序真正同时执行。


易错点 2:共享不一定表示真正同时访问

同时共享中的“同时”可以表示在一段时间内交替访问。


易错点 3:并发和共享互为存在条件

二者是操作系统最基本的特征。

虚拟和异步通常建立在并发基础上。


易错点 4:多道程序设计主要提高系统整体效率

多道程序设计主要用于提高资源利用率和系统吞吐量,不保证缩短某一个作业的完成时间。


易错点 5:分时系统强调交互,实时系统强调截止时间

分时系统希望快速响应用户;实时系统要求在规定时间内完成任务。


易错点 6:用户态和内核态是 CPU 的运行状态

不能简单地说“某个进程永远处于用户态”或者“操作系统运行时一定发生进程切换”。


易错点 7:用户态进入内核态不一定发生进程切换

系统调用、中断和异常都会使 CPU 进入内核态,但操作系统处理完成后可能继续执行原进程。


易错点 8:系统调用不等于普通函数调用

系统调用会请求操作系统服务,通常伴随用户态到内核态的切换。


易错点 9:库函数不一定使用系统调用

普通计算类库函数可能完全在用户态执行。


易错点 10:系统调用属于内中断

系统调用通常通过自陷指令主动触发异常,属于内中断。


易错点 11:缺页属于异常

缺页是由当前访存指令引起的,属于内中断或异常,不属于外部 I/O 中断。


易错点 12:时钟中断属于外中断

时钟中断来自 CPU 外部的时钟设备,与当前执行的具体指令通常无关。


易错点 13:中断后不一定进行进程调度

中断处理完成后,操作系统可能返回原进程,也可能调度其他进程。


易错点 14:微内核的性能不一定优于宏内核

微内核具有可靠、灵活、易扩展等优点,但频繁的消息传递和状态切换可能带来性能开销。


易错点 15:图形界面不是操作系统唯一接口

操作系统还提供命令接口和程序接口。

图形界面最终也需要借助操作系统接口完成具体操作。


十二、典型练习题

1. 单核处理器中,两个进程并发执行是指什么?

A. 两个进程在同一时刻同时执行
B. 两个进程在同一时间间隔内都得到执行
C. 两个进程必须以完全相同的速度运行
D. 两个进程占用相同的内存空间

答案:B

解析:单核 CPU 在同一时刻只能执行一个进程,但可以在一段时间内交替执行多个进程,这属于并发。


2. 操作系统最基本的两个特征是哪些?

A. 并发和共享
B. 并行和虚拟
C. 共享和异步
D. 虚拟和实时

答案:A

解析:并发和共享是操作系统最基本的两个特征,二者互为存在条件。


3. 下列事件中,属于外中断的是哪一项?

A. 执行非法指令
B. 发生缺页
C. 时钟设备发出请求
D. 执行系统调用指令

答案:C

解析:时钟中断来自 CPU 外部。非法指令、缺页和系统调用均与当前执行的指令有关,属于异常或内中断。


4. 下列事件中,通常不会使 CPU 从用户态进入内核态的是哪一项?

A. 系统调用
B. 外部中断
C. 程序异常
D. 普通函数调用

答案:D

解析:普通函数调用一般仍然在用户态执行。系统调用、中断和异常通常会使 CPU 进入内核态。


5. 多道程序设计的主要目的是什么?

A. 保证每个作业立即完成
B. 提高系统资源利用率
C. 消除所有 I/O 操作
D. 使多个程序在单核 CPU 上真正并行

答案:B

解析:一个程序等待 I/O 时,CPU 可以执行其他程序,从而提高 CPU 和其他资源的利用率。


6. 下列哪一项最能体现分时系统的主要特点?

A. 必须在严格截止时间前完成任务
B. 多个用户可以交互地使用计算机
C. 所有程序均不能被中断
D. 内存中只能存放一个程序

答案:B

解析:分时系统强调同时性、交互性、独立性和及时性。


7. 关于系统调用,下列说法正确的是哪一项?

A. 系统调用就是普通函数调用
B. 系统调用只能由内核程序发起
C. 系统调用是应用程序请求操作系统服务的接口
D. 执行系统调用一定会切换到另一个进程

答案:C

解析:应用程序可以通过系统调用请求操作系统服务。系统调用通常引起状态切换,但不一定引起进程切换。


8. 微内核结构的主要缺点是什么?

A. 完全不能扩展
B. 内核中包含所有系统服务
C. 消息传递和状态切换可能产生较大开销
D. 无法支持进程间通信

答案:C

解析:微内核将许多服务放在用户态,服务之间的通信可能需要频繁进行消息传递和状态切换。


9. 缺页异常处理完成后,通常如何继续执行?

A. 永远终止当前进程
B. 重新执行引起缺页的访存指令
C. 从操作系统启动位置重新执行
D. 必须运行另一个进程

答案:B

解析:操作系统将缺失页面调入内存后,通常重新执行导致缺页的指令。


10. 下列哪项操作应当使用特权指令完成?

A. 普通整数加法
B. 计算数组元素之和
C. 修改页表相关寄存器
D. 调用用户自定义函数

答案:C

解析:修改页表相关寄存器会影响内存地址转换和系统安全,因此只能在内核态执行。


十三、章节知识框架

操作系统概述
│
├─ 操作系统的概念
│  ├─ 资源管理者
│  ├─ 用户与硬件的接口
│  └─ 对硬件的扩充
│
├─ 操作系统的功能
│  ├─ 处理机管理
│  ├─ 存储器管理
│  ├─ 文件管理
│  ├─ 设备管理
│  └─ 提供用户接口
│
├─ 基本特征
│  ├─ 并发
│  ├─ 共享
│  ├─ 虚拟
│  └─ 异步
│
├─ 操作系统的发展
│  ├─ 手工操作
│  ├─ 单道批处理
│  ├─ 多道批处理
│  ├─ 分时系统
│  ├─ 实时系统
│  ├─ 网络系统
│  └─ 分布式系统
│
├─ 运行机制
│  ├─ 用户态与内核态
│  ├─ 特权指令
│  ├─ 非特权指令
│  └─ 原语
│
├─ 中断和异常
│  ├─ 外中断
│  ├─ 内中断
│  ├─ 故障
│  ├─ 自陷
│  └─ 终止
│
├─ 系统调用
│  ├─ 进程控制
│  ├─ 文件管理
│  ├─ 设备管理
│  ├─ 内存管理
│  └─ 进程通信
│
├─ 操作系统结构
│  ├─ 分层结构
│  ├─ 模块化结构
│  ├─ 宏内核
│  ├─ 微内核
│  └─ 外核
│
├─ 操作系统引导
│  ├─ 固件
│  ├─ 引导程序
│  └─ 内核初始化
│
└─ 虚拟机
   ├─ 第一类 Hypervisor
   └─ 第二类 Hypervisor

十四、本章总结

操作系统是计算机系统中的核心系统软件,主要负责管理处理机、内存、文件和输入输出设备,并向用户及应用程序提供接口。

操作系统的四个基本特征是并发、共享、虚拟和异步,其中并发和共享最为基础。多道程序设计通过让多个程序同时进入内存,并在一个程序等待 I/O 时执行其他程序,提高了 CPU 利用率和系统吞吐量。

为了保护系统,CPU 设置了用户态和内核态。应用程序需要通过系统调用请求操作系统服务。系统调用、中断和异常可以使 CPU 从用户态进入内核态,但状态切换并不一定意味着发生进程切换。

操作系统可以采用宏内核、微内核、分层或模块化等结构。宏内核通常具有较高的执行效率,微内核则在可靠性、可扩展性和故障隔离方面具有优势。

对于 408 考试,本章需要重点掌握以下内容:

  • 并发与并行的区别;

  • 互斥共享与同时共享;

  • 多道批处理、分时系统和实时系统的特点;

  • 用户态与内核态;

  • 特权指令与非特权指令;

  • 中断与异常的分类;

  • 系统调用的执行过程;

  • 状态切换与进程切换的区别;

  • 宏内核与微内核的优缺点;

  • 操作系统的引导过程。

这些内容不仅会直接出现在选择题中,也是后续学习进程管理、内存管理、文件系统和 I/O 管理的重要基础。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐