操作系统期末总复习——绝地求生版
Posted 一支王同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统期末总复习——绝地求生版相关的知识,希望对你有一定的参考价值。
✅ 2022 新年第一篇,献给了 OS
第1
次文章更新 —— 2022/1/2 18:00
文章目录
- 一、考试形式
- 二、重点内容的排序 + 简单分析
- 三、一纸,一笔,一个晚上,一个奇迹 ✅
- 1、⭐️⭐️⭐️⭐️⭐️ —— 死锁
- 2、⭐️⭐️⭐️⭐️ —— 信号量与 P、V 操作
- 3、⭐️⭐️⭐️⭐️ —— 驱动调度技术
- 4、⭐️⭐️⭐️⭐️ —— 处理器调度 + 作业的管理和调度
- 5、⭐️⭐️⭐️ —— 页面置换算法
- 6、⭐️⭐️⭐️ —— 文件的物理结构与存储设备
- 7、⭐️⭐️⭐️ —— 页式存储管理
- 8、⭐️⭐️ —— 进程及其实现
- 9、⭐️⭐️ —— 可变分区
- 10、⭐️⭐️ —— 缓冲技术
- 11、⭐️ —— 多道程序系统
- 12、⭐️ —— 并发进程
- 13、⭐️ —— 重定位
- 14、⭐️ —— 段氏存储管理
- 15、⭐️ —— I/O 控制方式
- 16、⭐️ —— 设备独立性
- 17、⭐️ —— 文件存储空间的管理
- 四、参考附录
PUBG ⌨️
一、考试形式
● 10 道单选 —— 10 × 1
(分)
● 10 道填空 —— 10 × 2
(分)
● 30
分的简答题(概念与计算)
● 4 道综合计算题 —— 10 × 4
(分)
◆ 补充说明:总共有 5 种综合计算题,只选其中的四种进行考察。后文有讲解。
二、重点内容的排序 + 简单分析
序号 | 重点 | 内容 |
---|---|---|
1 | ⭐️⭐️⭐️⭐️⭐️ —— 死锁 | 【占了整张试卷的高分值,填空 + 选择 + 10分大题】 【死锁的定义、产生的原因、4个必要条件、处理死锁的3种方法(对比、优缺点)】 【死锁的应用】 【大题就是银行家算法,需注意格式、中间变量、表格】 |
2 | ⭐️⭐️⭐️⭐️ —— 信号量与 P、V 操作 | 【填空题 + 10分大题】 【进程的同步与互斥,理解清楚】 【主要看记录型信号量,其他类型也要看看】 【注:语法可以用类C语言、PV的顺序一定不能错】 |
3 | ⭐️⭐️⭐️⭐️ —— 驱动调度技术 | 【这里有一道综合的 10分大题】 【4种调度算法、读取步骤、磁盘结构、特点】 |
4 | ⭐️⭐️⭐️⭐️ —— 处理器调度 + 作业的管理和调度 | 【这里有一个两级调度的大题,比如说上课写的那种。10分大题】 |
5 | ⭐️⭐️⭐️ —— 页面置换算法 | 【 一道 10分大题,3种置换算法要掌握:FIFO、LRU、OPT,并会计算缺页中断率】 |
6 | ⭐️⭐️⭐️ —— 文件的物理结构与存储设备 | 【可能有混合索引的复杂计算。考试难点】 【地址如何计算、映射怎么实现、一次链接?二次链接?】 |
7 | ⭐️⭐️⭐️ —— 页式存储管理 | 【基本分页是面向系统的,也会产生碎片】 【页式地址转换:页表项、页内位移位、逻辑地址转换为物理地址(填空选择)】 |
8 | ⭐️⭐️ —— 进程及其实现 | 【三态模型的概念、个数、转换流程。概念简答题】 【什么是进程控制块(PCB),描述了哪些信息?】 |
9 | ⭐️⭐️ —— 可变分区 | 【4种分区算法,要能用语言描述、优缺点(背)、特点。】 |
10 | ⭐️⭐️ —— 缓冲技术 | 【为什么要引入缓冲技术?】 【有时间看看这 4 个缓冲】 |
11 | ⭐️ —— 多道程序系统 | 【设计的概念 → 目的是什么?概念简答题】 |
12 | ⭐️ —— 并发进程 | 【引入的目的 → 看样例,看并发可能会导致什么错误出现?】 |
13 | ⭐️ —— 重定位 | 【动态重定位的优缺点】 |
14 | ⭐️ —— 段氏存储管理 | 【了解分段和分页在概念上的区别 → 更少的碎片】 |
15 | ⭐️ —— I/O 控制方式 | 【4种方式出现的时间段、发展的驱动力是什么?概念简答题】 |
16 | ⭐️ —— 设备独立性 | 【考简答题,概念,如何实现?概念简答题】 |
17 | ⭐️ —— 文件存储空间的管理 | 【引入的原因、功能,了解一下位示图法。填空选择】 |
● 注:以上内容已覆盖 80% ~ 90%
的考试内容,接下来将对其一一进行讲解。
三、一纸,一笔,一个晚上,一个奇迹 ✅
1、⭐️⭐️⭐️⭐️⭐️ —— 死锁
【占了整张试卷的高分值,填空 + 选择 + 10分大题】
【大题就是银行家算法,需注意格式、中间变量、表格】
【死锁的定义、死锁产生的原因、4
个必要条件、处理死锁的3
种方法、3
种方法的对比与优缺点、死锁的应用】
● 相关内容全部都在这里面,银行家算法可以看下一篇(写得更详细),链接: 【操作系统⑩】——进程死锁【银行家算法+详细样例 进程死锁的预防机制、避免机制、检测与解决】.
【都要看,这是大考点 】
● 关于银行家算法,小编已用C++实现,并附加有一个详细的样例,链接:《银行家算法——C++实现 [开源代码 + 详细解析]》.
● 重点标注一下上面 “灰色模块” 里的内容:
① 死锁的定义:系统中(两个或者)多个进程无限期地等待永远不会满足的条件,处于停滞状态,称为进程死锁。
② 死锁产生的原因:
[1] 系统资源不足。
[2] 进程运行推进的顺序不合适。
[3] 资源分配不当。
③ 产生死锁的
4
个必要条件:
[1] 互斥使用(资源独占):指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
[2] 不可强占(不可剥夺):资源申请者不能强行地从资源占有者手中夺取资源,资源只能由占有者自愿释放。
[3] 请求保持(部分分配,占有申请):进程在申请新资源的同时保持对原有资源的占有。
[4] 循环等待(环路等待条件):指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合 P0,P1,P2,···,Pn 中的 P0 正在等待一个 P1 占用的资源;P1 正在等待 P2 占用的资源,……,Pn 正在等待已被 P0 占用的资源。
④ 处理死锁的
3
种方法:
● 死锁的处理策略:为使系统不发生死锁,必须设法破坏产生死锁的4
个必要条件之一,或者允许死锁产生,但当死锁发生时能检测出死锁,并有能力实现恢复。
[1] 预防死锁:设置某些限制条件,破坏产生死锁的
4
个必要条件中的一个或几个,以防止发生死锁。
[2] 避免死锁:在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁。(银行家算法)
[3] 死锁的检测及解除:无需采取任何限制性措施,允许进程在运行过程中发生死锁。通过系统的检测机构及时地检测出死锁的发生,然后采取某种措施解除死锁。
◆ 补充说明:预防死锁和避免死锁都属于事先预防策略,但预防死锁的限制条件比较严格,实现起来较为简单,但往往导致系统的效率低,资源利用率低;避免死锁的限制条件相对宽松,资源分配后需要通过算法来判断是否进入不安全状态,实现起来较为复杂。
⑤ 处理死锁 3 种方法的对比与优缺点:
项目 资源分配策略 主要优点
主要缺点
死锁的预防 保守分配,宁可资源闲置(即保证死锁不会发生) 适用于做突发式处理的进程,不需要进行剥夺 效率低,进程初始化的时间会延长;剥夺次数过多;不便灵活申请新资源 死锁的避免 是 “预防” 和 “检测” 的折中(通过银行家算法判断,在运行过程中是否可能有死锁产生) 不需要进行剥夺 必须知道将来的资源需求;进程不能被长时间阻塞 死锁的检测与解除 定期检测是否有死锁的发生,若有则采取某种措施解除死锁 不会延长进程初始化的时间,允许对死锁进行现场处理 通过剥夺解除死锁会造成损失
⑥ 死锁的应用:
[1] 生产者-消费者问题
[2] 经典的读写问题
[3] 经典的独木桥问题
2、⭐️⭐️⭐️⭐️ —— 信号量与 P、V 操作
【填空题 + 10分大题】
【进程的同步与互斥,理解清楚】
【主要看记录型信号量,其他类型也要看看】
【注:语法
可以用类 C 语言、PV 的顺序一定不能错】
● “进程的同步与互斥” 的重点内容都在: 【操作系统⑥】——进程联系与临界区管理【同步与互斥 Dekker算法 TS指令 SWAP指令】.
【主要看 “一、进程联系
” 】
● “PV操作” 的重点内容全部都在这里面: 【操作系统⑦】——信号量与PV操作(上)【生产者消费者经典问题】.
【注:里面的每一道例题(都是记录型信号量
),小编都已补充详细的注释】
◆ 补充说明:关于 PV操作,如果能掌握【操作系统⑦】文章里面的大部分例题,考试完全 OK 的。
● 关于 “PV操作” 的其他类型信号量(比如AND型信号量
)在这里面: 【操作系统⑧】——信号量与PV操作(下)【哲学家进餐问题 AND型信号量 信号量集机制】.
● 下面补充两道关于 PV操作 的例题来练手:
题目①:若有一个文件 F,供进程共享,现把进程分成 A、B 两组,规定同组的进程可以同时读文件 F,但当有 A 组(或 B 组)的进程在读文件 F 时,不允许 B 组(或 A 组)的进程读文件 F。现定义两个计数器 c1 和 c2 分别记录 A 组和 B 组中读文件 F 的进程数,当用 P、V 操作进行管理时需要三个信号量 S1、S2、Sab 才能保证正确的并发执行,试写出对应的程序。
● 题目关键字提取:【分析主要看代码和后面的 “代码说明”】
[1] “A 组某人读文件 F”。
[2] “B 组某人读文件 F”。
[3] “同组的人可以同时读文件 F”。
[4] “非同组的人不可以同时读文件 F”。
● 代码如下:
/* 基于 C 语言写的伪代码 */ semaphore c1 = 0, c2 = 0; // c1、c2 分别是 A、B 组的计数器 semaphore S1 = 1, S2 = 1; // S1、S2 分别是计数器 c1、c2 的互斥信号量 semaphore Sab = 1; // Sab 是 a、b 两组间的互斥信号量 while(true) "A组进程 Ai():" // i = 1, 2, 3, ..., a while(true) P(S1); if( c1 == 0 ) P(Sab); c1 = c1 + 1; V(S1); 读文件 F; P(S1); c1 = c1 - 1; if( c1 == 0 ) V(Sab); V(S1); "B组进程 Bj():" // j = 1, 2, 3, ..., b while(true) P(S2); if( c2 == 0 ) P(Sab); c2 = c2 + 1; V(S2); 读文件 F; P(S2); c2 = c2 - 1; if( c2 == 0 ) V(Sab); V(S2);
◆ 代码说明:
① 因为只有一个文件 F,所以 S1 和 S2 都只能初始化为 1。
② A、B 组的计数器 c1、c2 一开始都初始化为0
,是因为一开始 A 组和 B 组都没有人在读文件。
③ 每次要对 c1、c2 两个进行操作时,都必须要用 P、V 组合操作。
④ 小编自己写的类 C 语言(如果有不对的地方,欢迎评论指出),考试要求什么伪代码语言都可以,包括 Pascal。
题目②:有桥如下图,车流如箭头所示。桥上不允许两车交会,但允许同方向多辆车依次通行(即桥上可以有多个同方向的车)。请用 P、V 操作实现交通管理以防止桥上堵塞。
● 题目分析 —— 其实和上面一道题类似。可以这么理解
[1] “有一车向左方向驶去” → “A 组某人读文件 F”。
[2] “有一车向右方向驶去” → “B 组某人读文件 F”。
[3] “桥上可以有多个同方向的车” → “同组的人可以同时读文件 F”。
[4] “桥上不允许两车交会” → “非同组的人不可以同时读文件 F”
● 分析清楚后,问题便迎刃而解,代码如下:
/* 基于 C 语言写的伪代码 */ semaphore c1 = 0, c2 = 0; // c1、c2 分别是 左方向L、右方向R 组的计数器 semaphore S1 = 1, S2 = 1; // S1、S2 分别是计数器 c1、c2 的互斥信号量 semaphore mutex = 1; // mutex 是 左方向L、右方向R 两组间的互斥信号量 while(true) "左方向开车组的进程 Li():" // i = 1, 2, 3, ..., a while(true) P(S1); if( c1 == 0 ) P(mutex); c1 = c1 + 1; V(S1); Li(以从左到右的方向驶去); P(S1); c1 = c1 - 1; if( c1 == 0 ) V(mutex); V(S1); "右方向开车组的进程 Rj():" // j = 1, 2, 3, ..., b while(true) P(S2); if( c2 == 0 ) P(mutex); c2 = c2 + 1; V(S2); Li(以从右到左的方向驶去); P(S2); c2 = c2 - 1; if( c2 == 0 ) V(mutex); V(S2);
3、⭐️⭐️⭐️⭐️ —— 驱动调度技术
【这里有一道综合的 10分大题】
【4
种调度算法、读取步骤、磁盘结构、特点】
● “4
种调度算法” 的重点内容和例题都在: 【操作系统学习笔记⑬】——设备管理(上) [直接查询、中断方式、DMA方式、缓冲技术、驱动调度技术与算法].
【主要看 “五、驱动调度技术
”,“读取步骤、磁盘结构” 都在里面 】
◆ 补充说明:这里的大题可能很综合,熟悉4
种调度算法的同时,务必要了解清楚 “磁盘的物理结构”、“磁盘的访问时间”。
● 重点标注一下上面 “灰色模块” 里的内容:
①
4
种调度算法的特点:
项目 含义 特点
先来先服务算法(FCFS) 根据进程请求访问磁盘的先后次序进行调度 此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。但会致使平均寻道时间长。 最短寻道时间优先(SSTF) 总是先执行查找时间最短的那个磁盘请求。 较 “先来先服务” 算法有较好的性能。但是本算法存在 “饥饿” 现象,随着源源不断靠近当前磁头位置读写请求的到来,使早来的但距离当前磁头位置远的读写请求服务被无限期推迟。 扫描算法(SCAN) 每次总是选择沿臂的移动方向最近的那个柱面。如果沿这个方向没有访问的请求时,就改变臂的移动方向,这非常类似于电梯的调度规则。 扫描算法克服了 “饥饿” 这一缺点。扫描算法偏爱那些最接近里面或靠外的请求,对最近扫描跨过去的区域响应会较慢。 循环扫描算法(CSCAN) 移动臂总是从0号柱面至最大号柱面顺序扫描,然后,直接返回0号柱面重复进行,归途中不再服务,构成了一个循环,这就减少了处理新来请求的最大延迟。 这减少了处理新来请求的最大延迟。
4、⭐️⭐️⭐️⭐️ —— 处理器调度 + 作业的管理和调度
【这里有一个两级调度的大题,比如说上课写的那种。10分大题】
● “4
种调度算法” 的重点内容和样例都在: 【操作系统学习笔记⑬】——设备管理(上) [直接查询、中断方式、DMA方式、缓冲技术、驱动调度技术与算法].
【先看看下面的 “补充说明” ,再主要看 “四、单道环境下的调度
” 和 “五、多道环境下的调度
” 】
◆ 补充说明:“四、单道环境下的调度
” 里面的例题是 “一级调度”。而 “五、多道环境下的调度
” 的例题是 “两级调度”。 【并不是 “多道” 造成的 “两级” ,而是因为:作业被 CPU 处理时,不仅需要考虑进入内存(一级),还要考虑在内存中送进 CPU 的次序(二级)】
● 关于进程调度算法,小编已用C++实现:《进程调度算法——C++实现 [FCFS, SJF, HPF, HRN + 开源代码]》. 【2021/1/3前,更新出来】
5、⭐️⭐️⭐️ —— 页面置换算法
【 一道 10分大题,
3
种页面置换算法要掌握:FIFO、LRU、OPT,并会计算缺页中断率】
● “3
种页面置换算法” 的重点内容都在: 【操作系统⑫】——存储管理(下)【分段存储管理 虚拟存储管理 段页式存储管理方案 页面置换算法 OPT FIFO LRU】.
【主要看 “7.3 页面置换算法
” ,样例可以看下面这一篇】
● 关于“页面置换算法”,小编已用C/C++实现,并都附加了详细的样例:《页面置换算法——C/C++实现 [ OTP, FIFO, LRU, LFU + 开源代码 + 详细解析]》.
6、⭐️⭐️⭐️ —— 文件的物理结构与存储设备
【可能有混合索引的复杂计算。考试难点】
【地址如何计算、映射怎么实现、一次链接?二次链接?】
● “混合索引” 的重点内容和样例都在: 【操作系统学习笔记 ⑮ 完结篇】——文件管理 [ 文件系统 + 索引文件的详细样例 ].
【主要看 “4.1.3 索引文件 —— 样例
” 】
● 下面补充三道的例题来练手:【上文 4.1.3 索引文件 —— 样例
中的样例是最难的】
例题①:文件系统采用多重结构搜索文件内容。设块长为 512B,每个块号占 3B,如果不考虑逻辑块号在物理块中所占的位置,分别求二级索引和三级索引时可寻址的文件最大长度。
解:
因为块长为512B,且每个块号占3B,则一个物理块可放:512 / 3 ≈ 170.67
,向下取整即为170
个(物理块)地址,所以:
一级索引时可寻址的文件最大长度:170 × 512 = 87040B (约为87KB
)
二级索引时可寻址的文件最大长度:170 × 170 × 512 = 14796800B (约为14.7MB
)
三级索引时可寻址的文件最大长度:170 × 170 × 170 × 512 = 2515456000B (约为2.5GB
)
例题②:某系统中磁盘的每个盘块大小为 1KB,外存分配方法采用中的混合索引结构,其中索引节点中直接地址 6 项,一级索引地址 2 项,二级索引地址 1 项,每个盘块号占用 4 个字节,请问该系统中允许的文件最大长度是多少?
解:
因为,该系统中磁盘的每个盘块大小为1KB
,且每个盘块号占用4
个字节。
故一个物理块可放:1KB / 4B ≈ 256
个(物理块)地址。因为,索引节点中直接地址有
6
项,一级索引地址2
项,二级索引地址1
项。
所以该系统中允许的文件最大长度: 6 × 1 K B + 2 × 256 × 1 K B + 1 × 25 6 2 × 1 K B = 66 , 054 K B ( 约 为 66 M B ) 6×1KB+2×256×1KB+1×256^2×1KB=66,054KB(约为66MB) 6×1KB+2×256×1KB+1×2562×1KB=66,054KB(约为66MB)
例题③:存放在某个磁盘上的文件系统,采用混合索引分配方式,其 FCB 中共有 13 个地址项,第 0~9 个地址项为直接地址,第 10 个地址项为一次间接地址,第 11 个地址项为二次间接地址,第 12 个地址项为三次间接地址。如果每个盘块的大小为 4K 字节,若盘块号需要用 4 个字节来描述,请问该系统中允许的文件最大长度是多少?
解:
因为,每个盘块的大小为4K
字节,且每个盘块号需要用4
个字节。
所以,一个物理块可放:4KB / 4B ≈ 1024
个(物理块)地址。
因为,索引节点中直接地址有10
项、一级索引地址1
项、二级索引地址1
项、二级索引地址1
项。
所以该系统中允许的文件最大长度: ( 10 + 1 × 1024 + 1 × 102 4 2 + 1 × 102 4 3 ) × 4 K B = 4 , 299 , 165 , 736 K B ( 约 为 4.3 T B ) (10 + 1×1024+1 × 1024^2 + 1× 1024^3)× 4KB=4,299,165,736KB(约为4.3TB) (10+1×1024+1×10242+1×10243)×4KB=4,299,165,736KB(约为4.3TB)
7、⭐️⭐️⭐️ —— 页式存储管理
【基本分页是面向系统的,也会产生碎片】
【页式地址转换:页表项、页内位移位、逻辑地址转换为物理地址(填空选择)】
● “页式存储管理” 的重点内容和样例都在: 【操作系统⑪】——存储管理(上)【分区存储管理 分页存储管理+详细样例】.
【主要看 “三、页式存储管理(也称分页存储管理)
” 】
◆ 补充说明:上文的 “三、页式存储管理(也称分页存储管理)
” 中的四道例题务必要掌握。
● 重点标注一下上面 “灰色模块” 里的内容:
① 分页与分段的主要区别:
[1] 段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的。而页是信息的物理单位,是为了管理主存的方便而划分的,对用户是不可见的(透明的)。
[2] 页的大小固定不变,由系统决定。而段的大小是不固定的,它由其完成的功能决定。
[3] 段式向用户提供的是二维地址空间,而页式向用户提供的是一维地址空间,其页号和页内偏移是机器硬件的功能。
[4] 由于段是信息的逻辑单位,因此便于存贮保护和信息的共享,而页的保护和共享受到限制。
② 分页存储的优点和缺点:【分页存储是由 “固定分区存储管理方案” 演化而来的】
● 优点:解决了碎片问题、便于管理。
● 缺点:不易实现共享、不便于动态连接。
③ 分段存储的优点和缺点:【分页存储是由 “可变分区存储管理方案” 演化而来的。】
● 优点:便于动态申请内存、段表长度较短、便于共享、便于动态链接。
● 缺点:产生碎片、不易扩展。
▶ 这里再补充一道较难一点的例题(网易笔试题
) —— 有用户态进程 A,其虚拟内存页为 1KB,A 占用了 64 页,内存大写为 128KB,A 进程将内存的页面和物理内存块的编号对应关系如下:
页面编号 | 物理内存块编号 |
---|---|
0 | 4 |
1 | 9 |
2 | 5 |
3 | 8 |
请根据以上信息回答如下问题,并给出计算过程︰
- 虚拟地址为 015D 对应的物理地址是多少?
- 物理地址为 113C 对应的虚拟地址为多少?
- 进程 A 有一作业长度为 8 页,试图访问虚拟地址 2A3D 并保存整型 1 到该地址对应的物理地址空间,之后又尝试从该地址读取保存的数据,请问 A 进程这两次内存访问过程能否正常执行? 并解释原因。
解:
(1)对于虚拟地址(即逻辑地址) 015 D = 1 × 1 6 2 + 5 × 16 + 13 = 349 015D = 1×16^2+5×16+13=349 015D=1×162+5×16+13=349 【这一步操作是将16
进制 →10
进制】
故页号 = int ( 349 / 1024 ) = 0,页内位移 = 349 mod 1024 = 349。【1024的来头:因为题目告诉了其虚拟内存页为 1KB = 1024B】
查页表第 0 页在第 4 块,所以物理地址为 1024 × 4+349=4445
所以,虚拟地址为 015D 对应的物理地址是 115D。【和题目一样,最终也→16
进制】
(2)对于物理地址 113 C = 1 × 1 6 3 + 1 × 1 6 2 + 3 × 16 + 12 = 4412 113C = 1×16^3+1×16^2+3×16+12=4412 113C=1×163+1×162+3×16+12=4412 【这
以上是关于操作系统期末总复习——绝地求生版的主要内容,如果未能解决你的问题,请参考以下文章