为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

广工大操作系统实验报告-作业调度

2020-03-08 17页 doc 104KB 13阅读

用户头像

is_037433

暂无简介

举报
广工大操作系统实验报告-作业调度作业调度模拟程序 一、 实验目的 本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。 二、 实验内容和要求 为单道批处理系统设计一个作业调度程序 (1)编写并调试一个单道处理系统的作业调度模拟程序。 (2)作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 I.     先来先服务:就是每次调度都是从后备作业队列中,选择一个最先进入该队列的作业,将它调入内存,为它分配资源、创建...
广工大操作系统实验报告-作业调度
作业调度模拟程序 一、 实验目的 本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。 二、 实验内容和要求 为单道批处理系统设计一个作业调度程序 (1)编写并调试一个单道处理系统的作业调度模拟程序。 (2)作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 I.     先来先服务:就是每次调度都是从后备作业队列中,选择一个最先进入该队列的作业,将它调入内存,为它分配资源、创建进程,然后放入就绪队列,投入运行,一直运行到完成或发生某事件而阻塞后,才放弃处理。 II.     最短作业优先:是从后备队列中选择一个估计运行时间最短的作业,将它调入内存运行并一直执行到完成,或发生某事件而被阻塞放弃处理时,再重新调度。 III.     响应比高者优先:是通过计算出作业的响应比,按响应比高而进行调度的,其计算公式是:优先权=(等待时间+要求服务时间)/要求服务时间. (3)由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。 (4)每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。 (5)对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。 三、 实验主要仪器设备和材料 硬件环境:IBM-PC或兼容机 软件环境:C语言编程环境 四、 实验原理及设计 调度也称dispatcher,这是内核的主要之一。一个良好的任务调度算法应该主要体现在以下几个方面: 1.公平:保证每个进程得到合理的CPU 时间;2.高效:使CPU 保持忙碌状态,即总是有进程在CPU 上运行;3.响应时间:使交互用户的响应时间尽可能短;4.周转时间:使批处理用户等待输出的时间尽可能短;5.吞吐量:使单位时间内处理的进程尽可能多;很显然在任何操作系统中这几个目标不可能同时达到所以不同的。 操作系统会在这几个方面中做出相应的取舍从而确定自己的调度算法,常用的处理机调度算法有:先来先服务FCFS、短作业优先SJF、优先级、时间片轮转法、多级队列法、多级反馈队列法。 (1)先来先服务(FCFS) FCFS 是最简单的CPU 调度算法,即按进程到来的先后次序进行调度,这样在系统中等待时间最长的进程被优先调度,而不管其所需运行时间的长短。 (2)作业优先SJF 算法 是指当CPU 可供使用时SJF 算法把CPU 分给需要运行时间最短的进程。 (3)时间片轮转调度法 当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间叫做时间额度quantum ,然后切换给另一个任务也叫做时间片调度time slicing ,内核在满足以下条件时把CPU 控制权交给下一个就绪态的任务, 当前任务已无事可做,当前任务在时间片还没结束时已经完成了。轮转法主要是为分时系统设计的,其中时间片是一个重要的参数,不能取的过大或过小,通常为10 至100ms 数量级,就绪队列可以看成是一个环形队列,CPU 调度程序轮流地把CPU 分给就绪队列中地每个进程。 五、 图 六、 结果过程及截图 主程序菜单 《先来先服务算法》 单道作业批处理系统初始化,输入三个作业,按照提示输入其时间,资源需求等: 第一轮作业调度,如图显示了每个作业提交时间、需求时间、响应比、即时状态、主存需求、磁带机数量等,每次调度完毕输出作业完成时间、周转时间、带权周转时间、释放的资源: 同样,第二轮调度,作业22222完成,如下显示: 同样,第三轮调度,作业33333完成,如下显示: 全部作业运行完毕,计算总的平均周转时间和带权周转时间: 《短作业优先算法》 单道作业批处理系统初始化,输入三个作业,按照提示输入其时间,资源需求等: 第一轮作业调度,如图显示了每个作业提交时间、需求时间、响应比、即时状态、主存需求、磁带机数量等,每次调度完毕输出作业完成时间、周转时间、带权周转时间、释放的资源: 同样,第二轮调度,作业33333完成,输出作业完成时间、周转时间、带权周转时间、释放的资源: 同样,第三轮调度,作业22222完成,输出作业完成时间、周转时间、带权周转时间、释放的资源: 全部作业运行完毕,计算总的平均周转时间和带权周转时间: 《响应比高者优先算法》 单道作业批处理系统初始化,输入三个作业,按照提示输入其时间,资源需求等: 第一轮作业调度,如图显示了每个作业提交时间、需求时间、响应比、即时状态、主存需求、磁带机数量等,11111调度完毕输出作业完成时间、周转时间、带权周转时间、释放的资源: 第二轮作业调度完毕,22222已经完成,输出作业完成时间、周转时间、带权周转时间、释放的资源: 全部作业运行完毕,计算总的平均周转时间和带权周转时间: 七、 所遇困难的解决以及心得体会 1)测试的数据必须是符合JCB模块中相同类型的,如在源码中式int类型的,而在测试的时候输入float类型就出错。  2)各个库函数的运用需要掌握相应的功能,否则会照成代码冗余、繁杂、不优化等各种问。 3)通常在dos下运用的都是英文,而想要用汉字提示就必须考虑一些问题。在源码中我们用制表符(\t)来控制提示,输出的数字是不能与之对齐的,所以我们要将“\t”改成空格。  4)在编写和调试程序时,为了尽快调通程序应该按照流程图的结构(保证流程图思路是对的情况下)来建立编程思路。 八、 源代码 #include #include #include #define getpch(type) (type*)malloc(sizeof(type)) int Select; int Systemtime = 0;        /*系统初始时间*/ int JCBnum = 0;            /*总作业数*/ int JCBtime = 0;            /*总周转时间*/ double JCBtotaltime =0;    /*总带权周转时间*/ struct source{              /*定义资源需求结构*/ char    memery[5];      /*主存需求*/ int    machine;        /*磁带机数量*/ }; struct jcb {                /* 定义作业控制块PCB */ char  name[10]; char  state;          /* 状态 */ double super;          /* 响应比优先权 */ int    ntime;          /* 需要运行时间 */ int    rtime;          /* 开始运行时间 */ int    ptime;          /*提交时间*/ int    ftime;          /*完成时间*/ source *needsources;    /*资源需求链*/ struct jcb* link;      /* 下一个作业控制块的地址 */ }*ready=NULL,*run,*p; typedef struct jcb JCB; typedef struct source SOURCE; void display() { int c; do { system("cls"); printf("\n\t\t      <<单道批处理系统作业调度演示>>\n"); printf("\n\t\t*********************************************\t\t"); printf("\n\t\t\t  1.先来先服务算法."); printf("\n\t\t\t  2.最短作业优先算法."); printf("\n\t\t\t  3.响应比高者优先算法"); printf("\n\t\t\t  0.退出程序."); printf("\n\t\t*********************************************\t\t\n"); printf("\t\t\t请输入选择所要操作(0-3):"); scanf("%d",&c); system("cls"); }while(c<0||c>3) ; switch(c) { case 0: exit(0); break; case 1: Select=1; break; case 2: Select=2; break; case 3: Select=3; break; default: break; } } void sort() /* 建立对进程进行优先级排列函数*/ { JCB *first, *second,*temp; int insert=0; switch(Select) { case 1:                  /*先来先去服务算法*/ if(ready==NULL)    /*队首空插入队首*/ { p->link=ready; 继续阅读
/
本文档为【广工大操作系统实验报告-作业调度】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索