Contents

操作系统-小林coding-调度算法

本系列笔记为作者在跟随小林coding学习的时候做的笔记。感谢小林大大。

进程调度算法

按是否抢占

分为抢占式和非抢占式

按具体策略

先来先服务调度算法(First Come First Severd, FCFS)

从就绪队列选择队列头的进程运行,当前进程退出或被阻塞再从队列中选择队列头的下一个进程运行

最短作业优先调度算法(Shortest Job First, SJF)

优先选择运行时间最短的进程来运行

高响应比优先调度算法(Highest Response Ratio Next, HRRN)

每次进行进程调度时,先计算「响应比优先级」,然后把「响应比优先级」最高的进程投入运行

响应比=(等待时间+要求服务时间)/要求服务时间

时间片轮转调度算法(Round Robin, RR)

运行进程被分配一个时间段,称为时间片(Quantum),允许该进程在该时间段中运行

最高优先级调度算法(Highest Priority First,HPF)

从就绪队列中选择最高优先级的进程运行

静态优先级:不变化

动态优先级:按时间增加优先级

多级反馈队列调度算法(Multilevel Feedback Queue)

https://cdn.xiaolincoding.com/gh/xiaolincoder/ImageHost/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E8%BF%9B%E7%A8%8B%E5%92%8C%E7%BA%BF%E7%A8%8B/28-%E5%A4%9A%E7%BA%A7%E9%98%9F%E5%88%97.jpg
comment

队列优先级从高到低,优先级越高时间片越短

内存页面置换算法

当出现缺页异常,需调入新页面而内存已满时,选择被置换的物理页面

最佳页面置换算法

置换在「未来」最长时间不访问的页面,不现实

先进先出置换算法

选择在内存驻留时间很长的页面进行中置换

最近最久未使用的置换算法(LRU)

选择最长时间没有被访问的页面进行置换

实现使用双向链表和哈希表即可

时钟页面置换算法(Clock)

页面保存在一个类似钟面的「环形链表」,表指针指向最老的页面

访问页面时将访问位设为1

淘汰页面时,表指针遇到访问位为0则选择,遇到访问位为1则设置为0,并转到下一个

最不常用算法(LFU)

选择「访问次数」最少的那个页面,并将其淘汰

实现在LRU的基础上(双向链表和哈希表)给哈希表的值添加一个访问次数和时间的字段(访问计数器)

磁盘调度算法

先来先服务(First-Come,First-Served,FCFS)

先到来的请求,先被服务

最短寻道时间优先Shortest Seek First,SSF)

优先选择从当前磁头位置所需寻道时间最短的请求

可能产生饥饿,磁头在一小块区域来回移动

扫描算法(Scan)

磁头在一个方向上移动,访问所有未完成的请求,直到磁头到达该方向上的最后的磁道,才调换方向

循环扫描算法(Circular Scan, CSCAN )

返回中途不处理任何请求,磁道只响应一个方向上的请求

LOOK 与 C-LOOK算法

LOOK:扫描算法基础上,磁头在移动到「最远的请求」位置,然后立即反向移动

C-LOOK:循环扫描算法基础上做相同的优化

 |