欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:10417259       资源大小:654.36KB        全文页数:22页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1、广工大操作系统实验报告作业调度作业调度模拟程序一、实验目的本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。二、实验内容和要求为单道批处理系统设计一个作业调度程序(1)编写并调试一个单道处理系统的作业调度模拟程序。(2)作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。I. 先来先服务:就是每次调度都是从后备作业队列中,选择一个最先进入该队列的作业,将它调入内存,为它分配资源、创建进程,然后放入就绪队列,投入运行,一直运行到完成或发生某事件而阻塞

    2、后,才放弃处理。II. 最短作业优先:是从后备队列中选择一个估计运行时间最短的作业,将它调入内存运行并一直执行到完成,或发生某事件而被阻塞放弃处理时,再重新调度。III. 响应比高者优先:是通过计算出作业的响应比,按响应比高而进行调度的,其计算公式是:优先权(等待时间+要求服务时间)/要求服务时间.(3)由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。(4)每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等

    3、。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。(5)对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。三、实验主要仪器设备和材料硬件环境:IBM-PC或兼容机软件环境:C语言编程环境四、实验原理及设计方案调度也称dispatcher,这是内核的主要职责之一。一个良好的任务调度算法应该主要体现在以下几个方面:1.公平:保证每个进程得到合理的CPU 时间;2.高效:使CPU 保持忙碌状态,即总是有进程在CPU 上运行;3.响

    4、应时间:使交互用户的响应时间尽可能短;4.周转时间:使批处理用户等待输出的时间尽可能短;5.吞吐量:使单位时间内处理的进程尽可能多;很显然在任何操作系统中这几个目标不可能同时达到所以不同的。操作系统会在这几个方面中做出相应的取舍从而确定自己的调度算法,常用的处理机调度算法有:先来先服务FCFS、短作业优先SJF、优先级、时间片轮转法、多级队列法、多级反馈队列法。(1)先来先服务(FCFS)FCFS 是最简单的CPU 调度算法,即按进程到来的先后次序进行调度,这样在系统中等待时间最长的进程被优先调度,而不管其所需运行时间的长短。(2)作业优先SJF 算法是指当CPU 可供使用时SJF 算法把CP

    5、U 分给需要运行时间最短的进程。(3)时间片轮转调度法当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间叫做时间额度quantum ,然后切换给另一个任务也叫做时间片调度time slicing ,内核在满足以下条件时把CPU 控制权交给下一个就绪态的任务, 当前任务已无事可做,当前任务在时间片还没结束时已经完成了。轮转法主要是为分时系统设计的,其中时间片是一个重要的参数,不能取的过大或过小,通常为10 至100ms 数量级,就绪队列可以看成是一个环形队列,CPU 调度程序轮流地把CPU 分给就绪队列中地每个进程。五、流程图六、结果过程及截图主程序菜单 先来先服务算法 单

    6、道作业批处理系统初始化,输入三个作业,按照提示输入其时间,资源需求等:第一轮作业调度,如图显示了每个作业提交时间、需求时间、响应比、即时状态、主存需求、磁带机数量等,每次调度完毕输出作业完成时间、周转时间、带权周转时间、释放的资源:同样,第二轮调度,作业22222完成,如下显示:同样,第三轮调度,作业33333完成,如下显示:全部作业运行完毕,计算总的平均周转时间和带权周转时间: 短作业优先算法单道作业批处理系统初始化,输入三个作业,按照提示输入其时间,资源需求等:第一轮作业调度,如图显示了每个作业提交时间、需求时间、响应比、即时状态、主存需求、磁带机数量等,每次调度完毕输出作业完成时间、周转

    7、时间、带权周转时间、释放的资源:同样,第二轮调度,作业33333完成,输出作业完成时间、周转时间、带权周转时间、释放的资源:同样,第三轮调度,作业22222完成,输出作业完成时间、周转时间、带权周转时间、释放的资源:全部作业运行完毕,计算总的平均周转时间和带权周转时间: 响应比高者优先算法单道作业批处理系统初始化,输入三个作业,按照提示输入其时间,资源需求等:第一轮作业调度,如图显示了每个作业提交时间、需求时间、响应比、即时状态、主存需求、磁带机数量等,11111调度完毕输出作业完成时间、周转时间、带权周转时间、释放的资源:第二轮作业调度完毕,22222已经完成,输出作业完成时间、周转时间、带

    8、权周转时间、释放的资源:全部作业运行完毕,计算总的平均周转时间和带权周转时间:七、所遇困难的解决以及心得体会1)测试的数据必须是符合JCB模块中相同类型的,如在源码中式int类型的,而在测试的时候输入float类型就出错。2)各个库函数的运用需要掌握相应的功能,否则会照成代码冗余、繁杂、不优化等各种问题。3)通常在dos下运用的都是英文,而想要用汉字提示就必须考虑一些问题。在源码中我们用制表符(t)来控制提示,输出的数字是不能与之对齐的,所以我们要将“t”改成空格。4)在编写和调试程序时,为了尽快调通程序应该按照流程图的结构(保证流程图思路是对的情况下)来建立编程思路。八、源代码#includ

    9、e #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 memery5; /*主存需求*/ int machine; /*磁带机数量*/;struct jcb /* 定义作业控制块PCB */ char

    10、name10; 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() in

    11、t c; do system(cls); printf(ntt n); printf(ntt*tt); printf(nttt 1.先来先服务算法.); printf(nttt 2.最短作业优先算法.); printf(nttt 3.响应比高者优先算法); printf(nttt 0.退出程序.); printf(ntt*ttn); printf(ttt请输入选择所要操作(0-3):); scanf(%d,&c); system(cls); while(c3) ; switch(c) case 0: exit(0); break; case 1: Select=1; break; case 2

    12、: 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; ready=p; else /*否则插入队尾*/ first=ready; second=ready-link; while(second!=NULL) first=first-l

    13、ink; second=second-link; first-link=p; break; case 2: /*最短作业优先算法*/ if(ready=NULL)|(p-ntime)ntime) /*队首*/ p-link=ready; ready=p; else /* 往后搜索适当的位置插入*/ first=ready; second=first-link; while(second!=NULL) /*插入队伍中间*/ if(p-ntime)ntime) p-link=second; first-link=p; second=NULL; insert=1; else first=first-

    14、link; second=second-link; if(insert=0) first-link=p; /* 插入队尾*/ break; case 3: /*响应比高者优先算法*/ /*响应比=(等待时间+需求时间)/需求时间*/ temp=ready; p-super=(double)(Systemtime-p-ptime+p-ntime)/(double)(p-ntime); /*计算插入队列作业优先权*/ while(temp) /*计算就绪队列作业优先权*/ temp-super=(double)(Systemtime-temp-ptime+temp-ntime)/(double)(

    15、temp-ntime); temp=temp-link; /*响应比越大优先权越高*/ if(ready=NULL)|(p-super)(ready-ntime) /*队首*/ p-link=ready; ready=p; else /* 往后搜索适当的位置插入*/ first=ready; second=first-link; while(second!=NULL) /*插入队伍中间*/ if(p-super)(second-super) p-link=second; first-link=p; second=NULL; insert=1; else first=first-link; se

    16、cond=second-link; if(insert=0) first-link=p; /* 插入队尾*/ break; default: break; void input() /* 建立作业输入函数*/ int i,num; SOURCE *q; printf(nn请输入作业数目:); scanf(%d,&num); JCBnum+=num; /*总作业数*/ for(i=0;iname); getchar(); printf(请输入作业需要运行时间:); scanf(%d,&p-ntime); getchar(); printf(请输入作业主存资源需求:); scanf(%s,q-me

    17、mery); getchar(); printf(请输入作业磁带机数量需求:); scanf(%d,&q-machine); p-needsources=q; p-ptime=Systemtime; /*作业提交时间为系统默认时间*/ p-super=0; p-ftime=0; /*作业完成时间*/ p-state=W; p-link=NULL; sort(); void disp(JCB *pr) /*建立作业显示函数*/ printf(n 作业名 提交时间 需求时间 响应比 即时状态 主存需求 磁带机数量 n); printf( %st,pr-name); printf( %dt,pr-p

    18、time); printf( %dt,pr-ntime); printf( %.2ft,pr-super); printf( %ct,pr-state); printf( %st,pr-needsources-memery); printf( %dt,pr-needsources-machine); printf( n); void check() /* 建立作业查看函数 */ JCB* pr; printf(n *当前正在运行的作业*); /*显示当前运行作业*/ disp(run); pr=ready; printf(n *当前就绪队列状态*); /*显示就绪队列状态*/ while(pr

    19、!=NULL) disp(pr); pr=pr-link; void destroy() /*建立作业撤销函数)*/ JCB *pr=run; run-ftime=Systemtime; printf(ntt 【作业 %s 已完成.】n,run-name); printf(n 开始时间 完成时间 周转时间 带权周转时间 释放主存资源 释放磁带机数量n); printf( %dt,run-rtime); printf( %dt,run-ftime); printf( %dt,Systemtime-run-ptime); printf( %ft,(double)(Systemtime-run-pt

    20、ime)/(double)run-ntime); printf( %st,run-needsources-memery); printf( %dt,run-needsources-machine); printf( n); JCBtime += Systemtime-run-ptime; /*更新总周转时间*/ JCBtotaltime += JCBtime/(double)run-ntime; /*更新总带权周转时间*/ run=run-link; free(pr); pr=NULL; void running() /* 建立作业运行函数*/ run-rtime=Systemtime; /*

    21、作业开始时间为系统当前时间*/ Systemtime += run-ntime; /*更新系统时间*/ destroy(); void main() /*主函数*/ int h=0; char ch; display(); input(); Systemtime=0; /*初始系统时间*/ while(ready!=NULL) ch=getchar(); h+; printf(n 【作业调度轮次:%d】 n,h); run=ready; ready=ready-link; run-link=NULL; run-state=R; check(); running(); printf(ntt 按任一键继续.); ch=getchar(); printf(nnttt n); printf(ntt 作业数量 平均周转时间 带权周转时间 n); printf(tt %dt,JCBnum); printf( %ft,(double)JCBtime/(double)JCBnum); printf( %ft,(double)JCBtotaltime/(double)JCBnum); printf( n); ch=getchar();


    注意事项

    本文(广工大操作系统实验报告作业调度.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开