第一章:操作系统概述

1.1 操作系统的概念

操作系统(Operating System,OS)是控制和管理计算机系统软硬件资源的系统软件。你可以把操作系统想象成一座图书馆的管理员——图书馆(硬件资源)有书(数据)、书架(存储设备)、阅览室(内存)等,读者(应用程序)不能随意翻找,必须通过管理员来借阅;管理员负责安排谁什么时候用什么资源,还能协调多个读者同时使用而不冲突。

操作系统的三个角色:

  1. 资源管理者:管理CPU、内存、I/O设备、文件等资源,合理分配。
  2. 用户接口:提供命令接口(如Shell)、程序接口(系统调用)、图形界面(GUI)。
  3. 系统控制者:控制程序的执行,防止错误和不当使用。

操作系统的目标:方便性、有效性、可扩展性、开放性。

1.2 操作系统的四个特征

操作系统有四大特征,注意它们不是所有OS都同时具备的(比如早期DOS就没有并发)。

1.2.1 并发

并发是指两个或多个事件在同一时间间隔内发生。在单CPU系统中,宏观上多个程序在同时运行,微观上这些程序是交替执行的(分时交替)。

区分:并发与并行

  • 并发:同一时间间隔内交替执行(逻辑上同时)
  • 并行:同一时刻同时执行(物理上同时,需要多核CPU)

📌 408考点提示:并发与并行的区别是选择题常考概念。注意"单核CPU能实现并发但不能实现并行"。

1.2.2 共享

共享是指系统中的资源可供多个并发执行的进程共同使用。共享分为两种方式:

  • 互斥共享方式:资源在一段时间内只允许一个进程访问(如打印机)。这种资源称为临界资源。
  • 同时访问方式:资源在一段时间内允许多个进程同时访问(如磁盘)。

💡 记忆技巧:"并发"和"共享"是OS最基本的两个特征,二者互为存在条件——没有并发就没有共享的必要,没有共享并发也无法实现。

1.2.3 虚拟

虚拟是指把一个物理实体变为多个逻辑上的对应物。例如:

  • 虚拟处理器技术(分时复用):一个CPU虚拟为多个"逻辑CPU"
  • 虚拟内存技术(空分复用):物理内存+换页让程序以为有超大内存
  • 虚拟设备技术(SPOOLing):一台物理I/O设备虚拟为多台

1.2.4 异步

异步是指进程以不可预知的速度向前推进。由于资源限制,进程经常"走走停停"——只要运行环境相同,多次运行会得到相同结果(这是OS要保证的)。

1.3 操作系统的发展与分类

1.3.1 手工操作阶段

没有OS,程序员独占机器,用纸带输入程序。CPU利用率极低——人的操作速度远慢于机器。

1.3.2 批处理阶段

  • 单道批处理系统:内存中仅有一道程序,CPU等待I/O(I/O时CPU空闲),利用率仍然低。
  • 多道批处理系统:内存中同时驻留多道程序,A等待I/O时CPU运行B。多道程序设计技术是OS并发特征的开端。

1.3.3 分时操作系统

CPU轮流为各个用户/作业服务。关键指标是响应时间(通常不超过1秒)。典型:Unix、Linux。

特点:交互性、多路性、独立性、及时性。

1.3.4 实时操作系统

能在规定时间内完成特定任务。分为硬实时(必须截止,如导弹控制)和软实时(可偶尔错过,如视频播放)。特点:及时性、可靠性。

📌 408考点提示:区别分时和实时——分时追求公平响应,实时追求及时可靠。常见选择题考分类特征。

1.3.5 网络操作系统与分布式操作系统

  • 网络OS:管理网络资源,提供网络通信功能(如Windows Server)。
  • 分布式OS:多台计算机组成一个整体,对用户来说像一台计算机。特点是透明性。

1.4 操作系统的运行环境

1.4.1 内核态(管态)与用户态(目态)

CPU根据程序状态字寄存器(PSW) 中的标志位区分两种状态:

状态 特权 可执行指令 访问范围
内核态(0级) 最高 所有指令(包括特权指令) 所有内存
用户态(3级) 受限 非特权指令 用户程序空间

特权指令:如清内存、修改PSW、中断设置、I/O指令等——只能在核心态执行。

1.4.2 中断与异常

中断是OS从用户态切换到内核态的唯一途径。

