第一章 操作系统引论
一、操作系统(OS)的定义与作用
定义 :OS是配置在硬件资源上的第一层软件,是对硬件系统的首次扩充。
核心作用:
- 作为计算机资源的管理者:负责处理机管理、存储器管理、文件管理、设备管理。
- 作为用户与计算机硬件系统的接口:用户通过OS使用计算机硬件资源。
- 作为扩充机器:无软件的计算机称为"裸机",OS将裸机改造为功能更强、更易使用的"虚拟机"。
二、操作系统的发展历程
人工操作方式 → 脱机I/O方式 → 单道批处理系统 → 多道批处理系统 → 分时系统 → 实时系统 → 嵌入式操作系统
- 脱机I/O:事先将用户程序和数据通过纸带输入磁带,CPU需用时从磁带高速调入内存,减少CPU等待时间。
- 单道批处理系统:内存中仅保持一道作业,连续处理;缺点:I/O请求时CPU处于等待状态,利用率低。
- 多道批处理系统:用户作业先存于外存后备队列,由作业调度程序选若干作业调入内存,共享CPU和系统资源,提升CPU利用率。
- 分时系统:核心满足人机交互,支持多用户共享主机,让每个用户感觉独占主机(无其他用户干扰)。
- 实时系统:分为硬实时(如导弹制导系统,必须严格按时完成)和软实时(如火车订票系统,允许轻微延迟)。
三、操作系统的基本特征
- 并发:一段时间内,宏观上有多个程序同时运行(微观上CPU分时切换执行)。
- 共享 :系统资源被多个进程共同使用,分为两种:
- 互斥共享:临界资源,一段时间内仅允许一个进程访问(如打印机)。
- 同时共享:允许多个进程同时访问(如硬盘)。
- 虚拟:通过时分复用、空分复用技术,将一个物理实体转化为多个逻辑对应物(如虚拟内存、虚拟CPU)。
- 异步:进程以不可预知的速度向前推进,OS通过PCB协调,保证进程最终完成。
四、操作系统内核
内核是OS中与硬件紧密相关、最基本、最核心的软件,常驻内存;作用:保护核心软件,提高OS运行效率。
内核两大核心功能:
(一)支撑功能
- 中断处理、时钟管理、原语操作。
- 原语 :由若干条指令组成,完成特定功能的过程,具有原子性(要么全做、要么不做,执行过程不可中断)。
- 原子操作:不可分割的基本操作单位,是原语的核心特性。
(二)资源管理功能
- 进程管理:进程状态管理、进程调度与分配、PCB的创建与撤销。
- 存储器管理:内存空间分配与回收、内存保护、地址映射、内存扩充。
- 设备管理:缓冲区管理、设备分配与回收。
五、处理机的两种工作模式
- 用户态(目态,0态):用户程序运行的模式,仅能执行非特权指令(不会损害系统)。
- 内核态(管态、系统态,1态):OS内核运行的模式,可执行特权指令(如修改内存地址、控制设备)。
- 切换方式:用户程序通过系统调用,从用户态切换到内核态,请求OS内核完成特定功能。
六、中断和异常
(一)中断(外中断)
引入目的:支持CPU与设备的并行操作。
定义:来自CPU执行指令以外的事件(与当前指令无关),如I/O结束中断、时钟中断。
(二)异常(内中断、例外、陷入)
引入目的:处理CPU执行指令本身出现的问题。
定义:源自CPU执行指令内部的事件,分为两类:
- 出错事件:如非法操作码、地址越界、算术溢出、缺页异常。
- 用户请求:如系统调用。
特点:处理依赖当前程序运行现场,不可被屏蔽。
七、操作系统的主要功能
- 处理机管理:进程控制、进程同步、进程通信、死锁处理、处理机调度。
- 存储器管理:核心是提高内存利用率,包括内存分配与回收、地址映射、内存保护与共享、内存扩充。
- 文件管理:计算机中信息以文件形式存在,负责文件的创建、删除、读写、保护等。
- 设备管理:完成用户I/O请求,方便用户使用设备,提高设备利用率。
- 接口管理:包括用户接口(如图形界面、命令行)和程序接口(如系统调用)。
八、操作系统的结构
- 简单式结构
- 模块化结构
- 分层式结构
- 微内核结构:仅保留OS最基本功能(如进程通信、中断处理),体积小、可扩展性强。
- 外核结构
九、系统调用
本质:应用程序请求OS内核完成某一功能的特殊过程调用,是用户程序与OS内核交互的唯一途径。
第二章 进程的描述与控制
(一)前驱图
有向无环图(DAG),用于描述进程间执行的先后顺序(如A进程完成后,B进程才能执行)。
(二)程序的执行方式
- 顺序执行:特征为顺序性、封闭性(独占全机资源)、可再现性(多次执行结果一致)。
- 并发执行:特征为间断性(CPU分时切换)、失去封闭性(共享资源)、不可再现性(多次执行结果可能不同)。
(三)进程的描述
1. 进程的定义
进程是程序的执行过程,是系统进行资源分配和调度的独立单位;创建进程的实质是创建其对应的PCB(进程控制块)。
2. 进程的特征
- 动态性:由创建产生、调度执行、撤销消亡。
- 并发性:可与其他进程并发执行。
- 独立性:是资源分配和调度的独立单位。
- 异步性:以不可预知的速度推进。
3. 进程的状态及转化
- 三大基本状态:就绪态(等待CPU调度)、执行态(占用CPU运行)、阻塞态(等待某事件完成,如I/O)。
- 补充:具有挂起操作的状态转换(挂起就绪、挂起阻塞),核心是将进程从内存移至外存,释放内存资源。


