站长工具免费,深圳 环保 骏域网站建设专家,月饼营销软文,wordpress本地上传阿里元进程调度算法也称 CPU 调度算法#xff0c;毕竟进程是由 CPU 调度的。
当 CPU 空闲时#xff0c;操作系统就选择内存中标的某个 [就绪状态] 的进程#xff0c;将其分配给 CPU。 什么时候会发生CPU调度呢#xff1f;通常有以下情况#xff1a; 当进程从运行状态转换到等待…进程调度算法也称 CPU 调度算法毕竟进程是由 CPU 调度的。
当 CPU 空闲时操作系统就选择内存中标的某个 [就绪状态] 的进程将其分配给 CPU。 什么时候会发生CPU调度呢通常有以下情况 当进程从运行状态转换到等待状态当进程从运行状态转换到就绪状态当进程从等待状态转换到就绪状态当进程从运行状态转换到终止状态 其中发生在 1 和 4 两种情况下的调度称为 [非抢占式调度] 2 和 3 两种情况下发生的调度称为 [抢占式调度]。 非抢占式的意思是当进程正在运行时它就会一直运行直到该进程完成或发生某个事件而被阻塞时才会把 CPU 让给其他进程。
抢占式调度顾名思义就是进程正在运行的时候可以被打断使其把 CPU 让给其他进程。那抢占的原则一般有三种分别是时间片原则优先权原则短作业优先原则。
调度算法影响的是等待时间进程在就绪队列中等待调度的时间总和而不能影响进程真在使用的 CPU 时间和 I/O 时间。
常见的调度算法
先来先服务算法最短作业优先调度高响应比优先调度时间片轮转调度最高优先级调度多级反馈队列调度 先来先服务调度算法
最简单的一个调度算法就是非抢占式的先来先服务FCFS算法。 先来先服务每次从就绪队列选择最先进入队列的进程然后一直运行直到进程退出或被阻塞才会继续从队列中选择第一个进程接着运行。
这似乎很公平但是当一个长作业先运行了那么后面的短作业等待的时间就会很长不利于短作业。
FCFS对长作业有利适用于CPU繁忙型作业的系统而不适用于 I/O 繁忙型作业的系统。 最短作业优先调度算法
最短作业优先SJF调度算法同样也是顾名思义它会优先选择运行时间最短的进程来运行这有助于提高系统的吞吐量。 这显然对长作业不利很容易造成一种极端现象。
比如一个长作业在就绪队列等待运行而这个就绪队列有非常多的短作业那么就会使得长作业不断地往后推周转时间变长致使长作业长期不会被运行。 高响应比优先调度算法
前面的 [先来先服务调度算法] 和 [最短作业优先调度算法] 都没有很好的权衡短作业和长作业。
那么。高响应比优先HRRN调度算法主要是权衡了短作业和长作业。
每次进行进程调度时先计算 [响应比优先级]然后把 [响应比优先级] 最高的进程投入运行[响应比优先级] 的计算公式 从上面的公式可以发现
如果两个进程的 [等待时间] 相同时 [要求服务时间] 越短[响应比] 就越高这样短作业的进程容易被选中运行如果两个进程 [要求服务时间] 相同时[等待时间] 越长[响应比] 就越高这就兼顾到了长作业进程因为进程的响应比可以随时间等待的增加而提高当其等待时间足够长时其响应比便可以升到很高从而获得运行的机会 时间片轮转调度算法
最古老、最简单、最公平且使用最广泛的算法就是时间片轮转RR调度算法。 每个进程被分配一个时间段称为时间片即允许该进程在该时间段中运行。
如果时间片用完进程还在运行那么将会把此进程从CPU释放出来并把 CPU分配另外一个进程如果该进程在时间片结束前阻塞或结束则 CPU 立即进行切换
另外。时间片的长度就是一个很关键的点
如果时间片设的太短会导致过多的进程上下文切换降低了 CPU 效率如果设的太长又可能引起对短作业进程的响应时间变长通常将时间片设置为 20ms-50ms 是一个比较合理的折中值。 最高优先级调度算法
前面的 [时间片轮转算法] 做了一个假设即让所有的进程同等重要也不偏袒谁大家的运行时间都一样。
但是对于多用户计算机系统就有不同的看法了它们希望调度是有优先级的即希望调度程序能从就绪队列中选择最高优先级的进程进行运行这称为最高优先级HPF调度算法。
进程的优先级可以分为静态优先级或动态优先级
静态优先级创建进程时候就已经确定优先级了然后整个运行时间优先级都不会变化动态优先级根据进程的动态变化调整优先级比如如果进程运行时间增加则降低其优先级如果进程等待时间就绪队列的等待时间增加则升高其优先级也就是随着时间的推移增加等待进程的优先级。
该算法也有两种处理优先级高的方法非抢占式和抢占式
非抢占式当就绪队列中出现优先级高的进程运行完当前进程再选择优先级高的进程。抢占式当就绪队列中出现优先级高的进程当前进程挂起调度优先级高的进程运行。
但是依然有缺点可能会导致低优先级的进程永远不会运行。 多级反馈队列调度算法
多级反馈队列MFQ调度算法是 [时间片轮转算法] 和 [最高优先级算法] 的综合和发展。
顾名思义
[多级] 表示有多个队列每个队列优先级从高到低同时优先级越高时间片越短[反馈] 表示如果有新的进程加入优先级高的队列时立刻停止当前正在运行的进程转而去运行优先级高的队列 工作方式
设置多个队列赋予每个队列不同的优先级每个队列优先级从高到低同时优先级越高时间片越短。新的进程会被放入到第一级队列的末尾按先来先服务的原则排队等待被调度如果在第一级队列规定的时间片没运行完成则将其装入到第二级队列的末尾以此类推直至完成当较高优先级的队列为空才调度较低优先级的队列中的进程运行。如果进程运行时有新的进程进入较高优先级的队列则停止当前运行的进程并将其移入到原队列末尾接着让较高优先级的进程运行
可以发现对于短作业可能可以在第一级队列很快被处理完。对于长作业如果在第一级队列处理不完可以移入下次队列等待被执行虽然等待的时间变长了但是运行时间也会变长所以该算法很好的兼顾了长短作业同时有较好的响应时间。