操作系统期末总复习——绝地求生版

Posted 一支王同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统期末总复习——绝地求生版相关的知识,希望对你有一定的参考价值。


✅ 2022 新年第一篇,献给了 OS
1次文章更新 —— 2022/1/2 18:00



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 进程将内存的页面和物理内存块的编号对应关系如下:

页面编号物理内存块编号
04
19
25
38

请根据以上信息回答如下问题,并给出计算过程︰

  1. 虚拟地址为 015D 对应的物理地址是多少?
  2. 物理地址为 113C 对应的虚拟地址为多少?
  3. 进程 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 【这

以上是关于操作系统期末总复习——绝地求生版的主要内容,如果未能解决你的问题,请参考以下文章

xss怎么下载绝地求生

《绝地求生》封杀外挂玩家150万,或许还要效法前辈“黑吃黑”

《绝地求生》雪地地图上线

ue4绝地求生的操作控制

脑洞不是一般大!肆虐《绝地求生》的外挂还有这种操作?

你不知道的《绝地求生》,外挂战的实质是货币战争

(c)2006-2024 SYSTEM All Rights Reserved IT常识