操作系统期末复习(1)常考大题(简答题、计算题、程序题)


???
进程的状态变化





进程同步
利用记录型信号量机制:wait(s)、signal(s),如何解决进程同步问题
解决生产者、消费者问题
【这个请背代码】
eg1.
如图所示,系统中有三个进程GET、PRO和PUT,共用两个缓冲区BUF1和BUF2。
假设BUF1中最多可放11个信息,现已放入了两个信息;BUF2最多可放5个信息。
GET进程负责不断地将输入信息送入BUF1中,PRO进程负责从BUF1中取出信息进行处理,并将处理结果送到BUF2中,PUT进程负责从BUF2中读取结果并输出。
试写出正确实现GET、PRO、PUT的同步与互斥的算法
(要求:(1)用类C语言描述,条理清楚,注释恰当;(2)信号量原语统一使用wait和signal。)

首先,要设置各类信号量:
empty:表示当前缓冲区还能再存放的信息个数
full:表示当前缓冲区已经存放的信息个数
mutex:互斥信号量。
若mutex=1,表示没有进程进入临界区;(在互斥型信号量的使用中,其对应的值初始化为1)
若mutex=0,则表示有一个进程进入临界区

同步与互斥算法:(PV操作)
p操作(wait):申请一个单位资源,进程进入。简而言之就是信号量 -1
v操作(signal):释放一个单位资源,进程出来。简而言之就是信号量 +1
由上,可以解释以下代码:
get进程:
临界区BUF1进入一条信息(mutex1减一,empty1减一,full1加一)
为了保证在这一条信息之后,还能进入别的信息:(mutex1加一)

pro进程:
前四行代码:信息从临界区BUF1出来
临界区BUF2进入一条信息(full1减一,empty1加一,表示BUF1中减少一条信息;mutex1减一)
为了保证在这一条信息之后,还能进入别的信息:(mutex1加一)
后四行代码:从BUF1出来的信息进入临界区BUF2
(原理同get进程,见上)

put进程:
信息从临界区BUF2出来
(原理同上)

信号量


作业调度算法
计算作业完成时间、周转时间、带权周转时间
教程:https://www.bilibili.com/video/BV1P4411w72c
①先来先服务(FCFS)
非抢占式

驻留时间W(红框表示):表示一个进程虽然到达了,但是因为前一个的进程还在工作,所以变成阻塞态 的这段过程的时间
②短作业优先 / 最短进程优先(SJF/SPN)
非抢占式

③最短剩余时间(SRT)/ 可抢占式短作业优先
SRT是抢占式的
——在进程到达的时候判断优先级,然后抢占(理解“抢占”:可见下图)

步骤:
比较作业的剩余处理时间,并选取剩余处理时间最短的进程,优先执行作业(其余进程暂时被阻塞)
③最高(短)响应比优先调度算法 (HRRN / HRN)
HRRN是非抢占的
哪个进程的响应比R最大,哪个进程优先执行

步骤:
①根据右上角表格,画出左上角的表格(等待时间就是驻留时间W),注意这个表的值是每次进程结束之后都要重新算的

②A先到,且此时没有其他进程,所以A直接执行

③在A的执行过程中,B到了(t=2时,但是因为是非抢占的,B需要等1s)
在B执行的过程中,C、D、E也到了,但同理,因为非抢占,C、D、E暂时被阻塞
此时要计算出此时的B、C、D、E的响应比R
比较CDE响应比,其中C的R最高,所以下一个执行的是C


④
C执行结束了
此时要重新计算出此时的D、E的响应比R(发现了吗?每一个进程执行后,都要重新计算一次未执行过的进程的R,因为等待时间会发生变化)
计算可知此时E的响应比高,所以下一个执行的是E

⑤最后一个执行的是D

eg.

A:

(总感觉上表中P2的周转时间错了,应该是:周转时间 = 作业完成时间 - 作业提交时间 = 13-4 = 9?)
周转时间,平均周转时间,带权周转时间

特别注意作业提交时间不是作业进内存的时间,而是发出请求,提交就开始计时,如果无法安排进内存,那么就等待,等待的这部分时间也要计数。

死锁产生的必要条件(4个)

