操作系统期末复习笔记 MARKDOWN格式

操作系统期末复习笔记


目录

  1. 第1-2章:操作系统概述
  2. 第3章:程序结构
  3. 第4章:线程与调度
  4. 第5章:内存管理
  5. 第6章:文件系统
  6. 第7章:I/O系统
  7. 第8章:并发与同步
  8. 第9章:进程间通信(IPC)

占位图
在这里插入图片描述

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

1.1 抽象概念

概念说明
时间共享(Time-sharing)多个任务分时复用同一资源,如CPU时间片轮转
空间共享(Space-sharing)多个任务同时占用不同空间,如内存分区

1.2 计算模型

  • 图灵机模型:理论计算模型,由无限长纸带、读写头和状态控制器组成
  • 冯·诺依曼架构:存储程序概念,指令和数据存放在同一存储器中
    • 五大部件:运算器、控制器、存储器、输入设备、输出设备

1.3 计算机系统构成

计算机系统 = 硬件(CPU + 内存 + I/O设备)+ 软件(操作系统 + 应用程序)

1.4 指令执行周期

取指(Fetch)→ 译码(Decode)→ 执行(Execute)→ 写回(Writeback)

1.5 8086分段式内存管理

概念说明
逻辑地址程序员可见的地址,形式为 段选择子:偏移量
线性地址通过分段单元转换后的地址
物理地址实际访问内存的地址

地址生成公式:

线性地址 = 段基址 << 4 + 偏移量

1.6 寻址方式

寻址方式说明示例
寄存器寻址操作数在寄存器中mov ax, bx
内存寻址操作数在内存中mov ax, [addr]
立即数寻址操作数在指令中mov ax, 1234h

1.7 I/O设备

  • 设备通过数据寄存器状态寄存器命令寄存器与CPU通信

1.8 I/O方法

方法说明特点
直接I/OCPU直接控制设备简单但CPU利用率低
轮询(Polling)CPU不断检查设备状态忙等,浪费CPU
中断(Interrupt)设备完成时通知CPU提高效率,异步
DMA直接内存访问,设备直接读写内存高效,CPU仅参与开始和结束

1.9 处理器特权级别

级别说明特点
用户态(User Mode)运行用户程序权限受限,不能执行特权指令
内核态(Kernel Mode)运行操作系统内核可执行所有指令

特权指令:只能在内核态执行的指令(如I/O指令、中断管理指令等)

1.10 中断与陷阱

类型说明特点
中断(Interrupt)由外部硬件设备触发异步、不可预测
陷阱(Trap)由CPU执行指令触发同步、可预测(如系统调用)

系统调用流程:用户程序 → 陷入内核 → 执行系统服务 → 返回用户态

1.11 操作系统分类

分类特点典型代表
批处理(Batch)作业成批提交,无交互早期OS
分时(Time-sharing)时间片轮转,交互式Unix, Linux, Windows
实时(Real-time)严格的时间约束RTOS, VxWorks

1.12 操作系统结构

结构说明优缺点
库式(Library)无隔离,OS以库形式提供高效但无保护
单体内核(Monolithic)所有功能在内核态高效但庞大,一错全崩
微内核(Microkernel)仅保留最基本功能,其他在用户态稳定安全但通信开销大
外内核(Exokernel)仅负责资源保护,不提供抽象灵活但复杂
虚拟机(Virtual Machine)在硬件上运行多个OS强隔离但性能有损耗
多内核(Multi-kernel)每个核运行独立内核适合多核/分布式系统

1.13 策略与机制分离

策略(Policy):做什么(如:哪个进程优先运行)
机制(Mechanism):怎么做(如:如何切换进程)
设计 vs 实现:设计关注"做什么",实现关注"怎么做得高效"


第3章:程序结构

3.1 程序创建流程

源代码(Source)→ 编译器 → 汇编器 → 链接器 → 可执行文件

3.2 程序加载

  • 加载器(Loader)将可执行文件从磁盘加载到内存
  • 进行地址重定位、动态链接等操作

3.3 静态链接 vs 动态链接