类型 来源 是否同步 例子
内中断(异常) CPU内部 同步(可确定) 缺页、除零、系统调用(trap)
外中断(中断) CPU外部 异步(不可预测) I/O中断、时钟中断

中断处理过程:关中断 → 保存断点 → 判断中断源 → 执行中断服务程序 → 开中断 → 返回。

⚠️ 易错点:不要混淆"中断"和"异常"。系统调用(trap)属于内中断/异常,是由程序主动触发的"访管指令"。

1.4.3 系统调用

系统调用是应用程序请求OS服务的唯一接口。用户程序通过访管指令陷入内核态,OS内核完成服务后返回。

常见系统调用类型:

  • 进程控制(fork, exit)
  • 文件操作(open, read, write)
  • 设备管理(request, release)
  • 信息维护(gettimeofday)
  • 通信(shmget, send)

📌 408考点提示:系统调用过程是重点——用户态→内核态的切换、参数传递方式(寄存器/堆栈),常结合中断机制考查。

1.5 操作系统的体系结构

1.5.1 大内核(宏内核/单内核)

将OS的主要功能(进程调度、内存管理、文件系统、设备驱动等)都放在内核中。

  • 优点:性能高(模块间直接调用)
  • 缺点:内核庞大,不易维护,一个模块崩溃导致整个系统崩溃
  • 典型:Linux、Unix

1.5.2 微内核

只把最基本的功能(进程间通信、CPU调度、内存管理基本功能)放在内核,其他功能移出内核作为用户态服务进程。

  • 优点:可靠性高、可扩展性好
  • 缺点:性能差(频繁的用户态/内核态切换)
  • 典型:Minix、QNX

1.5.3 混合内核

结合两者优点——部分驱动在内核态(提升性能),同时保持模块化。典型:Windows NT、macOS。

💡 记忆技巧:大内核≈"大一统"(所有服务在内核),微内核≈"小政府"(只保留最小核心),混合≈"折中方案"。

1.6 操作系统的引导过程

OS引导(Boot) 的5个步骤,以典型PC为例:

  1. 加电自检(POST):ROM中的BIOS程序检查硬件是否正常。
  2. 启动引导程序:BIOS读取引导扇区(MBR中的引导加载程序,如GRUB)。
  3. 加载OS内核:引导程序将OS内核从磁盘加载到内存。
  4. 初始化内核:OS执行内核初始化,建立数据结构、驱动等。
  5. 启动系统服务:启动init/systemd等第一个用户进程,开启各种守护进程。

📌 408考点提示:引导过程通常以选择题形式考查,注意MBR与GPT的区别偶尔也会涉及。

1.7 408常见考法总结

选择题考点:

  • 操作系统的特征与分类
  • 内核态/用户态切换时机
  • 中断与异常分类与区别
  • 大内核/微内核对比
  • 系统调用的过程

简答题/综合题考点(较少,通常结合后续章节):

  • 系统调用的执行过程分析

⚠️ 易错点:

  • "并发"和"并行"混淆
  • 认为"所有OS都有并发特征"(早期单道批处理没有)
  • 分不清"访管指令"是在用户态执行但触发切换到内核态
  • 把"系统调用"和"库函数"混为一谈(库函数不一定触发内核态切换)

1.8 操作系统与虚拟机

虚拟机技术通过在硬件和操作系统之间(Type 1/VMM)或在操作系统之上(Type 2)增加一层虚拟化层,实现多台"虚拟计算机"共享物理资源。

VMware、VirtualBox(Type 2):在宿主机OS上运行,虚拟化各种硬件设备。 Hypervisor(Type 1):直接运行在裸机上,管理各虚拟机OS(如VMware ESXi、Xen)。

虚拟化与OS的对比:

  • OS和虚拟机监视器(VMM)都要管理硬件资源。
  • VMM更关注"隔离"(各虚拟机互不影响),OS更关注"共享"。

1.9 典型操作系统的结构对比

操作系统 内核类型 特点
Linux 宏内核(模块化) 性能好,支持动态加载模块
Windows NT 混合内核 部分服务在内核态(提升性能),部分在用户态(增强可靠性)
macOS/XNU 混合内核 Mach微内核+BSD内核
Minix 微内核 仅4万行代码在内核态,学术用途

1.10 面试与考研常见追问

Q1:为什么要有内核态和用户态的区分? A:为了保证系统安全。用户程序可能含有错误或恶意代码,限制其在用户态执行非特权指令,通过系统调用请求OS服务,OS在核心态进行参数验证和安全检查后再执行——从而保护系统资源和数据。

