进程调度算法的比较
1。FCFS调度(first come first serve):
也就是先来先服务进程调度策略,没有切换进程的概念,自然也也就没有抢占的概念。类似于流水线的机制。
2. Round Robin:
时间片轮转,现在计算机大多是采用的这个策略进行进程切换。不利于不同大小进程的完成时间。
3 SJF(Short Job First):
短作业优先,这是对FCFS对短作业效果不好所做的对短作业特定的优化。但是优化过度了,会产生饥饿的现象。因为一些短进程不断到来时一些长进程无法执行。
4.SRTN
Shortest Remaining Time Next 最短剩余时间,是SJF的另一个版本,可以看出仅仅是从抢占改成了非抢占。
5 HRRN:
Highest Response Ratio Next,一种动态的根据优先级调度的策略,这里的优先级是由以下的公式计算得来。
响应比R = 周转时间 / 处理时间
总是选取相应比最高的进程执行。
6.Feedback
多级反馈队列,同时创建多个队列。优先级从高到低,从第一个队列调度,当第一个队列为空时,调度下一个队列。时间片则是优先级低的队列较大。
以上的进程调度算法通常都应用在实时系统以及交互式系统当中,其中应用在交互式系统中的有 Round Robin以及FeedBack。因为交互系统要保持对各个进程的响应,所以要设置时间片,使其可以更好的对各个进程进行响应。剩下的SJF,FCFS, SRTN,HRRN则是批处理中的调度算法,这类进程调度算法普遍吞吐量比较好(因为不用消耗资源切换时间片),但是响应性不太好。
进程优先级反转:
定义:一个低优先级进程持有一个高优先级进程所需要的资源,使得高优先级进程等待低优先级进程运行。
例子:设H是高优先级进程,L是低优先级进程, M是中优先级进程(CPU型)
场景:L进入临界区执行,之后被抢占;H也要进入临界区,失败,被阻塞;M上CPU执行,L无法执行所以H也无法执行
解决的思路是让低优先级的进程不被中断,通常有三种解决方法:
- 设置优先级上限,将优先级提到最高,让其无法被中断
- 优先级继承,让其拥有要高优先级,不被终端
- 使用中断禁止,直接不让中断