(四)进程控制块(PCB)
1. PCB的作用(面试高频)
- 作为进程独立运行的基本标志:创建进程即创建其PCB,PCB存在则进程存在。
- 实现间断式运行:进程中断时,CPU现场信息(如寄存器、程序计数器)保存在PCB中,再次调度时恢复。
- 提供进程管理所需信息:OS通过PCB实现对进程的控制和管理。
- 提供进程调度所需信息:供调度算法选择下一个执行的进程。
- 实现进程间的同步与通信:通过PCB中的相关信息(如等待队列指针)协调进程交互。
2. PCB包含的核心信息(面试高频)
- 进程标识信息:PID(进程唯一ID)、父进程ID、用户ID、进程名称、优先级。
- 进程状态信息:记录当前状态(新建、就绪、运行、阻塞、终止),用于调度判断。
- 处理机上下文(核心):程序计数器(PC,记录下一条要执行的指令地址)、通用寄存器、程序状态字(PSW);用于进程切换时保存/恢复现场。
- 进程调度信息:调度优先级、时间片大小、等待队列指针、调度算法所需参数。
3. PCB的组织方式
操作系统中,系统会把所有PCB集中管理,主要三种组织方式:
-
线性表方式(顺序表)
把所有PCB连续存放在一个数组中,不管进程状态统一排列。 优点:结构简单、实现容易。缺点:查找、增删效率低,进程多的时候开销大。
-
链表方式(最常用)
按照进程状态分类,分别形成多条链表: 就绪队列:所有就绪等待CPU的进程。 运行队列:当前正在运行的进程(单CPU只有1个)阻塞/等待队列:等待某事件(I/O、信号)的进程。优点:增删进程速度快,调度方便,分类清晰。缺点:查找指定进程较慢。
-
索引表方式
建立若干索引表(就绪索引表、阻塞索引表等)。索引表中存放对应状态PCB的地址指针,PCB本体集中存放。优点:兼顾查找速度与动态管理,适合进程数量多的系统。
(四)进程创建,终止,阻塞和唤醒
引起进程创建的事件
- 用户登录
- 作业调度(批处理)
- 进程请求创建子进程
- 提供服务(系统主动创建服务进程)
进程创建过程
- 申请空白PCB;
- 为新进程分配其运行所需的资源;
- 初始化PCB(程序状态、优先级、程序计数器等);
- 将新进程插入就绪队列。
引起进程终止的事件
- 进程正常运行结束
- 进程运行异常终止
- 外界强制干预终止进程
进程终止过程
- 撤销进程的相关链接
- 释放进程占用的各类资源
- 回收进程控制块PCB
引起进程阻塞的事件
- 发起I/O请求
- 等待特定事件发生
- 等待获取临界资源
进程阻塞过程
当前进程放弃CPU,修改PCB状态为阻塞,移入对应阻塞队列,调度其他进程执行。
引起进程唤醒的事件
进程等待的事件完成,如I/O结束、资源释放、等待信号到达。
进程唤醒过程
将进程从阻塞队列移出,修改PCB状态为就绪,插入就绪队列等待系统调度。
(五)进程通信的类型
低级通信
仅传递少量控制信息,效率低、数据传输能力弱。
- 共享变量
- 信号量、信号
高级通信
可大批量传输数据,方便高效,分为三类:
- 共享存储器:开辟共享内存空间,进程直接读写交换数据。
- 消息传递:将通信的数据封装在消息中,以消息为单位收发数据,分为直接通信、间接通信。
- 管道通信:利用管道文件(用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件),实现父子进程或亲缘进程单向数据传输。
(六)线程
1. 线程的定义
线程是进程内的一个执行单元,是进程中独立的调度和执行实体;一个进程可包含多个线程,共享进程的地址空间与资源,线程自身仅拥有少量私有资源。进程是资源分配的基本单位,线程是调度的基本单位。
2. 线程的基本特征
- 轻型实体:线程自身资源极少,创建与销毁开销远小于进程。
- 共享资源:同一进程内所有线程共享进程内存、文件、设备等资源。
- 独立调度:线程是操作系统调度和分派的基本单位。
- 并发执行:同一进程内多线程可并发运行,提升程序执行效率。
- 依附进程:线程不能独立存在,进程消亡则所属所有线程随之终止。
3. 线程与进程的区别
-
资源分配单位
进程:是系统资源分配 的基本单位,拥有独立完整的地址空间与系统资源。
线程:仅拥有少量私有资源,共享所属进程的全部资源,无独立地址空间。每个线程中有线程控制块TCB(Thread control block)
-
调度执行单位
进程:早期OS以进程为调度单位,切换开销大。
线程:现代OS以线程为调度单位,切换仅需保存少量上下文,开销极小。
-
开销成本
进程:创建、撤销、切换开销大,系统负担重。
线程:创建、撤销、切换速度快,系统开销低。
-
通信方式
进程:进程间地址空间隔离,需依靠高级通信机制(管道、消息、共享内存)完成通信。
线程:同进程内线程共享地址空间,可直接读写全局变量实现通信,简单高效。
-
独立性与稳定性
进程:各进程相互独立,一个进程崩溃不会影响其他进程。
线程:同一进程内线程高度耦合,单个线程异常崩溃,会导致整个进程终止。
-
地址空间
进程:拥有独立的虚拟地址空间,相互隔离。
线程:同进程内所有线程共用同一地址空间。
4. 线程的实现方式
-
用户级线程(ULT)
线程管理全部由用户空间的线程库完成,操作系统内核感知不到线程存在,仅能识别进程;线程切换在用户态完成,无需内核介入,不用切换状态,切换开销小。缺点:单进程内多个用户级线程无法利用多核CPU,一个线程阻塞会导致整个进程阻塞。
-
内核级线程(KLT)
线程的创建、调度、管理由操作系统内核实现,内核可直接感知线程;线程切换需陷入内核态,支持多核并行执行,某一线程阻塞不影响同进程其他线程。缺点:线程切换、创建销毁开销相对更大。
-
混合实现方式
结合用户级线程与内核级线程的优势,采用多对一、一对一、多对多映射模型;既保留用户级线程低开销的特点,又可借助内核级线程实现多核调度与阻塞隔离,是当前主流操作系统常用方案。
5. 进程和程序的区别
(1) 程序是永存的;进程是暂时的,进程是程序的一个实例,是程序的一次执行过程。
(2)程序是静态的观念,进程是动态的观念;
(3)程序是进程的代码部分;
(4)进程在内存中,程序在外存中;
(5)进程和程序不是一 一对应的: 一个程序可对应多个进程即多个进程可执行同一程序; 一个进程可以执行一个或几个程序。
第三章 处理机调度和死锁
(一)处理机调度的层次
三层调度
- 高级调度:外存 → 内存(选作业)
- 中级调度:内存 ↔ 外存(换进程)
- 低级调度:就绪 → 运行(抢CPU)
1. 高级调度(长程调度/作业调度)
- 对象:外存后备作业
- 功能:从外存作业队列中挑选作业调入内存,为其创建进程、分配资源,放入就绪队列。
- 频率:最低,分钟/小时级调度。
- 作用:决定多少作业进入系统,调控系统负载。
2. 中级调度(内存调度)
- 对象:挂起进程
- 功能:负责进程的挂起与激活,在内存和外存之间调换进程,缓解内存紧张。
- 频率:中等。
- 作用:提高内存利用率与系统吞吐量,实质是存储器管理的对换功能。
3. 低级调度(进程调度/短程调度)
- 对象:内存就绪进程/线程
- 功能:从作业的就绪队列选中一个进程,分配CPU使其运行。
- 频率:最高,毫秒级,最频繁。
- 作用:直接决定CPU的实时分配,是最核心的调度。
(二) 作业和作业调度
1. 作业
作业是比程序更为广泛的概念 ,是用户提交给操作系统的完整任务单位,包含程序、数据、作业控制指令,是用户请求系统完成的一项完整工作。
- 存在位置:未运行时存放在外存后备队列;
- 组成:程序+原始数据+作业说明书;
- 关系:作业调入内存后,为每个作业设置了一个作业控制块(JCB), 会为其创建对应进程。
2. 作业调度(高级调度、长程调度)
作业调度是处理机三层调度中的高级调度 ,是操作系统按照一定算法,从外存后备作业队列中选取合适作业调入内存,分配必要资源、创建进程,并加入进程就绪队列的过程。
- 调度对象:外存中的后备作业;
- 核心任务:决定哪些作业可以进入内存参与竞争CPU;
- 调度频率:最低,执行速度慢;
- 适用场景:多道批处理系统为主,分时、实时系统一般无高级调度。
(三)进程调度任务
1. 进程调度任务
- 保存CPU现场信息:保存当前运行进程的**CPU现场信息,便于进程再次调度时恢复执行。
- 按某种算法选择进程:按照预设调度算法,从就绪队列中选择一个就绪进程。
- 将CPU分配给进程:将CPU使用权分配给选中进程,恢复其运行现场,使其投入运行。
2. 进程调度机制
- 排队机制:系统将所有就绪进程按规则组织为就绪队列,统一管理。
- 分派机制:调度程序选中目标进程后,完成上下文切换,分配CPU资源。
- 切换机制:保存旧进程上下文、加载新进程上下文,完成进程切换。
进程调度通过调度程序实现,核心包含排队器、分派器、上下文切换器三个机制:排队器将就绪进程按策略组织成队列以提升调度效率;分派器从就绪队列中取出选定进程;上下文切换器则通过保存/恢复进程的CPU现场信息(如寄存器内容)完成进程切换,将CPU分配给新进程运行。为降低切换开销,现代计算机常采用多组寄存器的硬件方案来减少切换耗时。
对应示意图:

3. 进程调度方式
(1)抢占式调度(剥夺式)
当有更高优先级进程到达、或当前进程时间片用完时,立即暂停正在运行的进程,强行剥夺其CPU资源,调度新进程执行。
- 优点:响应速度快、系统实时性强、公平性好。
- 缺点:进程切换频繁,系统开销较大。
- 适用:分时系统、实时系统。
(2)非抢占式调度(非剥夺式)
一旦进程获得CPU,就会一直运行,直到进程主动放弃CPU(运行结束、主动阻塞),才进行调度切换。
- 优点:调度简单、切换开销小。
- 缺点:系统响应慢、紧急任务无法及时处理。
- 适用:早期批处理系统。