实验项作业调度 目名称 一、实验目的: 1、通过模拟作业调度算法的设计加深对作业管理基本原理的理解。 实验目2、深入了解批处理系统如何组织作业、管理作业和调度作业。 的及要求 3、掌握作业调度算法。 二、实验要求: 1、编写程序完成实验内容; 2、对测试数据进行分析; 3、撰写实验报告。 1、设计可用于该实验的作业控制块; 2、动态或静态创建多个作业; 实验 内容 3、模拟先来先服务调度算法和短作业优先调度算法。 3、调度所创建的作业并显示调度结果(要求至少显示出各作业的到达时间,服务时间,开始时间,完成时间,周转时间和带权周转时间); 3、比较两种调度算法的优劣。 一、作业 作业(Job)是系统为完成一个用户的计算任务(或一次事物处理)所做的工作总和,它由程序、数据和作业说明书三部分组成,系统根据该说明书来对程序的运行进行控制。在批处理系统中,是以作业为基本单位从外存调入内存的。 二、作业控制块JCB(Job Control Block) 实验 原理 作业控制块JCB是记录与该作业有关的各种信息的登记表。为了管理和调度作业,在多道批处理系统中为每个作业设置了一个作业控制块,如同进程控制块是进程在系统中存在的标志一样,它是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息。在JCB中所包含的内容因系统而异,通常应包含的内容有:作业标识、用户名称、用户帐户、作业类型(CPU 繁忙型、I/O 繁忙型、批量型、终端型)、作业状态、调度信息(优先级、作业已运行时间)、资源需求(预计运行时间、要求内存大小、要求I/O设备的类型和数量等)、进入系统时间、开始处理时间、作业完成时间、作业退出时间、资源使用情况等。 三、作业调度 作业调度的主要功能是根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程插入就绪队列,准备执行。 四、选择调度算法的准则 1).面向用户的准则 (1) 周转时间短。通常把周转时间的长短作为评价批处理系统的性能、选择作业调度方式与算法的重要准则之一。所谓周转时间,是指从作业被提交给系统开始,到作业完成为止的这段时间间隔(称为作业周转时间)。它包括四部分时间:作业在外存后备队列上等待(作业)调度的时间,进程在就绪队列上等待进程调度的时间,进程在CPU上执行的时间,以及进程等待I/O操作完成的时间。其中的后三项在一个作业的整个处理过程中可能会发生多次。 对每个用户而言,都希望自己作业的周转时间最短。但作为计算机系统的管理者,则总是希望能使平均周转时间最短,这不仅会有效地提高系统资源的利用率,而且还可使大多数用户都感到满意。可把平均周转时间描述为: 1nTTini1作业的周转时间T与系统为它提供服务的时间Ts之比,即W = T/Ts,称为带权周转时间,而平均带权周转时间则可表示为: 1nTiWni1Ts(2) 响应时间快。常把响应时间的长短用来评价分时系统的性能,这是选择分时系统中进程调度算法的重要准则之一。所谓响应时间,是从用户通过键盘提交一个请求开始,直至系统首次产生响应为止的时间,或者说,直到屏幕上显示出结果为止的一段时间间隔。它包括三部分时间:从键盘输入的请求信息传送到处理机的时间,处理机对请求信息进行处理的时间,以及将所形成的响应信息回送到终端显示器的时间。 (3) 截止时间的保证。这是评价实时系统性能的重要指标,因而是选择实时调度算法的重要准则。所谓截止时间,是指某任务必须开始执行的最迟时间,或必须完成的最迟时间。对于严格的实时系统,其调度方式和调度算法必须能保证这一点,否则将可能造成难以预料的后果。 (4) 优先权准则。在批处理、分时和实时系统中选择调度算法时,都可遵循优先权准则,以便让某些紧急的作业能得到及时处理。在要求较严格的场合,往往还须选择抢占式调度方式,才能保证紧急作业得到及时处理。 2).面向系统的准则 这是为了满足系统要求而应遵循的一些准则。其中,较重要的有以下几点: (1) 系统吞吐量高。这是用于评价批处理系统性能的另一个重要指标,因而是选择批处理作业调度的重要准则。由于吞吐量是指在单位时间内系统所完成的作业数,因而它与批处理作业的平均长度具有密切关系。对于大型作业,一般吞吐量约为每小时一道作业;对于中、小型作业,其吞吐量则可能达到数十道作业之多。作业调度的方式和算法对吞吐量的大小也将产生较大影响。事实上,对于同一批作业,若采用了较好的调度方式和算法,则可显著地提高系统的吞吐量 (2) 处理机利用率好。对于大、中型多用户系统,由于CPU价格十分昂贵,致使处理机的利用率成为衡量系统性能的十分重要的指标;而调度方式和算法对处理机的利用率起着十分重要的作用。在实际系统中,CPU的利用率一般在40%(系统负荷较轻)到90%之间。在大、中型系统中,在选择调度方式和算法时,应考虑到这一准则。但对于单用户微机或某些实时系统,则此准则就不那么重要了。 (3) 各类资源的平衡利用。在大、中型系统中,不仅要使处理机的利用率高,而且还应能有效地利用其它各类资源,如内存、外存和I/O设备等。选择适当的调度方式和算法可以保持系统中各类资源都处于忙碌状态。但对于微型机和某些实时系统而言,该准则并不重要。 五、作业调度算法 1).先来先服务调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,每次调度都从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。 2).短作业优先调度算法 短作业优先调度算法SJF,是指对短作业优先调度的算法。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。 实验 步骤 一、根据调度算法设计流程图: 二、设计算法源码: 1.先来先服务算法: void fcfs (){ /*先来先服务调试算法*/ JCB *min; int i,iden; for(i=0;i
state=='W'&&p->ts<=time) /*保证到达作业提交的时间*/ if(iden){ min=p;iden=0; } else if (p->tsts)min=p; /*选出所需时间最短的作业*/ } p=p->link; }while (p!=NULL); if (iden){ } else{ p=min; /*指针回赋*/ } running(p); /*调用作业运行函数*/ i--; printf(\"\\ntime=%d:\无作业提交...等待...ime++; /*更新系统时间*/ if(time>100){printf(\"\\n运行时间太长...错误\"); getch(); exit(1); /*强制退出*/ } } 2.短作业优先调度算法: void sjf(){ /*最短时间优先调试算法*/ JCB *min; int i,iden; for(i=0;istate=='W'&&p->ts<=time) /*保证到达作业提交的时间*/ if(iden){ min=p;iden=0; } else if (p->ntimentime)min=p; /*选出所需时间最短的作业*/ p=p->link; }while (p!=NULL); if(iden){ /*\"标志\"位有效,说明现出了所需时间最短的作业*/ } } i--; printf(\"\\ntime=%d:\无作业提交...等待...ime++; /*更新系统时间*/ if(time>100) /*系统时间超过100个时间单位,认为时间过长,退出*/ { printf(\"\\n运行时间太长...错误\"); getch(); exit(1); /*强制退出算法*/ else{ p=min; /*指针回赋*/ running(p); /*调用作业运行函数*/ } } } 三、整合完成所有程序并实现作业调度(见源代码)。 四、进行调试阶段,对程序修改优化,进行数据测试。 五、实验结果分析 六、总结 实验 WindowsXP和CV++6.0集成开发环境 环境 实验运行的初始界面: 实验结果与分析 测试数据: a1 1 2 a1 a2 2 3 a2 运行结果: 进行多次循环录入: 返回算法选择界面: 测试数据: b1 2 4 b1 b2 1 3 b2 运行结果: 实验分析和总结: 1)测试的数据必须是符合JCB模块中相同类型的,如在源码中式int类型的,而在测试的时候输入float类型就出错。 2)各个库函数的运用需要掌握相应的功能,否则会照成代码冗余、繁杂、不优化等各种问题。 3)通常在dos下运用的都是英文,而想要用汉字提示就必须考虑一些问题。在源码中我们用制表符(\)来控制提示,输出的数字是不能与之对齐的,所以我们要将“\”改成空格。 4)这编写和调试程序时,为了尽快调通程序应该按照流程图的结构(保证流程图思路是对的情况下)来建立编程思路。 5)此程序也借用了现有的一些代码,并且它还不是最优化的,它还可以进行改进和优化,比如:在回调函数的引用时跳到了另一个页面,见下图: 继续Enter的时候就到下一页: 而不是在同一页面。 6)总之,在编程旅途中是一个很艰辛的过程,要在这里开拓一片蓝天就必须有孜孜不倦的精神。