一、长期调度程序和短期调度程序
批处理系统中进程更多的被提交而不是马上执行。这些程序放在大容量存储设备的缓冲池中。长期调度程序(作业调度程序)从该缓冲池中选择进程并装入内存准备执行。
短期调度程序(CPU调度程序)从准备执行的进程中选择进程,并为它分配CPU。这两个调度程序的主要差别是他们的执行频率。一般I/O为主的进程比CPU为主的进程执行时间更长,长期调度程序应该合理的选择以I/O为主和CPU为主的组合进程。
二、进程调度的方式
所谓进程调度方式是指当某一个进程正在处理机上运行时,若有某个更为紧迫、重要的进程需要处理,即为有优先级别更高的进程进入队列,此时该如何分配处理机。通常有两种调度方法:
- 非抢站式(非剥得式)调度 指当一个进程在处理机上运行时,即使有某个更为重要、紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到它执行完或者阻塞时才把处理机分配给更为紧迫、重要的进程
- 抢占式(剥得式)调度 指当一个进程在处理机上运行时,即使有某个更为重要、紧迫的进程进入就绪队列,则立即暂停正在执行的进程,并将处理机分配给更为紧迫、重要的进程
两种调度方式的比较: 非抢占式调度方法的优点是实现简单、系统开销小、适用于大多数的批处理程序,但是不可以用于分时系统和大多数的实时系统。采用抢占式调度方法可以提高系统的吞吐率和响应效率,但是必须遵寻一定的原则:优先权、短进程优先等。
三、进程调度准则
不同调度算法具有不同的特性,在考虑调度算法的性能时,需要基本准则进行评价:
- CPU利用率
- 系统吞吐量
- 周转时间
- 等待时间
- 响应时间
四、调度算法
- 先来先服务(FCFS)调度算法 该算法用于作业调度也可用于进程调度,FCFS算法属于非抢占调度算法,主要特点是:算法简单、但效率底,对长作业有利,而不利于短作业。
- 短作业优先(SJF)调度算法 短作业优先调度算法是指对段作业(进程)优先调度的算法。SJF也有以下特点:
- 该算法对长作业不利,可能使得长作业长期不被调度,出现讥饿现象。
- 该算法完全没有考虑作业的紧迫程度,因而不能保证紧迫性的作业被及时处理。
- SJF调度算法的平均等待时间和平均周转时间最少。
- 优先级调度算法 在作业调度中,优先级调度算法每次从后备作业队列中选择优先级别最高的一个或者几个将他们装入内存,并分配资源创建进程放入就绪队列。在进程调度中,优先级调度算法从就绪队列中选择优先级别最高的进程,为其分配处理机,使之运行。根据调度方式,可以将优先级调度算法分为:
- 非抢占式优先级调度算法。
- 抢占式优先级调度算法。
- 时间片轮转调度算法 时间片轮转算法主要用于分时系统。进程调度算法按照先到先服务的规则选择就绪队列的第一个进程执行,但是仅能执行一个时间片,当使用完时间片后,即使进程没有完成运行也必须释放CPU,返回到就绪队列的尾部。该算法主要特点是时间片的长短对系统性能影响很大:
- 如果时间片比较长,则时间片轮转调度算法就退化为FCFS调度算法。
- 如果时间片比较短,那么处理机将在进程间过于频繁的切换,系统开销很大。
-
多级队列调度算法 它将就绪队列分为多个独立的队列,例如系统进程队列、交互进程队列...。根据进程属性,一个进程被永久的分配到一个队列中,每个队列都有自己的调度算法。另外,队列之间必须有调度,通常采用固定优先级抢占调度。每个队列与更低层队列相比具有绝对的优先级。每个进程永远只在一种队列中,这种调度的优点是低调度开销,缺点是不够灵活。
-
多级反馈队列调度算法 它的主要思想是根据不同的CPU区间特点来区分进程,如果进程使用过多的CPU时间,那么他会被转移到更低优先级队列,此外在较低优先级队列中等待时间较长的进程会被移动到更高优先级队列。这种调度方式可以阻止讥饿的发生。