特性静态链接动态链接
时机编译时运行时(或加载时)
文件大小较大(包含所有库)较小(共享库)
内存占用各进程独立拷贝,浪费共享库内存,节省
更新需重新链接替换库文件即可
部署简单(不依赖环境)需确保库存在

3.4 位置无关代码(PIC)

  • PIC:代码中不包含绝对地址,所有地址均为相对地址
  • 优势:可加载到内存任意位置,无需重定位
  • 通过GOT(全局偏移表)和PLT(过程链接表)实现

3.5 延迟绑定(Lazy Binding)

  • 函数第一次被调用时才进行符号解析和重定位
  • 提高程序启动速度
  • 利用PLT和GOT协作实现

3.6 内存段布局

+------------------+  高地址
|      栈(Stack)   |  局部变量、函数调用信息(向下增长)
+------------------+
|        ↕         |  空闲区域
+------------------+
|      堆(Heap)    |  动态分配内存(向上增长)
+------------------+
|  .bss / .zidata   |  未初始化的全局/静态变量
+------------------+
|    .rwdata        |  已初始化的可读写数据
+------------------+
|    .rodata        |  只读数据(字符串常量等)
+------------------+
|    .text          |  代码段(指令)
+------------------+  低地址

3.7 可执行文件 vs 进程

概念说明
可执行文件磁盘上的静态文件,包含代码和数据
进程内存中动态执行实例,包含代码、数据、堆栈、寄存器状态

第4章:线程与调度

4.1 指令流执行方式

方式说明
顺序执行(Sequential)一条指令接一条,无重叠
协作式(Cooperative)程序主动让出CPU
抢占式(Preemptive)OS强制切换线程

4.2 进程 vs 线程

比较维度进程线程
定义内存空间分配单位CPU时间分配单位
地址空间独立共享所属进程地址空间
资源拥有拥有独立资源仅拥有TCB和栈
切换开销
通信需IPC直接共享内存

4.3 线程模型

模型说明优缺点
1:1 模型一个用户线程映射到一个内核线程简单,但内核开销大
M:1 模型多个用户线程映射到一个内核线程高效但一个阻塞全阻塞
M:M 模型多个用户线程映射到多个内核线程灵活但复杂

协程/纤程(Coroutine/Fiber):用户态实现的轻量级线程,由程序员控制切换,非抢占式

4.4 线程状态

就绪(Ready) ↔ 运行(Running) → 阻塞(Blocked)
     ↑                                    |
     └────────────────────────────────────┘
  • 就绪(Ready):可运行但未获得CPU
  • 运行(Running):正在CPU上执行
  • 阻塞(Blocked):等待某事件(I/O、锁等)

4.5 TCB(线程控制块)

线程控制块存储:程序计数器、寄存器状态、栈指针、线程状态、优先级、调度信息

4.6 调度指标

指标定义
吞吐量(Throughput)单位时间内完成的进程数
等待时间(Waiting Time)进程在就绪队列中等待的总时间
周转时间(Turnaround Time)从提交到完成的总时间
响应时间(Response Time)从提交到首次响应的时间
响应比(Response Ratio)HRRN用,公式见下方

4.7 调度算法

算法说明特点
FCFS先来先服务简单,平均等待时间可能很长( convoy effect)
SJF最短作业优先非抢占,平均等待时间最优,但需预知执行时间
SRTF最短剩余时间优先SJF的抢占版本
HRRN最高响应比优先响应比 = (等待时间 + 执行时间) / 执行时间
RR时间片轮转公平,响应快,时间片大小是关键
FP固定优先级优先级高的先执行
FPRR固定优先级 + 时间片轮转同一优先级内轮转
加权RR不同进程分配不同权重的时间片按比例分配CPU
MLFQ多级反馈队列优先级动态调整,兼顾响应和吞吐

HRRN响应比公式:

响应比 = (等待时间 + 预计执行时间) / 预计执行时间

4.8 调度层次

