操作系统复习


🧠 Chapter 1 Introduction - 操作系统导论笔记

一、什么是操作系统 (What is an OS?)

📌 1. 操作系统的两个基本定义:

  • It is an extended machine(它是扩展机器)
    • 为用户提供更简单、更抽象的接口(如文件而不是磁盘块,进程而不是物理CPU)
    • 屏蔽硬件复杂性,提供虚拟机接口
  • It is a resource manager(它是资源管理器)
    • 管理硬件资源(如 CPU、内存、I/O 设备)
    • 分配资源、调度任务,提高资源利用率

二、操作系统的发展历史 (History of Operating Systems)

📅 1. 第一代:无操作系统(1940s~1950s)

  • 使用打孔卡或纸带
  • 人工操作,只有裸机(bare machine)

📅 2. 第二代:批处理系统(Batch System,1950s~1960s)

  • 引入 批处理(Batch processing)
  • 使用 作业控制语言 JCL
  • 有简单操作系统支持,自动运行作业

📅 3. 第三代:多道程序设计(Multiprogramming,1960s~1970s)

  • 支持多个程序同时驻留内存,提高CPU利用率
  • 引入:
    • Spooling(假脱机技术):I/O 排队,提高设备利用率
    • Time-sharing(分时系统):多个用户共享CPU,实现交互式使用

📅 4. 第四代:个人计算和网络操作系统(1980s~至今)

  • 图形界面、多媒体、互联网
  • 引入 分布式系统、移动系统、嵌入式系统等

三、操作系统的结构 (Operating System Structure)

🧱 1. Monolithic System(整体结构)

  • 单块程序组成所有功能
  • 所有模块运行在内核态(kernel mode)
  • 优点:执行效率高
  • 缺点:模块间耦合高,难于维护

🧱 2. Layered System(层次结构)

  • 操作系统按功能分为多个层次
  • 每一层只依赖于下一层,抽象良好
  • 例子:THE系统、Multics
  • 优点:结构清晰,易于调试
  • 缺点:层次过多可能导致效率低

🧱 3. Microkernel(微内核结构)

  • 只保留最基本的功能在内核(如进程间通信、基本调度)
  • 其他服务(文件系统、驱动程序等)作为用户态服务器运行
  • 优点:安全性高,模块独立性强
  • 缺点:性能开销大

🧱 4. Client-Server Model(客户-服务器模型)

  • 操作系统服务以服务器形式存在,用户进程作为客户端请求服务
  • 通常基于微内核实现
  • 典型应用:分布式操作系统、现代操作系统(如 Windows NT)

🧠 Chapter 2 Process - 操作系统中的进程(详细笔记)


一、Process Model(进程模型)

✅ 多道程序设计(Multiprogramming)& 并发(Concurrency)

  • 多道程序设计:多个程序同时驻留内存,提高CPU利用率。
  • 并发:多个进程“同时”执行,看起来同时进行,实际由调度器快速切换。

二、Process(进程)

✅ 定义

  • 进程(Process):一个正在执行的程序,是程序的运行实例。

✅ Program vs. Process

比较维度 Program(程序) Process(进程)
性质 静态:指令集合 动态:执行中的实体
组成 只包含代码 包括程序、数据、临时状态、控制信息等
数量关系 一个程序可对应多个进程 一个进程可能调用多个程序

三、Process States(进程状态)

✅ 三种基本状态:

  • Running:正在使用CPU
  • Ready:已准备好执行,等待CPU
  • Blocked(或 Waiting):等待某事件(如I/O完成)

img


四、PCB(Process Control Block,进程控制块)

  • 操作系统内核用于管理进程的 数据结构
  • 每个进程一个 PCB,包含:
    • 进程状态、程序计数器、寄存器、内存信息、I/O状态、优先级等

五、Process Context Switch(上下文切换)

  • 当CPU从一个进程切换到另一个进程时,需要保存/恢复上下文(PCB)
  • 调度器(scheduler) 负责完成
  • 纯开销,通常耗时 1~1000ms,不产生直接产出

六、Process Creation & Termination(创建与终止)

