Skip to content

计算机操作系统 · 期末复习

来源:2026年6月26日复习课录音整理。考试时间 7月10日,题型为 选择、填空、判断、解答、计算分析题(含代码题)。


第一章:操作系统引论

1.1 操作系统的定义 🏗️

操作系统是计算机硬件上覆盖的第一层软件,对硬件的扩充,是其他软件运行的基础。

一句话理解:操作系统就是夹在"硬件"和"应用软件"中间的那一层,没有它,你写的程序根本跑不起来。

💡 类比:把计算机想象成一栋大楼。硬件是地基和钢筋水泥,操作系统是水电管道和电梯系统,各种APP是房间里的家具。没有水电管道,你搬家具进来也没法住。

1.2 操作系统的四大目标

目标含义通俗理解
方便性提供编译命令和封装好的接口你不用自己写读写硬盘的代码,调个 fopen 就行
有效性提高系统资源利用率 + 提高系统吞吐量CPU 别闲着,单位时间处理越多任务越好
可扩充性模块化结构,方便添加新功能像搭乐高,想加什么模块就插上
开放性遵循 OSI 等开放标准不同厂商的设备能互联互通

⚠️ 有效性的两个指标 = 提高资源利用率 + 提高系统吞吐量。吞吐量 = 单位时间内处理的数据/任务量。

1.3 操作系统的作用(三个)

  1. OS 作为用户与计算机硬件系统之间的接口 — 你是通过 OS 跟硬件打交道的
  2. OS 作为计算机系统资源的管理者 — CPU、内存、硬盘、外设都归它管
  3. OS 实现了对计算机资源的抽象 — 把复杂的硬件细节隐藏起来,给你一个简洁的视图

1.4 操作系统的发展过程(重点三个)

一、批处理系统

单道批处理系统
  1. 一个任务执行完,下一个任务才能开始
  2. 缺点:CPU 闲置时间太长,资源利用率低
  3. 就像食堂只有一个打饭窗口,大家排一条队
多道批处理系统 ⭐(重点)
  1. 引入"后备队列"概念
  2. 核心八字:==宏观并行,微观串行==

什么是"宏观并行,微观串行"?

  1. 单核 CPU 下,同一时刻只能执行一条指令(微观串行)
  2. 但程序切换极快,让你感觉多个程序在同时跑(宏观并行)
  3. 典型场景:程序 A 在做 IO(不占 CPU)时,程序 B 可以用 CPU 计算

💡 类比:你一边烧水(IO),一边切菜(CPU计算)。同一时刻你只能在干一件事(微观串行),但你在烧水和切菜之间快速切换,看起来像在同时做(宏观并行)。

二、分时系统 ⭐

  1. 两个关键词:==人机交互==、==时间片轮转==
  2. 把 CPU 时间切成小片,每个用户轮着用
  3. 交互性强——每用户都能感觉自己独占了一台电脑

三、实时系统

  1. 关键词:==实时性==
  2. 分为两类:
类型特点例子
硬实时错过截止时间会产生严重后果导弹拦截系统、核电站控制系统
软实时偶尔超时只是影响体验刷抖音、看视频、打游戏

1.5 操作系统的基本特性(四个)⭐

并发 → 共享 → 虚拟 → 异步

⚠️ 其中最基本的两个是:并发 和 共享

特性含义
并发一段时间内多个程序宏观上同时运行
共享多个进程共享系统资源
虚拟通过某种技术把物理实体映射成逻辑对应物
异步进程以不可预知的速度向前推进,但相同环境下结果一定相同

异步性的核心理解:每个进程执行的速度不确定(这次快下次慢),但只要同步机制完善、环境相同,多次运行的结果是一样的。就像你每天走不同的路线去学校,速度虽有快慢,但最终都能到同一个教室。

1.6 重要计算题:多道批处理最小时间 ⭐

题目原型(课后习题第27题):
P2 比 P1 晚 5ms 到达:

  1. P1:计算 60ms → IO 80ms → 计算 20ms
  2. P2:计算 120ms → IO 40ms → 计算 40ms 求完成两个作业的最少时间(不考虑调度和切换时间)。

解题关键四原则

  1. 计算使用 CPU,IO 操作不占 CPU
  2. 先到先执行
  3. 一个进程做 IO 时,另一个进程可以用 CPU
  4. 不同设备的 IO 可并行

⚠️ 这不是"原题",数字会变。必须掌握方法,不能背数字。


第二章:进程管理

2.1 前趋图 ⭐(必考)

本质:==有向无环图(DAG)==

  1. 初始节点:没有前驱的节点(如上图 P1)
  2. 终止节点:没有后继的节点(如上图 P5)
  3. P1→P2:P1 是 P2 的前驱,P2 是 P1 的后继

⚠️ 考法:前趋图不会单独考,会和信号量 + PV 操作一起考——给你一个前趋图,让你用 PV 操作实现它。