调度类型执行频率作用
长程调度(Long-term)决定哪些作业进入系统(批处理)
中程调度(Medium-term)中等进程换入换出(swapping)
短程调度(Short-term)选择下一个运行的进程/线程

4.9 并发 vs 并行

概念说明
并发(Concurrency)多个任务在同一时间间隔内交替执行(逻辑同时)
并行(Parallelism)多个任务在同一时刻同时执行(物理同时)

4.10 TLB(转译后备缓冲器)

  • TLB:CPU内部的页表缓存,加速地址翻译
  • 利用了时间局部性空间局部性

4.11 局部性原理

类型说明
时间局部性最近访问的地址很可能再次被访问
空间局部性当前访问地址附近的地址很可能被访问

4.12 工作集

WS(t, T) = 在时间区间 (t - T, t] 内访问的所有页面的集合
  • 工作集大小决定了系统应保留多少物理页面
  • 工作集模型用于预防颠簸(Thrashing)

第5章:内存管理

5.1 内存分配方式

方式说明问题
固定分区内存预分为固定大小的区域内部碎片(分配大于需求)
动态分区按需分配大小外部碎片(空闲块不连续)

5.2 动态分区分配算法

算法策略特点
First-Fit(首次适应)找到第一个足够大的空闲块简单快速
Best-Fit(最佳适应)找到最小的足够大的空闲块减少浪费但产生小碎片
Worst-Fit(最差适应)找到最大的空闲块减少小碎片数量

竞争比(Competition Ratio):在线算法性能与离线最优算法性能之比

5.3 进程与保护域

  • PCB(进程控制块):存储进程信息和状态
  • 保护域:进程的权限范围,决定能访问哪些资源

5.4 分段(S-MMU)

逻辑地址 = (段号, 偏移量)
物理地址 = 段基址(段表[段号])+ 偏移量
  • 段表存放:段基址、段界限、权限等
  • 分段管理的优点:支持共享和保护,符合程序逻辑

5.5 分页(P-MMU)

逻辑地址 = (页号, 页内偏移)
物理地址 = 帧号 << 偏移量位数 + 页内偏移
  • 页表:页号 → 帧号的映射
  • 页大小:通常4KB

5.6 多级页表(基数树)

  • 解决大地址空间下页表过大的问题
  • 例:x86_64使用4级页表(PML4 → PDPT → PD → PT)
  • 优点:无需为未使用的地址空间分配页表

5.7 请求分页(Demand Paging)

  • 页面不在内存时触发缺页中断(Page Fault)
  • 缺页处理流程
    1. CPU触发缺页异常
    2. 进入内核态,保存上下文
    3. 检查地址合法性
    4. 从磁盘读取所需页面
    5. 更新页表
    6. 恢复上下文,重新执行指令

5.8 页面置换算法

算法说明特点
LFD/Belady最优置换未来最晚使用的页最优但不可实现(需预知未来)
FIFO置换最早进入的页简单但有Belady异常(增加帧数反而增加缺页)
LRU置换最久未使用的页性能好但硬件成本高
LFU置换使用次数最少的页需计数
CLOCK/第二机会近似LRU,使用引用位简单实用,广泛使用

Belady异常:FIFO中,分配的物理帧数增加,缺页率反而上升的现象

5.9 颠簸(Thrashing)

  • 现象:系统忙于页面置换,CPU利用率极低
  • 原因:分配给进程的物理页面小于其工作集
  • 解决方案:工作集模型、缺页率控制

5.10 写时复制(Copy-on-Write, COW)

  • 父子进程共享物理页面
  • 仅当一方写入时才创建副本
  • 节省内存,加速fork

5.11 内存映射文件

  • 将文件映射到进程的地址空间
  • 对内存的读写自动同步到文件
  • 零拷贝:减少数据在用户态和内核态间的复制

第6章:文件系统

6.1 内存 vs 存储

特性内存存储
易失性断电数据丢失持久化保存
速度快(ns级)慢(ms级)
编址字节编址(按地址访问)块编址(按块访问)

编址(Addressing)是衡量存储的金标准

6.2 文件抽象