银行家算法
避免死锁
eg.

A:
work:当前全局剩余资源
need:该进程所需资源
allocation:已经分配给当前进程的资源数
新work:新的全局剩余资源(当某个进程得到需要的资源的后释放自身所有资源后,新work=work+allocation)
finish:是否可以让这个进程得到自己所需要的资源量,使全局处于安全状态(不处于死锁)

根据逻辑地址计算页号和页内偏移量,并转换物理地址
页面置换算法 / 内存缺页置换
根据页面置换算法,计算置换页面、缺页次数、缺页率
讲解:https://www.bilibili.com/video/BV1kx411X7wG
什么是缺页?
要访问的页不在主存,需要操作系统将其调入主存后再进行访问。
在题目中,缺页共有两种情况:
(1)提供的页框未满,需要往里面添加新的页面
(2)提供的页框已满,需要在页框中已有的页面选择一个页面,让这个页面被新的页面替换
缺页替换策略:
①先进先出(FIFO)
首先进来的,就要首先出去(也可以理解为在页框中停留最久的就要出去)
②最近最少使用(LRU)
看当前页框中的几个页,哪个离过去的相同页最远,就替换掉哪一个页
③最佳置换算法(OPT)
看当前页框中的几个页,哪个离未来的相同页最远,就替换掉哪一个页
eg.

A:


磁盘调度算法
★先来先服务FCFS(First Come,First Serve)
先来先服务是一种自然公平的调度策略。先来后到,谁也没有特权。例如,给定图的一组磁盘请求,其中X表示需要读写的扇面,下面的数字为磁道号(这里由于不考虑旋转延迟,数据所在的扇面号在此忽略)。
假定磁头的初始位置为10号位,而磁盘请求发生的顺序为0、23、6、16、2、21、8、9、12。则在先来先服务调度下,总寻道的道数为:10+23+17+10+14+19+13+1+3=109

先来先服务策略并不一定产生最短的总寻道时间
这种讲究自然公平的策略效率十分低下
短任务优先STF(Shortest Task First)
短任务优先就是谁的磁盘读写数据量最少,谁就优先。由于磁盘的访问时间主要取决于寻道和旋转延迟,因此读写的数据量对整个磁盘读写时间的影响并不大。
★短寻道优先SSF(Shortest Seek First)
短寻道优先则考虑当前磁头离谁的数据最近,谁就优先。
短寻道优先策略并不一定产生最短的总寻道时间。在磁盘读写请求呈现一种左右摇摆的模式时,寻道时间可能不减反增。

计算上图中的总寻道数:(11-10)+(11-8)+(15-8)+(15-0)+(31-0)=57
电梯调度ES(Elevator Scheduling)/ SCAN磁盘调度算法
特点:一扫到底(从一个方向扫描到头再反转方向,这也许并不是最有效的。如果一个方向已经没有请求了,我们可以提前调头,而无须等到扫描到末端才进行。)
先满足一个方向的所有请求,再满足所有反方向的请求,这样循环往复。
在电梯调度策略里,磁头往每个方向运动时(由里往外和由外往里),皆扫描到头。

计算上图中的总寻道数:(11-10)+(15-11)+(31-15)+(31-8)+(32-31)+(8-0)=53
(扫描到31时,还需要继续扫描到头32,因为这个算法的特点就是“一扫到底”)
提前查看电梯调度ESLA(Elevator Scheduling with LookAhead)
如果一个方向的请求全部满足后,即反转运行。无须扫描到底。这种算法就是每次往某个方向移动时必须确保该方向还有请求未满足。否则即刻调转方向。这样效率将得到提高。

计算上图中的总寻道数:(11-10)+(15-11)+(31-15)+(31-8)+(8-0)=52
单向电梯调度OWES(One Way Elevator Scheduling)
特点:
提前查看电梯调度这种正反两个方向交替运动并不一定最优,
改进办法是单向电梯调度,即只向一个方向扫描。
当该方向没有剩余请求时,则回到0道,再进行同样的扫描。

计算上图中的总寻道数:(11-10)+(15-11)+(31-15)+(8-0)=29

浙公网安备 33010602011771号