2.2 进程的定义

进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

简单说:进程 = 正在运行的程序

2.3 进程的四个基本特征

特征含义
动态性⭐最基本特征!进程有生命周期(创建→运行→终止)
并发性多个进程可在一段时间内同时运行
独立性进程是独立运行和资源分配的单位
异步性进程以不可预知的速度推进

⚠️ 别搞混!

  1. 操作系统的四个特性:并发、共享、虚拟、异步(最基本两:并发+共享)
  2. 进程的四个特性:动态、并发、独立、异步(最基本:动态性

2.4 进程 vs 程序(必背)⭐

区别维度进程程序
① 动静活的(有生命周期)死的(写完就不变)
② 位置内存外存中(硬盘)
③ 关系程序的一次实例/执行进程的"模板"
④ 组成程序是进程的代码部分

考试写前三条就能拿满分。举个栗子:你打开三个 Word 文档——程序只有一个(Word软件),但进程有三个(每个文档窗口是一个独立进程)。

2.5 进程的三状态模型 ⭐

转换触发条件
就绪 → 执行调度(CPU 分配给你了)
执行 → 就绪中断(时间片到了 / 被更高优先级抢走)
执行 → 阻塞等待 IO(需要读硬盘、等网络数据等)
阻塞 → 就绪IO 完成(数据准备好了)

⚠️ 注意:就绪 ⇄ 执行是双向箭头(可以互相转换)。但阻塞不能直接到执行,必须先回到就绪。

💡 类比:把 CPU 想成一个讲台,进程是想发言的同学。就绪=举手准备发言,执行=站在讲台讲话,阻塞=出去上厕所了(要等回来重新举手才能发言)。

2.6 PCB(进程控制块)

PCB 是进程存在的唯一标志,常驻内存。

  1. 每个进程有一个唯一的 PID(进程ID),存于 PCB 中
  2. 就像每个人都有唯一的身份证号,PCB 就是进程的"身份证"

PCB 的三种组织方式

方式结构查找效率
线性方式所有 PCB 排成一张表O(n),要遍历
链接方式按状态分成链表,指针串联中等
索引方式建索引表,直接定位O(1),最好但实现复杂

2.7 进程通信

直接通信 vs 间接通信

  1. 直接:进程A 直接 → 进程B(用 send/receive 原语)
  2. 间接:进程A → 信箱 → 进程B(中间多一个载体)

阻塞/非阻塞 send & receive

组合通信类型
阻塞 send + 阻塞 receive同步通信(双方都得等)
非阻塞 send + 阻塞 receive异步通信(发了就不管)

阻塞 send = 快递员必须亲手交给你才走;非阻塞 send = 快递员放快递柜就走。

2.8 线程

线程在进程内部,一个进程可以有多个线程。

进程 vs 线程(六维度比较,写四个满分)⭐

比较维度进程线程
① 调度单位资源拥有单位调度和分派的基本单位
② 并发性进程间可并发同一进程内多线程也可并发
③ 拥有资源拥有系统资源本身不拥有,仅少量独立运行资源
④ 独立性不同进程独立性强同进程线程间独立性低很多
⑤ 系统开销进程切换开销线程切换开销(约1/10)
⑥ 多处理器同进程多线程可分布到多处理器

第三章:处理机调度

3.1 调度的三个层次

层次别称调度对象
高级调度长程调度 / 作业调度作业
中级调度(了解即可)
低级调度短程调度 / 进程调度进程

低级调度(进程调度)可分为:抢占式非抢占式

3.2 三个关键时间指标

指标公式含义
周转时间完成时间 - 到达时间从提交到完成的全部时间
带权周转时间周转时间 / 服务时间周转时间相对于实际服务时间的倍数
等待时间周转时间 - 服务时间在就绪队列中等待的时间

平均周转时间 = 所有作业周转时间之和 / 作业数量

3.3 各类调度算法

1. 先来先服务(FCFS)

  1. 谁先到先执行谁
  2. 护航效应:大卡车(长进程)堵在前面,后面的小汽车(短进程)全被压速
  3. 有利于长进程和 CPU 密集型,不利于短进程和 IO 密集型

2. 短作业优先(SJF)

  1. 谁执行时间短就优先谁
  2. 可分抢占式/非抢占式(看题目描述)

3. 优先级调度算法 ⭐

优先级类型特点
静态优先级出生就定死,调度过程不变
动态优先级(响应比)等待时间越长优先级越高

响应比公式

响应比=等待时间+服务时间服务时间=1+等待时间服务时间

重点掌握:基于静态优先级的抢占式调度算法。做题要列出表格:开始时间、完成时间、周转时间、等待时间。

4. 时间片轮转(RR)

  1. 专为分时系统设计
  2. 每个进程用完时间片就让出 CPU,下一个上
  3. 公平但上下文切换频繁

5. 多级反馈队列(MLFQ)⭐ 重点

规则

  1. 所有新进程先进入队列1(优先级最高,时间片最短)
  2. 在队列1中没完成的 → 降级到队列2,以此类推
  3. 抢占:队列2、3的进程运行时,队列1来了新进程 → 立即抢占
  4. 优先级自上而下递减,时间片自上而下递增

⚠️ 考试重点:基于抢占式的优先级调度 + 多级反馈队列,必须会画表格计算。


第四章:进程同步与死锁

4.1 临界资源与临界区

概念定义
临界资源一次只允许一个进程使用的资源
临界区进程中涉及临界资源的代码段

💡 打印机就是典型临界资源——两个人同时打印会乱套。

4.2 进程同步的四个准则 ⭐

  1. 空闲让进 — 没人用你就进
  2. 忙则等待 — 有人在用你就等
  3. 有限等待 — 不能无限等下去
  4. 让权等待 — 等的时候别占着 CPU(主动放弃CPU)

4.3 信号量 + PV 操作 + 前趋图 ⭐(必考代码题)

通用步骤:

定义信号量:前趋图中每条边对应一个信号量,初值全部设为 0 ② 用 cobegin / coend 包裹(co = concurrent,表示并发) ③ P 操作(wait):等待前驱完成;V 操作(signal):通知后继可以执行

写法一写法二含义
wait(S)P(S)申请信号量(等待)
signal(S)V(S)释放信号量(通知)

核心规则:前驱节点执行完后 V,后继节点执行前 P

4.4 死锁

死锁的四个必要条件

  1. 互斥 — 资源一次只能一个用
  2. 请求和保持 — 拿了资源A还想要资源B,不放A
  3. 不可抢占 — 不能强行抢别人的资源
  4. 循环等待 — A等B,B等C,C等A,形成环

⚠️ 四个条件全部满足才会死锁,打破任意一个就能预防死锁。

4.5 银行家算法 ⭐(必考计算分析题)

标准两问套路:

第一问:系统是否安全?

  1. 用银行家算法找一个安全序列
  2. 找到 → 安全 ✅
  3. 找不到 → 不安全 ❌

第二问:某进程请求资源,能否分配?

  1. 比较:Request ≤ Need?(请求 ≤ 还需资源)
  2. 比较:Request ≤ Available?(请求 ≤ 当前剩余资源)
  3. ③ 更新表格后重新找安全序列
  4. 能找到 → 可以分配 ✅
  5. 找不到 → 拒绝请求 ❌

⚠️ 每问最后都要文字总结回答,这有分!


实验:两个必会的代码 ⭐

实验 9:创建子进程(fork)

在 Linux C 环境下用 fork() 创建子进程,分别打印主进程和子进程的 PID。

c
#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();

    if (pid < 0) {
        printf("创建进程失败\n");
    } else if (pid == 0) {
        // 子进程:fork() 在子进程中返回 0
        printf("我是子进程,PID = %d\n", getpid());
    } else {
        // 父进程:fork() 在父进程中返回子进程的 PID
        printf("我是父进程,PID = %d,子进程PID = %d\n", getpid(), pid);
    }
    return 0;
}