✅ 创建方式:

  • 系统初始化时
  • 执行系统调用(如 Linux 的 fork()
  • 用户请求
  • 批处理任务启动

✅ 终止方式:

方式 是否自愿 说明
正常退出 程序运行结束
出错退出 程序主动退出(如 return 错误)
致命错误 运行中出现非法操作等崩溃
被其他进程杀死 例如通过 kill() 系统调用

七、Thread(线程)

✅ 定义:

  • 一个进程内部的 执行流,又称“轻量级进程(Lightweight Process)”
  • 同一进程的线程共享数据空间、打开的文件、信号等资源

✅ 优点:

  • 创建/销毁成本低:比进程快 10~20 倍
  • 切换快:线程间上下文切换比进程快 5~50 倍
  • 更方便共享资源(不需拷贝)

✅ 缺点:

  • 同一进程内线程 不互相保护,一个线程错误可能影响整个进程

八、Thread Model(线程模型)

✅ 实现方式:

模型 管理者 特点
用户级线程 应用层 上下文切换快,数量不限,但需自行协调调度
内核级线程 操作系统内核 调度由内核完成,更稳定但上下文切换较慢
混合模型 用户+内核 结合两者优点,多个用户线程映射到内核线程上

九、Process vs. Thread

比较维度 Process(进程) Thread(线程)
拥有资源 是,独立资源单位 否,共享进程资源
创建开销
切换开销
独立性 高(互不干扰) 低(共享地址空间)
使用场景 多任务操作 并行处理、异步任务

十、IPC(进程间通信)

✅ 概念

  • Race Condition(竞争条件):多个进程并发访问共享资源,顺序不确定,可能导致错误。
  • Critical Section(临界区):访问共享资源的代码区域。

✅ 四个互斥要求:

  1. 互斥(Mutual Exclusion)
  2. 前进(Progress)
  3. 有界等待(Bounded Waiting)
  4. 不依赖速度(Independence of Speed)

十一、同步工具

✅ Semaphore(信号量) & PV 操作:

  • P(S)(等待) & V(S)(释放)
  • 可解决互斥和进程间同步问题

✅ 常见经典问题:

  • 生产者-消费者问题
  • 读者-写者问题
  • 哲学家就餐问题

✅ Monitor(监视器)

  • 高级同步机制:封装共享变量与操作
  • 通过条件变量实现 wait/signal 控制访问

十二、Process Scheduling(进程调度)

✅ 触发调度时机:

  • 有新进程创建
  • 当前进程终止
  • 当前进程阻塞
  • I/O 中断(解锁某些阻塞进程)
  • 时钟中断(如每 10ms)

✅ 调度目标:

  • 公平性、高CPU利用率、快速响应时间、吞吐量高等

十三、调度算法

✅ 批处理系统:

  • FCFS(先来先服务)
  • SJF(最短作业优先)(可抢占 / 非抢占)

✅ 交互式系统:

  • Round Robin(时间片轮转)
  • Priority Scheduling(优先级调度)
  • 多级队列 & 多级反馈队列(MLQ / MFQ)
  • Lottery Scheduling(彩票调度)

✅ 实时系统:

  • 强调任务的 可调度性(schedulability),必须在截止时间前完成任务

大题隐藏其中!


✅ 大题 1:Program vs. Process(程序 vs. 进程)

问题示例(Exam Question)

请比较程序(Program)与进程(Process)之间的区别,并举例说明它们的关系。
Compare and contrast a program and a process. Give examples to illustrate their relationship.

标准答案(Answer)

比较维度 程序 Program 进程 Process
定义 Definition 程序是指令和数据的静态集合。Program is a static set of instructions. 进程是程序的执行实例,是动态活动。A process is a dynamic execution instance of a program.
性质 Nature 静态(Static) 动态(Dynamic)
组成 Components 只包含代码。Contains only code. 包括程序代码、数据段、堆栈、PCB 等。Includes code, data, stack, and PCB.
并发 Concurrency 程序本身不能并发执行。A program cannot run concurrently. 多个进程可以并发执行同一个程序。Multiple processes can execute the same program concurrently.
数量关系 Quantity Relation 一个程序可以对应多个进程。One program can correspond to multiple processes. 一个进程可调用多个程序。A process can invoke multiple programs.

示例 Example
例如,同一个“浏览器程序”可以被多个用户分别运行,产生多个独立的“浏览器进程”。


✅ 大题 2:Process vs. Thread(进程 vs. 线程)

问题示例(Exam Question)

请简述进程(Process)与线程(Thread)之间的区别,说明它们在资源管理和执行效率方面的不同。
Explain the differences between a process and a thread, focusing on resource management and execution efficiency.

标准答案(Answer)

比较维度 进程 Process 线程 Thread
定义 Definition 资源分配的基本单位。Basic unit of resource allocation. 程序执行的最小单位。Smallest unit of execution.
资源 Resources 每个进程有独立资源(地址空间、打开文件等)。Owns resources independently. 线程共享进程的资源。Shares resources with other threads in the same process.
独立性 Independence 进程间独立,通信复杂。Independent; communication requires IPC. 线程之间密切合作,通信简便。Cooperative; easy communication.
开销 Overhead 创建、切换开销大。Expensive to create/switch. 创建、切换开销小。Cheaper to create/switch.
崩溃影响 Failure Impact 一个进程崩溃不影响其他进程。Crash isolated. 一个线程崩溃可能影响整个进程。May crash the whole process.

✅ 大题 3:User-level vs. Kernel-level Threads(用户级线程 vs. 内核级线程)

问题示例(Exam Question)

比较用户级线程(User-level threads)和内核级线程(Kernel-level threads)的优缺点。
Compare user-level threads and kernel-level threads in terms of performance, resource usage, and implementation.

标准答案(Answer)

比较维度 用户级线程(User-level Threads) 内核级线程(Kernel-level Threads)
管理者 Manager 由应用程序或线程库管理。Managed by user-level libraries. 由操作系统内核管理。Managed by the OS kernel.
内核可见性 Kernel Awareness 不可见,内核不知道其存在。Invisible to the kernel. 可见,内核调度管理。Visible and scheduled by the kernel.
上下文切换 Context Switching 快速(不涉及内核)。Fast (no kernel involvement). 慢(涉及内核态切换)。Slow (requires kernel mode switch).
线程数量 Thread Count 数量无限制。Virtually unlimited. 受限于内核资源。Limited by system resources.
阻塞影响 Blocking 一个线程阻塞,整个进程阻塞。One blocked thread can block the entire process. 支持真正并发,一个线程阻塞不会影响其他线程。Blocking one thread doesn’t block others.
易用性 Usability 实现复杂,需自行调度。Complex to implement. 简单,调度由内核完成。Simpler to use.

✅ Chapter 3 Memory Management 内存管理


📌 (1) Basic Memory Management 基本内存管理

● 静态重定位(Static Relocation)

  • 加载时完成地址调整,操作系统根据内存中的位置修改程序中的地址。
  • 一旦加载完成,进程不能再移动

● 动态重定位(Dynamic Relocation)

  • 运行时将虚拟地址映射到物理地址。
  • 借助硬件(如重定位寄存器 relocation register/base register)完成:
    物理地址 = 虚拟地址 + 基址
  • 支持进程在内存中的移动。

● 压缩(Compaction)

  • 将分散的空闲内存合并,减少外部碎片。
  • 代价高,涉及大量数据移动。

● 空闲空间管理(Free Space Management)

  • 位图法(Bit Map):每个单位内存对应一位,0/1 表示空闲/占用。
  • 链表法(Linked List):记录空闲块的起始位置和长度,形成空闲区链表。

📌 (2) Overlay, Swapping & Storage Placement 存储策略

● 覆盖技术(Overlay)

  • 程序太大不能同时装入内存时,将程序划分成多个段,按需调入
  • 程序员或系统手动管理。

● 交换(Swapping)

  • 将暂时不用的进程调出到磁盘,需要时再调入内存。
  • 提高内存利用率。

● 存储分配策略(Storage Placement Strategy)

策略 说明
First Fit 找第一个足够大的空闲块。
Next Fit 从上次位置继续找第一个足够大的。
Best Fit 最小但能容纳的块,可能产生碎片。
Worst Fit 最大的块,尝试减少碎片,但可能浪费大块空间。

📌 (3) Paging 分页机制与页面置换

● 分页机制(Paging)

  • 将内存分为固定大小的页帧,进程划分为相同大小的页。
  • 地址转换:虚拟地址 = 页号 + 页内偏移
  • 使用页表(Page Table)映射页号 → 帧号。
  • 优化方式:TLB(Translation Lookaside Buffer)、多级页表、倒排页表(Inverted Page Table)

● 页面置换算法(Page Replacement Algorithms)

算法 说明
Optimal 理想最优,未来不再使用的页先换出。理论算法。
FIFO 先进先出,可能出现Belady 异常
Second Chance FIFO 改进,加引用位。
NRU(Not Recently Used) 分类替换,不活跃页优先。
Clock(时钟) Second chance 的实现优化。
LRU 最近最少使用,近似未来最优。
NFU 从未使用,按时间累加引用次数。
Aging LRU 的近似实现,使用位移老化法。

● 工作集(Working Set)

  • 当前“活跃”页集合,即进程当前需要的页面集合。
  • 避免抖动(Thrashing)的一种方法。

● 抖动(Thrashing)

  • 系统频繁产生页面置换,实际工作效率低。
  • 原因:工作集太大,物理页数不足。
  • 解决:工作集模型、调整多道程度、增加内存。

📌 (4) 分页设计细节与段式管理

● 页面调入策略(Fetching Policies)

策略 说明
Demand Paging 按需调页,缺页时才加载,节省内存。
Pre-paging 预取页面,提前加载,可能浪费资源。

● 设计问题(Design Issues for Paging)

  • 驻留集管理(Resident Set Management):限制每个进程可用的页数。
  • 页大小(Page Size):大页减少页表项,小页减少内部碎片。
  • 共享页(Shared Pages):多个进程共享代码段(如库函数)。
  • 写时复制(Copy-on-Write):父子进程共享页,直到某一方修改。

● 段式管理(Segmentation)

  • 内存按逻辑模块(段)划分,如代码段、数据段、堆栈段。
  • 地址结构 = 段号 + 段内偏移
  • 优点:逻辑清晰,便于保护和共享。
  • 缺点:外部碎片严重。

● 段页式结合(Segmentation with Paging)

  • 每个段再分页,结合两者优点。
  • 地址 = 段号 + 页号 + 页内偏移
  • 灵活性更强,但实现更复杂。

✅ Chapter 4 File System 文件系统


📌 (1) 文件与文件系统基础

● 文件(File)

A named collection of related information that is recorded on secondary storage.

  • 命名的相关信息集合,保存在辅助存储设备上。

● 文件系统(File System)

A method for storing and organizing files and their data to make it easy to find and access.

  • 提供一种存储与组织文件及数据的方法,方便查找与访问。

● 文件系统的基本功能(Basic Functions)

  • 提供文件与目录的逻辑视图
  • 提高存储设备的使用效率
  • 支持文件共享

● 文件类型(File Types)

类型 说明
Regular File 普通文件,包含文本(ASCII)或二进制(Binary)
Directory 目录文件,包含文件名与指针
Character Special File 字符设备,如终端、键盘
Block Special File 块设备,如硬盘、U盘

📌 (2) 目录结构与文件存储方式

● 目录结构(Directory Structure)

类型 说明
One-level 所有文件在同一目录下,容易冲突
Two-level 每个用户一个独立目录,支持多用户
Hierarchical 多层次树形结构,最常见

● 文件系统布局(File System Layout)

见图 4-9(通常包括以下几个部分):

  • Boot Block:用于引导操作系统
  • Super Block:存储整个文件系统的元信息
  • i-Node Table、Data Blocks 等

● 文件存储实现(File Storage Implementation)

方法 说明
Contiguous Allocation 连续分配,访问快但易碎片化
Linked List Allocation / FAT 每个文件块存指针,FAT 表统一管理
Indexed Allocation (i-node) 使用索引结构(如 i-node)记录所有数据块地址,灵活高效

📌 (3) 文件共享与磁盘管理

● 文件共享(Shared Files)

方法 说明
Hard Link 不创建新文件,多个文件名指向同一个 i-node
Symbolic Link 创建新文件,记录目标文件的路径,类似快捷方式

● 磁盘空间管理(Disk Space Management)

  • 块大小(Block Size):影响内部碎片与读写效率
  • 空闲块管理(Free Block Tracking)
    • Linked List:每个空闲块记录下一个
    • Bit Map:位图记录空闲与占用状态

● 文件系统备份(File System Backup)

  • 逻辑转储(Logical Dump):按照目录树结构进行备份,按逻辑层级遍历

📌 (4) 一致性与性能优化

● 文件系统一致性(Consistency)

  • 检查 块完整性(block)与 目录结构完整性(directory)

● 文件系统性能优化(Performance)

技术 说明
Caching 使用缓存,减少磁盘 I/O
Block Read Ahead 预读连续数据块,提高命中率
Reducing Disk Arm Motion 减少磁头移动,提高读写效率

📌 (5) 文件系统实例:MS-DOS 与 UNIX

● MS-DOS 文件系统

项目 说明
目录结构 简单的层次结构
FAT 类型 FAT12、FAT16、FAT32,不同于块大小与寻址范围

● UNIX V7 文件系统

项目 说明
i-node 文件的索引节点,记录元数据与块地址
目录 实质是包含文件名与 i-node 编号的表

✅ Chapter 5 Input/Output 输入/输出系统


📌 (1) I/O 软件的目标(Goals of I/O Software)

目标 说明(中英文对照)
Device Independence 设备无关性:程序无需知道具体硬件
Uniform Naming 统一命名:不依赖硬件,例如 /dev/sda1
Error Handling 错误处理:统一处理 I/O 异常情况
Synchronous vs. Asynchronous 同步与异步传输:同步等待 vs 异步通知
Buffering 缓冲处理:提高效率,解决速度差异问题
Sharable vs. Dedicated Devices 共享 vs 专用设备:例如打印机为专用,磁盘可共享

📌 (2) I/O 软件的基本方式(Principles of I/O Software)

类型 说明
Programmed I/O(程序控制 I/O) CPU 主动读取设备状态,效率低
Interrupt-driven I/O(中断驱动 I/O) 设备完成后中断通知 CPU,CPU 被动响应
DMA(Direct Memory Access) 直接内存访问,数据由设备直达内存,不经 CPU,提高效率

📌 (3) I/O 软件的层次结构(I/O Software Layers)

● Interrupt Handlers(中断处理程序)

  • 响应设备中断,保存上下文,调用驱动程序。

● Device Drivers(设备驱动程序)

  • 从上层接收抽象读写命令,转换为设备操作。
  • 职责包括:
    • 执行具体设备指令
    • 设备初始化与电源管理
    • 请求调度(如磁盘调度)
    • 记录设备事件

📌 (4) I/O 软件的更高层(continued)

● Device-Independent OS Software(设备无关的操作系统软件)

功能 说明
Uniform interface 提供统一接口给设备驱动
Buffering 数据缓存,减小访问延迟
Error Reporting 向用户报告设备错误
Device Allocation 分配/释放专用设备
Block Size Abstraction 提供统一块大小接口(隐藏设备差异)

● User-Level I/O Software(用户层 I/O 软件)

  • 如库函数 fread(), fwrite(),封装系统调用,提供易用 API。

📌 (5) 磁盘调度与优化(Disk I/O)

● 磁盘技术概念

名称 说明
Cylinder Skew 柱面偏移,防止跨柱面数据读取时错过扇区
Sector Interleaving 扇区交错,用于避免 CPU 跟不上数据传输速度

● 磁盘调度算法(Disk Arm Scheduling)

算法 中文说明 特点
FCFS 先来先服务 简单但效率低
SSF(SSTF) 最短寻道时间优先 提高性能但可能饥饿
Elevator (SCAN) 电梯算法 磁头来回移动,公平性好

✅ Chapter 6: Deadlock(死锁)


📌 (1) 死锁基本概念

🔹 Deadlock(死锁)定义

一组进程因相互等待而永远阻塞,且不会主动释放资源。

🔹 Livelock(活锁)

虽然进程在“运行”,但始终改变状态以避免冲突,却永远无法前进(例:两个进程不断让对方先走)。

🔹 Starvation(饥饿)

某个进程长时间得不到资源,被“饿死”,虽然系统仍运行。


📌 死锁产生的四个必要条件(Conditions for Deadlock)

条件 英文 说明
互斥 Mutual Exclusion 资源一次只能被一个进程占用
占有且等待 Hold and Wait 占有资源的进程还能请求其他资源
非抢占 No Preemption 资源不能被强制抢占,只能自愿释放
循环等待 Circular Wait 存在一组进程 {P1, P2, …, Pn},每个等待下一个的资源形成环

📌 (2) 死锁处理方法(Methods for Handling Deadlock)


1. 死锁检测(Detection)

情况一:每类资源仅一个实例(Single Resource)

  • 资源分配图(Resource Allocation Graph)检测是否有循环。

情况二:每类资源多个实例(Multiple Resources)

  • 使用死锁检测算法,如银行家算法检测法,计算是否存在不满足资源请求的进程集合。

2. 死锁恢复(Recovery)

方法 中文解释
资源抢占 暂停某进程并回收其资源,需保存进程状态以便重启
回滚(Rollback) 进程回退到某个安全点重新执行(需支持事务)
杀死进程 选择一个或多个进程终止,释放其资源以解除死锁

3. 死锁避免(Avoidance)

🔹 安全状态(Safe State)

  • 存在一个进程序列,所有进程都能顺序完成,不会陷入死锁。

🔹 银行家算法(Banker’s Algorithm)

  • 类似“贷款银行”,资源只有在确保系统仍安全的前提下才会分配。

📌 (3) 死锁预防(Prevention)

通过破坏死锁四个必要条件之一来防止死锁:

条件 预防方法
互斥 采用可共享资源(如只读文件)
占有且等待 要求进程一次性请求全部资源或在请求前释放全部已有资源
非抢占 允许抢占资源(中断进程并回收其资源)
循环等待 给资源编号,按编号顺序请求资源,防止形成环