结构说明
字节流(Byte Stream)无结构的字节序列
记录(Record)固定/可变长度的逻辑记录
索引结构支持随机访问的索引

6.3 文件系统层次

文件层(文件操作接口)
     ↓
文件系统层(具体文件系统实现,如EXT4、NTFS)
     ↓
卷管理层(Volume Management)
     ↓
物理设备层(磁盘等)

6.4 路径

类型说明示例
绝对路径从根目录开始/home/user/file.txt
相对路径从当前目录开始./doc/file.txt

6.5 文件分配方式

方法说明优缺点
连续分配文件存储在连续块访问快但产生外部碎片
链式分配每块指向下一块无外部碎片但随机访问慢
FAT文件分配表存储链接信息改进的链式分配
索引分配(inode)inode包含所有数据块指针支持高效随机访问
基于区段(Extent)连续的多个数据块用一个区间表示大文件高效(EXT4使用)
混合分配多级索引结合直接块UNIX中广泛使用

6.6 空闲空间管理

方法说明
链表空闲块链接在一起
位图(Bitmap)每个块对应一个bit,0空闲1占用
成组链接(Group Indexing)UNIX中使用,管理效率高

6.7 FCB与inode

  • FCB(文件控制块):Windows系统中,存储文件元数据
  • inode(索引节点):Unix/Linux系统中,存储元数据(除文件名外)
    • 包含:文件大小、权限、时间戳、数据块指针

6.8 目录结构

  • 目录是特殊的文件,存储文件名到inode/FCB的映射
  • 多级目录:层次化组织

6.9 链接

类型说明特点
硬链接(Hard Link)多个目录项指向同一inode不能跨越文件系统,不能链接目录
软链接/符号链接(Symbolic Link)存储目标文件路径可以跨越文件系统,原文件删除后失效
快捷方式(Shortcut)Windows特有的链接方式类似软链接

6.10 VFS(虚拟文件系统)

  • VFS:统一不同文件系统的操作接口
  • 支持同时挂载多种文件系统(EXT4、NTFS、FAT32等)
  • 通过抽象层屏蔽底层差异

6.11 访问控制

模型说明
ACM(访问控制矩阵)行=主体,列=对象,格=权限
ACL(访问控制列表)每个资源关联一个权限列表
RBAC(基于角色的访问控制)权限赋予角色,角色赋予用户
DAC(自主访问控制)文件所有者自行决定权限
MAC(强制访问控制)系统统一管理,用户不能改变
CBAC(基于能力的访问控制)持有"令牌"即拥有权限

6.12 CHS与LBA转换

LBA = (C × HM + H) × SM + (S - 1)

其中:C=柱面号,H=磁头号,S=扇区号,HM=每柱面磁头数,SM=每磁道扇区数

6.13 EXT4 文件系统

组件说明
超级块(Super Block)文件系统全局信息(块大小、总块数等)
块组(Block Group)将磁盘分为多个块组,每个组独立管理
区段树(Extent Tree)用树状结构管理连续的数据块区间,大文件效率高

第7章:I/O系统

7.1 设备分类

分类维度类别
使用方式独占设备、共享设备、虚拟设备
速度低速(键盘)、中速(磁盘)、高速(GPU)
传输单位字符设备(字节流)、块设备(块)
共享类型可共享、不可共享

7.2 SPOOLING(假脱机技术)

  • 原理:用磁盘作为缓冲区,把独占设备模拟成共享设备
  • 核心组件:
    • 输入井:暂存输入数据
    • 输出井:暂存输出数据
    • 守护进程(Daemon):管理SPOOLING的后台进程

7.3 实时时钟与定时器中断

  • RTC(实时时钟):提供实际时间
  • 定时器中断:周期性产生中断,用于时间片调度、定时任务

7.4 缓冲区 vs 缓存

概念说明
缓冲区(Buffer)临时存储数据,协调速度差异
缓存(Cache)存储频繁访问数据的副本,提高访问速度

7.5 磁盘调度算法