💡 fork() 调一次,返回两次——父进程拿到子进程的PID,子进程拿到0。

实验 12:创建线程

创建子线程,打印线程 ID。

c
#include <stdio.h>
#include <pthread.h>

void* thread_func(void* arg) {
    printf("我是子线程,线程ID = %lu\n", pthread_self());
    return NULL;
}

int main() {
    pthread_t tid;
    pthread_create(&tid, NULL, thread_func, NULL);
    pthread_join(tid, NULL);  // 等待子线程结束
    printf("主线程结束\n");
    return 0;
}

⚠️ 编译线程程序需要加 -lpthreadgcc program.c -o program -lpthread


快速自查清单 ✅

序号知识点掌握了吗
1操作系统的定义(一句话)
2OS四大目标、三大作用
3多道批处理:宏观并行微观串行
4分时系统(交互+时间片)vs 实时系统(硬/软)
5OS四特性(最基本两:并发+共享)vs 进程四特性(最基本:动态)
6多道批处理最小时间计算题
7前趋图 = 有向无环图
8进程 vs 程序(三条区别)
9进程三状态图(就绪⇄执行→阻塞→就绪)
10PCB 是进程存在的唯一标志
11进程通信(直接/间接,阻塞/非阻塞)
12进程 vs 线程(六选四)
13周转时间、等待时间、带权周转时间公式
14静态优先级 vs 动态优先级(响应比)
15多级反馈队列调度规则
16临界区、进程同步四准则
17信号量 + PV 实现前趋图
18死锁四必要条件
19银行家算法(两问套路)
20fork() 和 pthread_create() 代码

📅 考试时间:7月10日,加油!💪