网站报价,自己网上怎么接单,店铺设计分析,金融行业高端网站制作进程调度算法
进程调度算法也称CPU调度算法
调度发生时期
当进程从运行状态转到等待状态#xff1b;当进程从运行状态转到就绪状态#xff1b;当进程从等待状态转到就绪状态#xff1b;当进程从运行状态转到终止状态#xff1b;
其中发生在 1 和 4 两种情况下的调度称为…进程调度算法
进程调度算法也称CPU调度算法
调度发生时期
当进程从运行状态转到等待状态当进程从运行状态转到就绪状态当进程从等待状态转到就绪状态当进程从运行状态转到终止状态
其中发生在 1 和 4 两种情况下的调度称为「非抢占式调度」2 和 3 两种情况下发生的调度称为「抢占式调度」。
非抢占式的意思就是当进程正在运行时它就会一直运行直到该进程完成或发生某个事件而被阻塞时才会把 CPU 让给其他进程。
而抢占式调度顾名思义就是进程正在运行的时可以被打断使其把 CPU 让给其他进程。那抢占的原则一般有三种分别是时间片原则、优先权原则、短作业优先原则。
先来先服务调度算法
最简单的一个调度算法就是非抢占式的先来先服务*First Come First Severd, FCFS*算法了
每次从就绪队列选择最先进入队列的进程然后一直运行直到进程退出或被阻塞才会继续从队列中选择第一个进程接着运行
缺点
如果一个长作业先运行了不利于短作业
最短作业优先调度算法
它会优先选择运行时间最短的进程来运行这有助于提高系统的吞吐量。
缺点
不易于长作业
高响应比优先调度算法
高响应比优先 *Highest Response Ratio Next, HRRN*调度算法主要是权衡了短作业和长作业。每次进行进程调度时先计算「响应比优先级」然后把「响应比优先级」最高的进程投入运行。 时间片轮转调度算法
最古老、最简单、最公平且使用最广的算法就是时间片轮转*Round Robin, RR*调度算法。
每个进程被分配一个时间段称为时间片*Quantum*即允许该进程在该时间段中运行。
另外时间片的长度就是一个很关键的点
如果时间片设得太短会导致过多的进程上下文切换降低了 CPU 效率如果设得太长又可能引起对短作业进程的响应时间变长。将
通常时间片设为 20ms~50ms 通常是一个比较合理的折中值。
最高优先级调度算法
从就绪队列中选择最高优先级的进程进行运行这称为最高优先级*Highest Priority FirstHPF*调度算法。
进程的优先级可以分为静态优先级或动态优先级
静态优先级创建进程时候就已经确定了优先级了然后整个运行时间优先级都不会变化动态优先级根据进程的动态变化调整优先级比如如果进程运行时间增加则降低其优先级如果进程等待时间就绪队列的等待时间增加则升高其优先级也就是随着时间的推移增加等待进程的优先级。
该算法也有两种处理优先级高的方法非抢占式和抢占式
非抢占式当就绪队列中出现优先级高的进程运行完当前进程再选择优先级高的进程。抢占式当就绪队列中出现优先级高的进程当前进程挂起调度优先级高的进程运行。
但是依然有缺点可能会导致低优先级的进程永远不会运行。
多级反馈队列调度算法
多级反馈队列*Multilevel Feedback Queue*调度算法是「时间片轮转算法」和「最高优先级算法」的综合和发展。
顾名思义
「多级」表示有多个队列每个队列优先级从高到低同时优先级越高时间片越短。「反馈」表示如果有新的进程加入优先级高的队列时立刻停止当前正在运行的进程转而去运行优先级高的队列 来看看它是如何工作的
设置了多个队列赋予每个队列不同的优先级每个队列优先级从高到低同时优先级越高时间片越短新的进程会被放入到第一级队列的末尾按先来先服务的原则排队等待被调度如果在第一级队列规定的时间片没运行完成则将其转入到第二级队列的末尾以此类推直至完成当较高优先级的队列为空才调度较低优先级的队列中的进程运行。如果进程运行时有新进程进入较高优先级的队列则停止当前运行的进程并将其移入到原队列末尾接着让较高优先级的进程运行
可以发现对于短作业可能可以在第一级队列很快被处理完。对于长作业如果在第一级队列处理不完可以移入下次队列等待被执行虽然等待的时间变长了但是运行时间也会更长了所以该算法很好的兼顾了长短作业同时有较好的响应时间。
页面置换算法
先谈一下缺页中断缺页异常
当 CPU 访问的页面不在物理内存时便会产生一个缺页中断请求操作系统将所缺页调入到物理内存。那它与一般中断的主要区别在于
缺页中断在指令执行「期间」产生和处理中断信号而一般中断在一条指令执行「完成」后检查和处理中断信号。缺页中断返回到该指令的开始重新执行「该指令」而一般中断返回回到该指令的「下一个指令」执行。
页面置换算法的功能是当出现缺页异常需调入新页面而内存已满时选择被置换的物理页面也就是说选择一个物理页面换出到磁盘然后把需要访问的页面换入到物理页。
最佳页面置换算法OPT
最佳页面置换算法基本思路是置换在「未来」最长时间不访问的页面。这很理想但是实际系统中无法实现因为程序访问页面时是动态的我们是无法预知每个页面在「下一次」访问前的等待时间。所以最佳页面置换算法作用是为了衡量你的算法的效率你的算法效率越接近该算法的效率那么说明你的算法是高效的。
先进先出置换算法FIFO
我们可以选择在内存驻留时间很长的页面进行中置换这个就是「先进先出置换」算法的思想
最近最久未使用的置换算法LRU
最近最久未使用LRU的置换算法的基本思路是发生缺页时选择最长时间没有被访问的页面进行置换也就是说该算法假设已经很久没有使用的页面很有可能在未来较长的一段时间内仍然不会被使用。LRU 虽然看上去不错但是由于开销比较大实际应用中比较少使用。
时钟页面置换算法Lock
时钟页面置换算法是一种既能优化置换次数也能方便实现的算法它跟 LRU 近似又是对 FIFO 的一种改进。
该算法的思路是把所有的页面都保存在一个类似钟面的「环形链表」中一个表针指向最老的页面。
当发生缺页中断时算法首先检查表针指向的页面
如果它的访问位位是 0 就淘汰该页面并把新的页面插入这个位置然后把表针前移一个位置如果访问位是 1 就清除访问位并把表针前移一个位置重复这个过程直到找到了一个访问位为 0 的页面为止
最不常用置换算法LFU
最不常用LFU算法这名字听起来很调皮但是它的意思不是指这个算法不常用而是当发生缺页中断时选择「访问次数」最少的那个页面并将其淘汰。
它的实现方式是对每个页面设置一个「访问计数器」每当一个页面被访问时该页面的访问计数器就累加 1。在发生缺页中断时淘汰计数器值最小的那个页面。
磁盘调度算法
先来先服务算法
先来先服务First-ComeFirst-ServedFCFS顾名思义先到来的请求先被服务。
最短寻道时间优先算法
最短寻道时间优先Shortest Seek FirstSSF算法的工作方式是优先选择从当前磁头位置所需寻道时间最短的请求但这个算法可能存在某些请求的饥饿。
扫描算法
最短寻道时间优先算法会产生饥饿的原因在于磁头有可能在一个小区域内来回得移动。为了防止这个问题可以规定磁头在一个方向上移动访问所有未完成的请求直到磁头到达该方向上的最后的磁道才调换方向这就是扫描*Scan*算法。
扫描调度算法性能较好不会产生饥饿现象但是存在这样的问题中间部分的磁道会比较占便宜中间部分相比其他部分响应的频率会比较多也就是说每个磁道的响应频率存在差异。
循环扫描算法
扫描算法使得每个磁道响应的频率存在差异那么要优化这个问题的话可以总是按相同的方向进行扫描使得每个磁道的响应频率基本一致。
循环扫描Circular Scan, CSCAN 规定只有磁头朝某个特定方向移动时才处理磁道访问请求而返回时直接快速移动至最靠边缘的磁道也就是复位磁头这个过程是很快的并且返回中途不处理任何请求该算法的特点就是磁道只响应一个方向上的请求。
LOOK 与 C-LOOK 算法
我们前面说到的扫描算法和循环扫描算法都是磁头移动到磁盘「最始端或最末端」才开始调换方向。
那这其实是可以优化的优化的思路就是磁头在移动到「最远的请求」位置然后立即反向移动。
那针对 SCAN 算法的优化则叫 LOOK 算法它的工作方式磁头在每个方向上仅仅移动到最远的请求位置然后立即反向移动而不需要移动到磁盘的最始端或最末端反向移动的途中会响应请求。
而针 C-SCAN 算法的优化则叫 C-LOOK它的工作方式磁头在每个方向上仅仅移动到最远的请求位置然后立即反向移动而不需要移动到磁盘的最始端或最末端反向移动的途中不会响应请求。