小林coding chapter 5

chapter 5 调度算法

操作系统三大调度机制:进程调度,页面置换,磁盘调度算法

进程调度算法:先来先服务,短作业优先,高响应比算法,时间片轮转调度,最高优先级算法,多级反馈调度算法(就是chapter 4中说的那样)

 

页面置换算法:

缺页异常(缺页中断):缺页中断在开始执行期间就会处理《中断》,而一般的中断在指令完成之后再进行处理

                                        缺页中断在返回到该指令的时候会重新执行该指令,但是一般的中断在在返回之后会执行下一个指令

 

1. 在 CPU ⾥访问⼀条 Load M 指令,然后 CPU 会去找 M 所对应的⻚表项。
2. 如果该⻚表项的状态位是「有效的」,那 CPU 就可以直接去访问物理内存了,如果状态
位是「⽆效的」,则 CPU 则会发送缺⻚中断请求。
3. 操作系统收到了缺⻚中断,则会执⾏缺⻚中断处理函数,先会查找该⻚⾯在磁盘中的⻚⾯
的位置。
4. 找到磁盘中对应的⻚⾯后,需要把该⻚⾯换⼊到物理内存中,但是在换⼊前,需要在物理
内存中找空闲⻚,如果找到空闲⻚,就把⻚⾯换⼊到物理内存中。
5. ⻚⾯从磁盘换⼊到物理内存完成后,则把⻚表项中的状态位修改为「有效的」。
6. 最后,CPU 重新执⾏导致缺⻚异常的指令。
 
上述第4步,就是内存页面置换法的关键所在!!!!!
第四步是能找到空闲页的情况下,那如果找不到空闲页怎么办呢????
找不到空闲⻚的话,就说明此时内存已满了,这时候,就需要「⻚⾯置换算法」选择⼀个物理⻚,如果该物理⻚有被修改过(脏⻚),则把它换出到磁盘,然后把该被置换出去的⻚表项的状态改成「⽆效的」,最后把正在访问的⻚⾯装⼊到这个物理⻚中
 

上述这个流程图就很好的体现了这个虚拟内存管理的方式!!!!

 

所以,页面置换算法的目的就是 尽可能的减少页面换入换出的次数,

 

最佳⻚⾯置换算法(OPT)
先进先出置换算法(FIFO)最近最久未使⽤的置换算法(LRU)
时钟⻚⾯置换算法(Lock)
最不常⽤置换算法(LFU)
 
最佳页面置换法:置换在未来最不长访问的页面
该算法需要计算每一个页面在未来访问需要的下一次的时间,得出最长不能被访问的那个页面,然后置换这个页面!!!
 
先进先出置换算法:
我们无法预知每一个页面在内存中等待的时间,那么我们可以将内存中驻留最长时间的页面进行替换掉 ---- > 先进先出的算法思想
 
最近最久未使用的算法:(LRU)---> (least recently used)
发生缺页时,选择最长时间没有被访问的页面进行置换
 
时钟页面置换算法:

第一次碰到访问位是0的时候,就淘汰该页面,将时钟指针指向下一个页面

 

最不常用算法:发生缺页中断时,选择那个最少被访问的页面进行置换

它的实现⽅式是,对每个⻚⾯设置⼀个「访问计数器」,每当⼀个⻚⾯被访问时,该⻚⾯的访问计数器就累加 1。在发⽣缺⻚中断时,淘汰计数器值最⼩的那个⻚⾯。
 
 
磁盘调度算法!!!!!
 
磁盘调度算法中包含了:先来先服务,最短寻道时间优先法则,扫描算法算法,循环扫描算法,LOOK算法和C-LOOK算法
FCFS就不必多说了,就是一暴力算法
最短寻道时间优先法(shortest seek first)-----> (SSF)
距离磁头最近的算法:可以通过计算数之间的差值,再对当前磁头位置进行更新

但是,这种方法会导致可能有某些请求饥饿,例如先请求183磁道,但是后序的请求都是小于183的,这就让183这个请求永远不会被满足,而183进行饥饿

 

扫描算法:为了防止产生饥饿,我们设定了扫描算法来解决饥饿这个问题:为了防止饥饿,我们会将磁盘的磁头在一个方向上来回移动来,直到执行完所有的请求之后,再调转方向,执行另一个方向上的全部请求

这种算法也被称为电梯算法!!!!

上述的扫描算法在中间的部分响应较多,每一个磁道响应都存在差值。所以循环扫描算法就很好的避免了这个问题的产生

 

循环扫描算法:只有磁头朝特定的,某个方向移动的时候,才能处理磁道的响应请求,而快速返回时,快速返回边缘磁道,而且返回途中不处理任何请求。

算法特点:只处理一个方向上的磁盘请求!!!!

 

LOOK:磁头不是移动到末端才返回的,磁头是移动到最远请求的位置的时候,就可以返回了!!!边返回边执行

 

C-LOOK:磁头在移动到最远请求的位置的时候,可以立即返回到最开始或者最末端,然后再开始执行,知道响应完毕!!

 

posted @ 2022-06-07 16:00  Dyral_HAN  阅读(113)  评论(0编辑  收藏  举报