前言
在多道程序环境下,内存中存在着多个进程,其数目往往多于处理机数目。这就要求系统能按照某种算法,动态的将处理机分配给处于就绪状态的的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。对于大型系统运行时的性能,如:系统吞吐量、资源利用率、作业周转时间或响应的及时性等,在很大程度上都取决于处理机调度性能的好坏。因此,处理机调度便成为操作系统中至关重要的部分。
在多道程序系统中,调度的实质是一种资源分配,它是决定或安排事务发展顺序的策略。处理机调度是对处理机资源进行分配。处理机调度算法是根据处理机分配策略所规定的处理机分配算法。这些在后面都会介绍到。
处理机调度的层次和调度算法的目标
处理机调度的层次
- 高级调度(外存 ------> 内存)
高级调度又称为长程调度或作业调度,它的调度对象是作业,它的主要功能是根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进程,分配必要的资源,并将它们放入就绪队列。高级调度主要用于多道批处理系统中,在分时和实时系统中不设置高级调度。 - 低级调度(为进程分配处理机)
低级调度又称为进程调度或短程调度,它的调度对象是进程(或内核级线程)。它的主要功能就是根据某种算法,决定将处理机分配给就绪队列中的某一个进程,并由分派程序进行分配。进程调度是最基本的一种调度,在多道批处理、分时和实时三种类型的OS中,都必须配置这级调度。 - 中级调度(交换调度,交换内存和外存的进程)
中级调度又称为内存调度,引入中级调度的只要目的是,提高内存利用率和系统吞吐量。它的原理为,将那些暂时不能运行的进程,调至外存等待,此时,进程的状态称为就绪驻外存状态(或挂起状态),当它们具备运行条件,且内存中又稍有空闲时,再将外存上已具备运行条件的就绪进程调入内存,并修改其为就绪状态,挂在就绪队列中等待处理机的分配。
中级调度实质上就是存储器管理中的对换功能:对换
是指将内存中暂时不能运行的进程或暂时不用的进程和数据换到外存上,以便腾出足够多的内存空间,再把已经具备运行条件的进程或进程所需要的内存和数据换入内存。这样的操作可以有效的提高内存的利用率和系统的吞吐量。
处理机调度算法的目标
- 处理机调度算法的共同目标
a. 提高资源利用率
提高资源利用率其实很好理解,即当系统运行时,应该让系统中的处理机和其它资源都尽可能的保持忙碌状态。
举个例子来说就是,比如要计算1 ~ N
的和,并在屏幕上输出1 ~ N
,我们可以用循环的方法去实现它,当它需要计算时,它会用到处理机的运算器,当它需要输出时,它占用的处理机就是空闲的,它在等待本次输出完成后,才进行下一次循环,如果我们不采用处理机调度算法对它进行处理,那么,在输出数据的这段时间内,处理机资源就白白的浪费掉了。
在资源利用率中,处理机的利用率可以用以下方法计算:
cpu利用率 = (cpu的有效工作时间) / (cpu有效工作时间 + cpu空闲等待时间)
以上述例子来说,其实输出数据的时间是远远大于cpu运算时间的,因此,如果在输出数据时,cpu进行空闲等待,那么它的资源利用率是极其低下的。
b. 保证公平性
保证公平性,简单来说就是保证每个进程都能获得合理的cpu时间,不会发生进程饥饿现象。
所谓进程饥饿
,就是指当等待时间给进程推进和响应带来明显影响。当饥饿到一定程度的进程在等待到即使完成也无实际意义的时候称为饥饿死亡。简单来说就是,假设: 你想打开电脑桌面上的我的电脑 为进程 A ,按理来说进程 A 是与用户交互的,应该优先执行,但是在进程 A 前面还有很多进程需要执行,所以在很长的时间之后,进程 A 才会执行。这就会导致进程 A 的饥饿甚至饿死。
公平性是相对的,对于相同类型的进程,应该获得相同的服务,对于不同类型的服务,需要根据其紧急程度和重要程度去提供不同的服务。就以上面的例子来说,与用户交互的进程的优先级高,所以在必要条件下,可能是先将进程A执行完,才会去执行其他的进程。
c. 保持系统资源使用的平衡性
平衡性是指,在系统中可能有多种类型的进程(比如:计算下进程、I/O型进程),为了使cpu和各外部设备都能保持忙碌状态,调度算法应尽可能的保证系统资源使用的平衡性。
d. 策略强制执行
对于有的策略(如安全策略等),只要需要,就必须予以准确执行,即使会造成某些工作的延迟也要执行。 - 批处理系统的目标
a. 平均周转时间短
周转时间
就是作业被提交给系统开始,到作业完成的这段时间间隔(作业周转时间)。也就是从作业到达,到作业完成所花的时间。它包括四部分: ①作业在后备队列上等待(作业)调度的时间 ②进程在就绪队列上等待进程调度的时间 ③进程在cpu上执行的时间 ④进程等待I / O操作完成的时间。它们的后三项可能在一个作业的处理过程中发生多次。
对于操作系统来说,它总是希望系统的平均周转时间
最短(所有进程周转时间和 / 进程数),因此,应该使作业的周转时间和平均周转时间尽可能的短。否则,就会导致有的作业等待时间过长。为了进一步反映调度的性能,还能使用带权周转时间
(周转时间 / 服务时间) 和平均带权周转时间
(带权周转时间和 / 进程数)。
b. 系统吞吐量高
系统吞吐量
就是指单位时间内系统所完成的进程数,因此它与多道批处理作业的平均长度有关。
c. 处理机利用率高 - 分时系统的目标
a. 响应时间快
响应时间
是指从用户提交一个请求开始,到屏幕上显示出处理结果为止的一段时间。它包括三部分:①请求从键盘输入开始,到它传输到处理机的时间。 ②处理机对请求信息进行处理的时间。 ③将所形成的响应信息输出到显示器的时间。简单来说就是:输入请求时间 + 处理时间 + 输出结果时间。
b. 均衡性
均衡性
是指系统响应时间的快慢与请求服务的复杂性相对应。 - 实时系统的目标
a. 截止时间的保证
截止时间的保证
是指任务必须开始执行的最迟时间,或必须完成的最迟时间。对于严格的实时系统,它的调度方式和调度算法必须保证这一点,否则就有可能造成难以预料的后果。对于实时系统的调度算法而言,它的一个主要目标就是保证任务实时性对截止时间的要求。
b. 可预测性
可预测性
是指当前请求和下一请求的联系是可预测的,操作系统可以并发的处理当前请求和下一请求,这样就可以提高它的实时行。