操作系统调度算法
设一个虚拟运算器中存在m个同时就绪的任务,此时每个任务的处理需求时间为Ci,任务周期为Pi,所以∑C<∑P时该虚拟运算器在一个周期内有可调度运算时间,即∑(C/P) <= 1(范围为m),满足该条件的系统任务队列才是可调度的(schedulable)。
决策模式:函数在执行的瞬间使用的处理方式。
1.抢占模式:可以互相抢状态的模式,当前正在运行的进程可以被打断,并转移的就绪态。
2.非抢占模式:一旦开始执行就不会停止直到结束。
FCFS(first come first server)
先来先服务是最简单的策略,和FIFO(first input first output)队列先进先出一个意思,这种是非抢占模式。
说白了就是排队买饭,你在别人后面进队别人买的再慢你也得等他买完。
SJF(short job first)
假设这个场景,A,B,C,D,E三人买饭,当A,B买完饭之后,C,D,E都陆续进入了排队队伍,但是C买100份,D买10份,E买1份,这时,老板可能就会和C,D商量让E先拿一份先走。
SJF也是一个非抢占决策模式,SJF就是在多个进程等待执行时,优先解决服务时间少的进程。
SRT(short remainder time)
最短剩余时间算法是SJF算法的抢占模式,意思是一但发现我当前正在等待执行的进程服务时间比你正在执行的进程的剩余服务时间少,我就插队执行,你就暂停往后稍稍。
RR(rotation)
轮转调度算法也称时间片技术(time slicing,SL),轮转法就是抢占模式的FCFS模式,为了解决非抢占模式可能出现的某进程服务时间过长又队列靠前的情况,设置时间片,以一个时间片的长度为中断条件,一但中断后,未完成的进程就会加入队尾,然后基于FCFS继续运行后续进程。
HRRN(highest response ratio next)
高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。
该算法中的响应比是指作业等待时间与运行比值,响应比公式定义如下:
响应比 =(等待时间+要求服务时间)/ 要求服务时间,即RR=(w+s)/s=1+w/s,因此响应比一定是大于等于1的。
优先执行响应比最高的作业。
CFS(completely fair scheduler)
linux内核进程调度算法:完全公平共享调度
对于LinuxCFS暂时只理解了一点皮毛,大概就是引入了PRI和NI作为优先级数的度量值,大概类似于办业务时VIP级数一样,VIP级数越高的优先执行。