按照作业到达的先后次序进行调度
以作业长短计算优先级
长短:作业所要求的运行时间
外部赋予进程优先级
动态优先级的实现,以响应比作为动态优先级。
响应比Rp = (等待时间+要求服务时间)/要求服务时间
按FCFS把就绪任务排成队列,然后让就绪队列上每个进程每次只运行一个时间片。
当一个进程申请使用资源的时候,银行家算法通过先试探分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。
例题:https://blog.csdn.net/qq_41541801/article/details/93765001
first fit从链首开始寻找,直到找到一个大小能满足要求的空闲分区。
next fit从上次找到的空闲分区的下一个空闲分区开始查找。
best fit找出能满足要求,又是最小的空闲分区。
worse fit和BF相反,找满足要求又最大的空闲分区。
把进程的地址空间分成若干个页,对页加以编号。地址结构:
页号 | 位移量(页内地址) |
---|
允许进程的各个页离散的存储在内存的任意物理块,所以需要页表来实现页号到物理块号的映射。
逻辑地址转物理地址:以页号为索引请求页表,得到该页的物理块号。拼接页内地址,形成完整的物理地址。
如果页表中不存在,则发生缺页中断,从外存找到对应页装载入内存并更新页表,可能涉及页表项的淘汰,此处根据规定的策略执行。缺页中断完成后要重新查页表。
放在cache里的页表,会先查TLB,未命中再去内存查页表,查到后会放进cache。
将页表再次分页,逻辑地址被分为:
外层页号 | 外层页内地址 | 页内地址 |
---|
在逻辑地址转物理地址时,先根据外层页号去找第一级页表中映射的二级页表,然后在二级页表中根据外层页内地址找到对应页表项,得到物理块号,再拼接页内地址,形成物理地址。
按最近访问时间排序
记录每页的访问次数,并按此排序
给每页设置一个访问位A。
当某页被访问时,访问位置1。
在选择要淘汰的页时,根据FIFO顺序对页表进行检查,如果走到尾就回到队首继续。对于一个页表项,如果访问位为0,则选择这页换出;如果是1,则置为0,继续向后找。
算法和Clock一样,但增加了一个修改位M,用来标记装入后是否被修改。(考虑修改后写回成本)
淘汰优先级:
磁盘调度算法的目标是是磁盘的平均寻道时间最小
根据进程请求访问磁盘的先后次序进行调度
找最近的
要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短
假设磁头的初始位置是100号磁道,有多个进程先后陆续的请求访问55,58,39,18,90,160,150,38,184号磁道
往返扫描
当磁头正在由里向外移动时,SCAN算法所选择的下一个访问对象应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。这样由里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向,由外向里移动。
磁头单向移动
look就是如果后面没有请求,就直接回头。(电梯调度)
clook就是走到头后如果后面没有请求,不从头开始,从下个请求的位置开始。
在题目中给SCAN算法时默认按Look来(?)
与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。
构造一张空闲盘块表:
序号 | 第一空闲盘块号 | 空闲盘块数 |
---|---|---|
1 | 2 | 4 |
2 | 7 | 6 |
把所有空闲盘块拉成一条链,每个盘块都有指向后继空闲盘块的指针。分配空间时就从链首摘下适当数目空闲盘块分配给用户,释放时就加在末尾。
一个盘区可以包含若干个盘块,也就是把盘块链再压缩。每个盘区除了包含指向下一个空闲盘区的指针,还有当前盘区所含盘块数的记录。分配时按首次适应算法,回收时也要注意合并。
用一块连续的空间的二进制位来记录盘块是否被使用。
空闲区表和空闲链表的组合