Q2:软中断和硬中断的区别? A:硬中断由外部硬件设备触发(如网卡收包),是异步的;软中断由程序通过指令主动触发(如系统调用中的trap指令),是同步的。两者都会导致CPU进入内核态,但产生源不同。

Q3:为什么系统调用比普通函数调用慢? A:系统调用需要:用户态→内核态切换(涉及PSW/PC保存和恢复)、参数验证、内核栈切换、中断向量查找等额外开销。而普通函数调用只需call/ret指令和栈操作。

Q4:大内核和微内核各自的代表操作系统有哪些? A:大内核代表——Linux、传统的Unix、Windows 9x系列。微内核代表——Minix、QNX、L4微内核。混合内核代表——Windows NT系列(XP/Vista/10/11)、macOS。现代Linux虽然是宏内核,但支持模块化动态加载(insmod/modprobe),一定程度上融合了微内核的优点。

Q5:发生系统调用时,参数如何传递给内核? A:三种方式:(1) 通过寄存器传递(参数少时,最快);(2) 通过内存中的参数表传递(参数多时),将参数表地址放在寄存器中;(3) 通过堆栈传递(复杂场景)。x86-64 Linux使用寄存器传递前6个参数,其余通过堆栈。这些方式可以组合使用。

1.11 本章知识点速查表

知识点 核心要点 考查形式
四大特征 并发、共享、虚拟、异步 选择题概念辨析
内核态vs用户态 特权指令只能在核心态执行 选择题
中断分类 内中断(异常)=陷阱/故障/终止,外中断 选择题
系统调用 用户程序的唯一OS接口,访管指令触发 选择题+简答
OS架构 大内核(性能)vs微内核(可靠)vs混合 选择题
OS引导 POST→MBR→加载内核→init 选择题

示例题

示例1: 判断正误:"在多核CPU中,既可以实现并发也可以实现并行。" 解:对。多核CPU可以在同一时刻执行多个程序(并行),也可以交替执行多个程序(并发)。注意即使是单核,也支持并发(通过分时交替)。

示例2: 下面哪些操作必须在核心态执行? A. 从磁盘读取文件 B. 修改PSW C. 触发时钟中断 D. 计算a+b 解:A涉及I/O特权指令,B修改PSW涉及状态切换,C是硬件中断响应——这三个都需要核心态。D是普通算术运算,用户态即可完成。答案:A、B、C。

示例3: 中断和异常的区别是什么?请分别举例。 解:中断(外中断)来自CPU外部,异步发生,如I/O设备完成信号、时钟中断。异常(内中断)来自CPU内部,同步发生包括:陷阱(trap,如系统调用主动触发)、故障(fault,如缺页)、终止(abort,如硬件错误)。核心区别:来源不同(内/外)和是否可预测(同步/异步)。

示例4: 请描述用户程序通过系统调用读取文件的完整过程。 解: (1) 用户程序调用read()库函数(如C标准库中的fread)。 (2) read()库函数将参数放入寄存器,执行访管指令(trap/syscall)。 (3) CPU检测到异常,硬件自动切换到内核态: - 关中断,保存PC和PSW到内核栈。 - 根据系统调用号和中断向量表,跳转到系统调用处理程序入口。 (4) 系统调用处理程序保存现场(通用寄存器)。 (5) 根据系统调用号在系统调用表中找到对应的内核服务函数(sys_read)。 (6) sys_read执行:检查参数→通过VFS找到文件→判断权限→驱动读取磁盘。 (7) 读取完成,返回结果给用户态。 (8) 恢复现场,执行IRET返回用户态。 (9) 用户程序得到读取的数据。

示例5:分时系统和实时系统有什么本质区别?各举两例。 解:分时系统追求公平快速地轮流服务,响应时间通常为秒级(如Unix多用户分时);实时系统追求在截止时间前完成,响应时间通常为毫秒甚至微秒级。分时系统示例:Linux多用户登录、Windows桌面操作系统。实时系统示例:飞行控制系统(硬实时)、在线视频播放(软实时)。

本章小结

操作系统作为计算机系统的核心系统软件,承担着资源管理、用户接口和系统控制三大角色。其四大特征(并发、共享、虚拟、异步)贯穿了整个OS的课程内容。理解内核态/用户态的划分、中断机制以及OS架构设计,是后续深入学习进程管理、内存管理等章节的基石。