目录
最短作业优先调度(shortest-job-first scheduling,SJF)
优先级调度算法(priority scheduling algorithm)
多级反馈队列调度(Multilevel Feedback-Queue Scheduling)
多处理器调度(Multiple-Processor Scheduling)
具有多道程序设计的操作系统必须有CPU调用这一机制。通过在进程之间切换 CPU ,操作系统可以提高计算机的执行效率。 如果某个操作系统支持线程,那么该系统的系统调度操作的是内核线程,而不是进程。
CPU调度:单处理器系统每次只允许一个进程运行,多道程序是为了是的CPU在任何时候都有某些进程运行,以使得CPU使用率最大化,采用的方式是当一个进程必须等待时,操作系统会从该进程拿走CPU使用权,将CPU使用权交给其他进程;
CPU-I/O 区间周期
CPU调度的成功与否取决于进程是否观察到的以下属性:
- 进程执行包括一个CPU执行周期和I/O等待。
- 进程在这两种状态之间切换。
一个进程的执行是从CPU区间(CPU burst)开始,然后是I/O区间(I/O burst)。接着是另外一个CPU区间,在然后是另外一个I/O区间,如此进行下去,最终,最后的CPU区间通过系统请求中止执行。
经过大量的CPU区间的长度测试。发现具有大量短CPU区间和少量长CPU区间。I/O约束程序通常具有很多短CPU区间。CPU约束程序可能有少量的长CPU区间。这种分布有助于选择合适的CPU调度算法。
CPU程序调度
每当CPU空闲时,操作系统就必须从就绪队列中(75P)选择一个进程来执行。进程选择是由短期调度程序(short-term scheduler)或CPU调度程序(77P)从内存中准备执行的进程中选择一个能够执行的进程,并为之分配CPU。
就绪队列不必是先进先出(FIFO)队列,也可为优先队列、树或简单的无序链表。不过队列中所有的进程都要排队以等待在CPU上运行。记录队列中的进程通常为进程控制块(PCB)。
抢占调度
CPU调度的决策在下列情况下会发生:
- 当一个进程从运行切换到等待状态(如:I/O请求,或者调用wait等待一个子进程的终止)
- 当一个进程从运行状态切换到就绪状态(如:出现中断)
- 当一个进程从等待状态切换到就绪状态(如:I/O完成)
- 当一个进程终止时
对于第1和4两种情况,没有选择而只有调度。一个新进程(如果就绪队列中已有一个进程存在)必须被选择执行。对于第2和第3两种情况,可以进行选择。
当调度只能发生在第1和4两种情况下时,称调度是非抢占的(nonpreemptive)或协作的(cooperative);否则,称调度方案为抢占的(preemptive)。如果采用非抢占调度,一旦CPU分配给一个进程,那么该进程会一直使用CPU直到进程终止或切换到等待状态。
不幸的是,抢占调度对访问共享数据是有代价(如加锁)的,需要新的机制来协调对共享数据的访问。
分派程序
分派程序(dispatch)是一个模块,用来将CPU的控制交给由短期调度程序选择的进程。
其功能包括:
- 切换上下文
- 切换到用户模式
- 跳转到用户程序的合适位置,以重新启动程序。
分派程序停止一个进程而启动另一个所花的时间成为分派延迟(dispatch latency)。