OS有许多调度算法,其中,有的适用于作业调度,有的适用于进程调度,还有的两者兼顾。
- 先来先服务调度算法(FCFS)
- 短作业优先调度算法(SJF)
- 优先级调度算法
- 高响应比优先调度算法
- 时间片轮转调度算法
- 多级反馈队列调度算法
1.先来先服务调度算法(最简单;适用进程调度和作业调度)
(1)算法描述:
在作业调度中,算法每一次从后备作业队列中,选择最先到达该队列的一个或者几个作业,将其调入内存,分配必要的资源, 创建进程并放入就绪队列。
在进程调度中,算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或者因为某种原因而阻塞时才释放处理机。
(2)优缺点:
1) 算法简单、但是效率低;
2)对长作业有利,对短作业不利(相对于sjf和高响应比优先调度);
3)有利于CPU繁忙型作业,不利于i/o繁忙型作业。
2.短作业优先调度算法(适用于进程调度和作业调度)
(1)算法描述:对短作业(进程优先调度的算法)。
短作业优先调度(SJF):从后备队列中选择一个或者若干个估计运行时间最短的作业进行调度,将其调入内存运行,
短进程优先调度(SPF):从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使其可以立即执行,直到完成或者发生某事件而阻塞时,才释放处理机。
(2)优缺点
1)对长作业不利;
2)该算法未考虑作业的紧迫程度,无法保证紧迫性作业会被及时处理;
3)算法描述中已经提及,作业的长短是根据用户所提供的估计执行时间确定的,而用户有可能有意无意地缩短其作业运行时间,就会导致该算法不一定真正意义上做到短作业优先调度。
最短作业优先算法的平均等待时间、平均周转时间最少。
3.优先级(权)调度算法(适用于进程调度、作业调度)
ps 算法中的优先级代表的是作业运行的紧迫程度。
算法描述:
作业调度中,优先级调度算法每次从后备作业队列中选择优先级最高的一个或者几个作业来,将其调入内存,分配必要的资源,创建进程并放入就绪队列。
进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使其投入运行。
算法分类:
- 根据新的更高级的进程能否抢占正在执行的进程,将调度算法分为:
(1)非剥夺式优先级调度算法。只有当前正在运行的进程由于自身原因(完成、等待事件)主动让出处理机,其他进程才可以运行。
(2)剥夺式优先级调度算法:当一个优先级更高的进程进入就绪队列后,直接抢占当前运行的处理机,把处理机分配给更重要或紧迫的进程。
-根据进程创建后优先级是否可变,将调度算法分为:
静态优先级调度算法:过程中优先级始终不变;
动态优先级调度算法:根据进程情况的变化调整优先级。(考虑因素一般是:进程占有CPU时间的长短、就绪进程等待CPU时间的长短)
ps:进程优先级设置的一般原则:
1)系统进程 大于 用户进程
2)交互性进程 大于 非交互型进程
3)I/O型进程 大于 计算型进程。