(1)何时调度:
① 在创建一个新进程时,需要决定是运行子进程还是父进程
② 在一个进程退出时,必须做出调度决策
③ 当一个进程阻塞在I/O和信号量上或者由于其他原因阻塞时,必须选择一个进程。
④ 当一个I/O中断发生时,必须做出选择。
前两个调度属于非抢占调度,后面两个是抢占调度。
(2)调度参数说明:
① CPU使用率:要求40%到90%
② 吞吐量:一个时间单元内所完成进程的数量。
③ 周转时间:从进程提交到进程完成的时间间隔称为周转时间。周转时间是所有时间 段之和,包括等待进入内存、在就绪队列中等待,在cpu上执行和I/O执行
④ 等待时间:CPU调度算法并不影响进程运行和执行I/O的时间量。它只影响进程在 就需队列中等待所花费的时间。
⑤ 响应时间:从提交请求到产生第一响应的时间。是开始响应所需要的时间,而不是 输出该响应所需要的时间。
调度目标:CPU使用率和吞吐量最大化,周转时间、等待时间和响应时间最小化
(3)调度算法分类:
调度算法可以划分三个环境里:批处理、交互式、实时。
1)批处理系统中的调度算法:
① 先来先服务调度(FCFS):
先来的进程先占有cpu,如果有新的进程来就把该进程放到队列末尾,如果正在运行进程被阻塞,也将其放到队列末尾,当cpu空闲时,立即选择队头的进程继续运行。
FCFS是非抢占式的调度。
优点:易于理解便于在程序中运用。
缺点:FCFS策略的平均等待时间相当长。
② 最短作业优先调度(SJF):
只有在所有作业同时运行的情形下,最段作业优先算法才是最优化的,可以使平均时间最短,SJF经常用于长期调度,SJF是非抢占式的调度算法。
③ 最短剩余时间优先调度:
调度总是选择剩余时间最短那个作业进行调度,是SJF的抢占式版本,这种方式可以使新的作业获得良好的服务。
2)交互式系统中的调度算法:
① 轮转调度(RR):
轮转法(RR)调度算法是专门为分时系统设计的。定义一个小时间单元,称为时间量或时间片。时间片通常为10ms到100ms。就绪队列作为循环队列处理。CPU调度程序循环就绪队列,为每个进程分配不超过一个时间片间隔的CPU。如果上下文切换时间约为时间片的10%,那么约10%的CPU时间会浪费在上下文切换上。
如果时间片设置的太短导致过多的进程切换,降低了CPU效率,而设计的太长又可能引起对短的请求响应时间变长。
② 优先级调度:
每个进程都有一个优先权与其关联,具有最高优先权的进程会被分配到CPU。具有相同优先权的进程按FCFS顺序调度。优先权可以通过内部或外部方式来定义。优先权调度可以使可抢占的或者非抢占的。优先权调度算法的一个主要问题是无穷阻塞。解决办法是老化,老化是一种技术,以逐渐增加在系统中等待很长时间的进程的优先权。
③ 多级队列调度:
所以进程被分配到几个队列类中,属于最高优先级的进程运行一个时间片,属于次高优先级类的进程运行两个时间片,以此类推。
④ 最短进程优先调度:
在交互式系统中,也可以用最短进程优先,把每一条命令的执行看成一个独立的“作业”,则我们可以通过首先运行最短作业来使响应时间最短。
⑤ 彩票调度:
基本思想是向进程提供各种系统资源的彩票,一旦需要做出一项调度,就抽出一张彩票,拥有该彩票的进程获得资源。给重要者给多的彩票,给优先级小的更少的彩票,每次获取的几率不一样。
⑥ 公平分享调度:
如果每个用户拥有的进程数目不一样,那么如果采用上面的调度算法,则每个用户得到的时间分配是不一样的,所以为了让每个用户得到的cpu时间一样,可以采用公平分享调度算法,让单位时间内运行每个用户的时间一样长。
3)实时系统中的调度算法:
实时系统通常分为硬实时和软实时:
① 硬实时:
系统必须在保证的时间内完成关键任务。通常,在提交进程时,同时有一条语句告诉系统用来完成或执行I/O所需要的时间
② 软实时:
要求关键进程要比其他较弱进程拥有更高的优先权,不是强制性。
实现软实时要求自习设计调度程序和操作系统的有关方面:
第一,系统必须有优先权调度,且实时进程必须有最高的优先权。实时进程的优先权不随时间而下降,尽管非实时进程的优先权可以。
第二,分配延迟必须小,分派程序停止一个进程而启动另一个进程执行所需要花费的时间成为分派延迟