算法说明特点
FCFS按请求顺序调度公平但平均寻道时间长
SSTF选择离当前磁头最近的请求寻道时间短但可能"饿死"远请求
SCAN(电梯算法)磁头单向移动,沿途处理请求无饿死
C-SCANSCAN的循环版,单向到顶后直接回到另一端等待时间更均匀
LOOKSCAN的改进版,到最后一个请求即掉头更高效
C-LOOKC-SCAN的改进版,到最后一个请求直接返回最均匀

7.6 设备驱动架构

应用层 → 系统调用 → VFS/设备文件 → 驱动层 → 硬件设备
  • 设备号:主设备号(标识驱动类型)+ 次设备号(标识具体设备)
  • Linux设备文件:/dev/sda/dev/tty0

7.7 USB描述符层次

设备描述符(Device) → 配置描述符(Configuration) → 接口描述符(Interface) → 端点描述符(Endpoint)
  • 一个设备有多个配置,一个配置有多个接口,一个接口有多个端点

7.8 中断处理

阶段说明特点
上半部(Top-half / ISR)中断服务例程必须快速完成,关闭中断
下半部(Bottom-half / kworker)延后处理可中断,处理复杂工作

7.9 阻塞 vs 非阻塞 I/O

类型说明
阻塞I/O进程等待I/O完成,期间进入阻塞态
非阻塞I/O立即返回(成功或错误),进程不等待

7.10 同步 vs 异步 I/O

类型说明
同步I/O发起操作后等待或轮询直到完成
异步I/O发起操作后立即返回,完成时回调通知

第8章:并发与同步

8.1 基本概念

概念说明
互斥(Mutual Exclusion)同一时刻只有一个线程访问共享资源
同步(Synchronization)线程按特定顺序执行
临界资源(Critical Resource)一次只允许一个进程使用的资源
临界区(Critical Section)访问临界资源的代码段

8.2 Bernstein条件(并发条件)

两个进程P1和P2可以并发执行,当且仅当:

R(P1) ∩ W(P2) ∪ W(P1) ∩ R(P2) ∪ W(P1) ∩ W(P2) = ∅

其中 R = 读集,W = 写集

8.3 Peterson算法

// 进入临界区
flag[i] = true;
turn = j;
while (flag[j] && turn == j);

// 临界区

// 退出临界区
flag[i] = false;
  • 满足互斥、前进、有限等待
  • 仅适用于两个线程

8.4 自旋锁(Spin Lock)

指令说明架构
SWAP/XCHG交换寄存器和内存值x86
TAS/BTS测试并设置通用
CMPXCHG/CAS比较并交换通用
  • 自旋锁特点:忙等(busy-waiting),适用于短时间锁定

8.5 锁的三条标准

标准说明
互斥(Mutual Exclusion)最多一个线程在临界区中
全局进展(Global Progress)不会死锁,总有一个线程能进入
局部进展/有限等待(Bounded Waiting)每个线程最终都能进入(无饥饿)

8.6 互斥锁(Mutex)

  • 阻塞锁:获取不到锁时线程进入阻塞态
  • 区别于自旋锁的忙等

8.7 管程(Monitor)

  • 管程:封装了锁和同步机制的抽象
  • 线程进入管程时获取锁,退出时释放锁

8.8 条件变量

操作说明
wait释放锁,等待条件满足
signal/notify通知等待线程条件已满足
Hoare语义 vs Mesa语义
特性HoareMesa
signal后立即切换给等待线程等待线程进入就绪队列
被唤醒线程保证条件成立条件可能不成立,需重新检查
实现复杂度低(实际更常用)

惊群效应(Thundering Herd):广播通知所有等待线程,但只有一个能执行

8.9 信号量(Semaphore)

  • P操作(acquire):等待信号量正数后减1
  • V操作(release):信号量加1,唤醒等待线程
P(S): while (S <= 0); S--;
V(S): S++;
类型初始值用途
互斥信号量1实现互斥
计数信号量n管理有限资源

8.10 死锁

三个必要条件
条件说明
互斥(Mutual Exclusion)资源不能共享
持有并等待(Hold-and-Wait)持有资源的同时等待其他资源
循环等待(Circular Wait)形成资源请求环路

