操作系统计算题,基于b站中的“王道考研-操作系统”复习
内存保护中界地址寄存器与重定位寄存器的使用
进程状态转换
调度
三层调度(高级作业调度、中级内存调度、低级进程调度)
调度算法评价指标
作业调度算法:
https://www.bilibili.com/video/BV1YE411D7nH?p=16
周转时间=完成时间-到达时间
带权周转时间=周转时间-运行时间
先来先服务FCFS
(到达时间越早,就越先,在这题中FCFS的执行顺序为:1234)
短作业优先SJF
(到了的,选运行时间短的,比如8:00的第一个运行完之后是10:00,因为10:00另外三个都到了,运行时间最短是3的25分钟,所以执行第三个,在这题中SKF的执行顺序是:1342)
高响比调度HRRN(高响比越大越优先)
ps:避免了短作业优先算法造成的长作业饥饿问题
高响比=(等待时间+运行时间)/运行时间
等待时间=上一个作业的完成时间-本作业的到达时间。
进程调度算法:
https://www.bilibili.com/video/BV1YE411D7nH?t=1431&p=17
时间片轮转算法RR:
用到了队列
非抢占式优先级调度
抢占式优先级调度
多级反馈调度算法:
进程互斥
pv操作
整形信号量
记录型信号量
###pv书写
例题,代码4要在代码2之后操作
生产者消费者问题
ps:这里的进程里面的p操作的empty和mutex的两个顺序不能交换因为会引起死锁。
但v操作的mutex和full的两个顺序能交换,但是最好还是写成下面这个样子。
同步:当缓冲区为满时,生产者需等待消费者消费,当产品数为空时消费者需等待生产者生产。
互斥:对缓冲区的访问要互斥进行
多消费者多生产者
也可以不设置互斥变量,因为盘子只有一个,相当于已经互斥了,但如果盘子有两个的话,就得设互斥变量(防止临界变量覆盖)
吸烟者问题
也不用设互斥信号量
哲学家进餐问题 semaphore
死锁
死锁的避免:
如果系统处于安全状态,就一定不会发生死锁。
如果系统进入不安全状态,就可能发生死锁。
如果系统发生死锁,就一定在不安全状态。
银行家算法:
能找到安全序列:
死锁的检测:
当不能消除所有边,就是发生了死锁
比如上面的例题,至多只能消除成这样,消除不了全部
下面这道是可以消除全部的
死锁的解除
动态分区分配算法:
https://www.bilibili.com/video/BV1YE411D7nH?p=37
①首次适应算法
地址递增
②最佳适应算法
为保证大进程来的时候有空间,所以,容量递增排列(优先使用小的空闲区)
ps:会产生很多外部碎片
③最坏适应算法
容量递减排列(优先使用大的空闲区)
④邻近适应算法
页面置换算法:
原因-快表
①最佳置换算法OPT
最不容易产生抖动
每次选择淘汰的页面,这个页面是以后永不被使用的页面或者是以后最长时间内不被使用的页面,这样能保证最低的缺页率
发生了调页就会有缺页中断。
但只有 没有空闲的内存块的时候,才会发生页面置换。
②先进先出置换算法FIFO
最容易产生抖动
看谁先进来就先出去,不管后面有没有再次访问
③最近最久未使用算法LRU
看谁最近没有被访问到就退出谁
内存管理(地址变换)
基本分页中,逻辑地址的二进制表示(页号+页内偏移量)
地址变换机构
https://www.bilibili.com/video/BV1YE411D7nH?p=39
上面流程图意思:
分段存储管理地址计算小结
二级页表计算
多级页表计算
n级页表的访存次数为n+1次
段页式管理