1.先来先服务(FCFS:First Come First Serve)
规则
按照作业/进程达到的先后顺序进行服务,参照日常食堂打饭,先来先打饭,后来后打饭。
是否可抢占:
不可抢占,也就是说,不能插队,也不能在别人正在打饭的时候打断别人。
优点
简单、公平。
缺点
对于排在长作业后面的短作业不利,也就是说排在长作业后面的短作业来说,它们要等待很长的时间。
举例:你在食堂打饭,你前面排了一个人,这个人要打好多好多饭菜,得耽搁很久很久,那么对于你来说,就打一个饭菜,要等待很久。
是否导致饥饿:
不会。
2.短作业优先(SJF:Shortest Job First)
规则
最短的作业/进程优先得到服务。
也就是说,谁所需要得服务时间越短,谁就排在前面。
是否可抢占:
不可抢占。
但是有一个可抢占的版本,叫最短剩余时间优先时间算法 SRTN(Shortest Remaining Time Next)。
优点
拥有最短的平均等待时间、平均周转时间。
对于平均等待时间和平均周转时间下面有计算公式。
缺点
不公平,对于短作业有利,对于长作业不利。
举例:你去食堂打饭,还是那个人,他要打很多很多很多的饭菜,你到了食堂,你可以直接去他前面完成打菜打饭,而且所有比这个人打饭打菜少的,都可以直接去他前面。那么对于他来说,他就要等很久很久。对他就不利了。
**另外,**作业的运行时间是由用户提供的,并不一定真实。
也就是说,你说你很快只要1分钟,你就排到别人前面,但是你不一定真的只花了1分钟。
是否导致饥饿:
会,如果有很多很多很多的短作业进来,那么长作业就会很长时间得不到服务,就会产生饥饿现象。
举例:上面那个例子,也就是后面来了一堆的很快的人,直接插队到那个打饭菜很多的人前面,就可能人家一中午了都没排到服务,那么这就产生饥饿了。
3. 最短剩余时间优先算法 SRTN(Shortest Remaining Time Next)
这就是上面短作业优先算法的可抢占式版本。
规则
最最短的作业/进程优先得到服务。
也就是说,谁所需要得服务时间最短,谁就排在前面。
是否可抢占:
可抢占。
优点
拥有最短的平均等待时间、平均周转时间。
缺点
不公平,对于短作业有利,对于长作业不利。
而且当一个进程服务到一半的时候,可能被其他进程抢占
举例:你去食堂打饭,已经到你了,你已经在打饭了,这个时候突然来了一个人,说就拿个汤就行,然后打饭阿姨就先帮他拿汤了。
是否导致饥饿:
会,如果有很多很多很多的短作业进来,那么长作业就会很长时间得不到服务,就会产生饥饿现象。
4.高相应比优先(HRRN Highest Response Ratio Next)
响应比 = (等待时间+服务时间)/服务时间
规则
谁的响应比高,谁先得到服务。
是否可抢占:
不可抢占。
优点
综合考虑了等待时间和服务时间。
等待时间相同的时候,要求服务时间短的优先,也就是短作业优先。
服务时间相同的时候,要求等待时间长的优先,也就是先来先服务。
缺点
做响应比计算需要增加系统开销。
是否导致饥饿:
不会。
周转时间 = 完成时间 - 到达时间
等待时间 = 周转时间 - 运行时间
好好学习。
不打扰是我的温柔。