注意:死锁的四个必要条件(包含"不可抢占")但教材使用三个条件,"不可抢占"被归入互斥

8.11 活锁(Livelock)

  • 线程没有阻塞但一直在重复操作,无法取得进展
  • 区别于死锁(死锁中线程阻塞不执行)

8.12 死锁处理

资源分配图
  • 圆圈 = 进程
  • 方框 = 资源(内部点表示实例数)
  • 进程→资源 = 请求边
  • 资源→进程 = 分配边
  • 有环 + 每个资源只有一个实例 = 死锁
银行家算法(Banker’s Algorithm)
  • 安全状态:存在一个安全序列使所有进程都能完成
  • 核心:计算 Available、Need、Allocation
  • 安全性检查算法 + 资源请求算法
死锁预防
策略说明
破坏互斥尽可能使用共享资源
破坏持有并等待一次性请求所有资源
破坏循环等待资源编号,按序请求(顺序资源分配法)

8.13 无锁数据结构

级别说明
Obstruction-free无竞争时保证进展
Lock-free系统级保证至少一个线程进展
Wait-free每个线程有限步骤内完成操作

第9章:进程间通信(IPC)

9.1 通信层次

指令流内 → 线程间(共享内存)→ 进程间(IPC)→ 应用间(网络)

9.2 可靠 vs 不可靠IPC

类型说明
可靠(Reliable)保证消息传递、顺序、不重复
不可靠(Unreliable)不保证上述特性

9.3 IPC方式

管道(Pipe)
类型说明特点
匿名管道只能在父子进程间单向通信
命名管道/FIFO可在任意进程间单向,有路径名
信号(Signal)
  • 异步通信方式
  • 例:SIGINT(Ctrl+C)、SIGKILLSIGSEGV
  • 有限的信息传递(仅信号编号)
信号量(跨进程)
  • 用于同步访问共享资源
  • 可以跨进程命名
消息队列(Message Queue)
  • 优点:有格式的消息、异步通信
  • 缺点:需要两次拷贝(发送方→内核→接收方)
共享内存(Shared Memory)
特点说明
速度最快(零拷贝,同进程内直接访问)
同步需配合信号量/互斥锁使用
优势无需在内核和用户态之间拷贝数据

9.4 IPC对比

方式速度适用场景特点
管道父子进程简单通信简单易用
信号事件通知信息量少
消息队列中等结构化消息通信异步,有格式
共享内存最快大数据量频繁通信零拷贝,需同步
信号量-同步而不是通信用于互斥和同步

附录:常见考点速查

关键公式速记

公式说明
线性地址 = 段基址 << 4 + 偏移量8086分段的地址转换
响应比 = (等待时间 + 预计执行时间) / 预计执行时间HRRN调度
LBA = (C × HM + H) × SM + (S - 1)CHS到LBA转换

经典算法总结

算法所属章节核心思想
Banker’s算法并发避免进入不安全状态
Peterson算法并发软件实现互斥
LRU置换内存置换最久未用页面
C-LOOKI/O磁头单向移动到最远请求后返回
银行家算法并发资源分配的避免死锁

对比记忆要点

  • 进程 vs 线程:内存分配单位 vs CPU分配单位
  • 中断 vs 陷阱:异步不可预测 vs 同步可预测
  • 死锁 vs 活锁:阻塞不执行 vs 执行但无进展
  • 静态链接 vs 动态链接:编译时 vs 运行时
  • 分页 vs 分段:固定大小 vs 逻辑分段
  • 管程 vs 信号量:封装方式 vs 底层机制
  • 同步 vs 异步:等待完成 vs 回调通知
  • 阻塞 vs 非阻塞:等待 vs 立即返回

最后提示:操作系统考试中,算法流程(如页面置换、调度算法、银行家算法)和概念对比(所有表格中的内容)是高频考点。
建议重点掌握:PV信号量经典问题、页面置换计算、调度算法计算、死锁的判断与预防。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值