为什么不能使用SJF作为Linux的调度算法?
答案1
我突然想到了很多原因最短工作优先在任何通用系统中都是完全不允许的。
第一个问题就在名称中,您需要能够预先确定“最短”的工作。本地目录上的一个ls
可能相当短,但是例如 shell 进程的运行时间可以从几分之一秒(对于短脚本)到几周或几个月(对于我的交互式 shell)。操作系统无法知道,在许多情况下,实用程序本身也无法知道。更不用说您通常需要许多能够同时运行的交互式实用程序。 (另外,据我了解 SJF 的基本形式,它是非抢占式的,存在所有相关问题。)
当然,如果您将“作业”的概念分解为比整个流程更小的单元,那可能会更有用。但这并不真正符合流程的概念,流程无法发出新“工作”开始的信号。即使有,您仍然需要知道工作期限有多长。您可以相信进程的讲述,但多用户系统会导致一些不公平。或者您需要进行一些检查以确保广告的作业长度与实际作业长度匹配,但这现在开始听起来像一个真正的操作系统调度程序......
并不是说没有使用过类似的概念。据我记得,Linux 调度程序中有一些功能试图区分交互式进程(长时间空闲,但随后执行应具有高优先级的短期作业)和非交互式进程之间的区别那些(确实以稳定的速度工作)。