调度的概念
在多道程序系统中,进程的数量往往多于处理机的个数。操作系统需要按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发的执行。
一个作业从提交开始到完成,往往要经历以下三级调度:
1)高级调度(作业调度)
高级调度按照一定的原则从外存中处于后备队列的作业中挑选一个(或多个)进程,给其分配所必须的资源,并建立相应的进程,让它们获得竞争处理机的权利。
简而言之,就是将一个进程从 无 --> 挂起态 --> 就绪态 的过程。
2)中级调度(内存调度)
中级调度是将那些暂时不能运行的进程调度至外存等待,此时进程的状态称为挂起态。当它们已经具备运行条件且内存有稍有空闲时,在将其重新调入内存,并将其修改为就绪态,挂在就绪队列上等待。因此引入中级调度的目的是提高内存利用率和系统吞吐量。
简而言之,就是将一个进程从 就绪态 --> 挂起态 --> 就绪态的过程。
3)低级调度(进程调度)
按照某种算法,从就绪队列中选取一个进程,将处理机分配给它。进程调度是最基本的一种调度,在各个操作系统中都必须要配置这种调度。
简而言之,就是将一个进程从 就绪态 --> 运行态 的过程。
三级调度的关系
作业调度从外存的后备队列中选择一批作业进入内存,为其建立进程,将其送进就绪队列;
进程调度从就绪队列中选出一个进程,将其状态修改为运行态,将CPU分配给它;
内存调度是为了提高内存的利用率,将那些暂时不能运行的进程挂起来。
调度算法的标准
1)CPU利用率
调度算法应当尽可能使CPU保持“忙”的状态。
2)系统吞吐量
表示单位时间内CPU完成作业的数量。单位:完成个数/秒。
3)周转时间
指从作业提交到作业完成所经历的时间,包括作业等待、在就绪队列中排队、在处理机上运行以及输入/输出操作所花费时间的总和。
4)带权周转时间
是指周转时间与实际运行时间的比值。
5)响应时间
指从用户提交请求到系统首次产生响应所用的时间。在交互式系统中,周转时间不是最好的评价准则,一般采用响应时间作为衡量调度算法的重要准则之一。
例如点开淘宝,算法A的周转时间是3秒,响应时间也是3秒,即整个页面完全加载后才能显示给用户;而算法B的周转时间是5秒,而响应时间只需要1秒显然更优,剩下的内容后台继续加载。用户接收到第一次响应的时间越快满意度就越高。
调度的时机
调度程序是操作系统内核程序。调度的顺序应当是:请求调度时间发生 --> 运行调度程序选择进程 --> 发生进程切换。但在实际的操作系统内核程序运行期间,有以下3种情况不能进行进程的调度与切换:
1.处理中断的过程中。中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源;
2.在内核临界区中。进入临界区后,需要独占式的访问,理论上需要加锁已防止其他并行进程进入,不应被调度;
3.原子操作过程中。在原子过程中, 连中断都需要屏蔽,更不应该进行进程调度与切换,如加解锁、中断现场保护、恢复等。
一直到上述操作结束后,操作系统才能进行响应的调度与切换。
进程调度方式:
1.非抢占式调度。当前运行进程的时间片用完或者进入阻塞态才把处理器分配给其他进程。
2.抢占式调度。允许调度程序根据某种原则去暂停正在执行的进程。
下图为调度的切换与过程图示。
闲逛进程:在进程切换时,如果系统中没有就绪进程,就会调度闲逛进程运行,PC寄存器一直在+1,总是在访存取指,并在执行过程中不停的测试中断。