版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编写并调试一个多道程序系统的作业调度模拟程序。作业调度算法:采用基于优先级的作业调度。可以参考课本中的例子自行设计。#include<stdio.h>#include<stdlib.h>#definegetjch(type)(type*)malloc(sizeof(type))#defineN10structjcb{/*定义作业控制块PCB*/ charname[10]; floatneedtime;/*运行时间*/ floatarrivetime;/*提交时刻*/ floatstorage[N];/*系统资源*/ structjcb*link;}*ready=NULL,*pb=NULL,*p;typedefstructjcbJCB;floatTc,Ti,Wi,T=0;/*完成时刻,周转时间,带权周转时间,时间量*/floatTiSum=0,WiSum=0;/*平均周转时间,带权a平均周转时间*/floatsource[N];intn;voidinput();/*输入作业信息*/intspace();/*返回就绪队列中作业的数目*/voidfcfs();/*先来先服务算法*/voiddisp(JCB*pr);/*显示相应的作业*/voidrunning();/*运行作业组*/voiddestroy();/*撤销作业*/voidinput()/*建立作业控制块函数*/{ inti,k,num; printf("请输入所拥有的资源种类:"); scanf("%d",&n); printf("输入系统所拥有资源数:\n"); for(i=0;i<n;i++) { printf("资源[%d]:",i); scanf("%f",&source[i]); } printf("\n输入作业数量:"); scanf("%d",&num); for(i=0;i<num;i++) { printf("\n作业号[%d]:\n",i); p=getjch(JCB); printf("输入作业名:"); scanf("%s",p->name); printf("输入提交时间:"); scanf("%f",&p->arrivetime); printf("输入运行时间:"); scanf("%f",&p->needtime); printf("输入所需资源数:\n"); for(k=0;k<n;k++) { printf("资源[%d]:",i); scanf("%f",&p->storage[k]); } printf("\n"); p->link=NULL; fcfs(); }}intspace(){ intl=0; JCB*pr=ready; while(pr!=NULL) { l++; pr=pr->link; } return(l);}voiddisp(JCB*pr)/*建立作业显示函数,用于显示当前作业*/{ inti; printf("\n%6s\t%6s\t%6s\t","作业名","运行时间","提交时刻"); for(i=0;i<n;i++) printf("资源[%d]\t",i); printf("\n%6s\t%6.2f\t\t%6.2f\t",pr->name,pr->needtime,pr->arrivetime); for(i=0;i<n;i++) printf("\t%6.2f",pr->storage[i]); printf("\n"); }voiddestroy()/*建立作业撤消函数(作业运行结束,撤消作业)*/{ free(p);}voidcheck(){ JCB*first,*fir,*p; intflag=0,i,test=0; first=pb; while(first&&(T>=first->arrivetime)&&(flag==0)) { for(i=0;i<n;i++) { if(source[i]>=first->storage[i]) source[i]=source[i]-first->storage[i]; else test=1; } if(test==0) { p=first; first=first->link; p->link=NULL; if(ready==NULL) ready=p; else { fir=ready; while(fir->link!=NULL) { fir=fir->link; } fir->link=p; } } else flag=1; } pb=first;}voidfcfs(){ JCB*first,*second; intins=0; if((pb==NULL)||(p->arrivetime<pb->arrivetime)) { p->link=pb; pb=p; } else { first=pb; second=first->link; while(second!=NULL) { if(p->arrivetime<second->arrivetime) { p->link=second; second=NULL; first->link=p; ins=1; } else { first=first->link; second=second->link; } } if(ins==0) first->link=p; }}voidrunning(){ JCB*pr; inti; printf("正在运行的作业是:%s\n",p->name); disp(p); if(ready!=NULL) { printf("就绪队列如下:\n"); pr=ready; while(pr!=NULL) { disp(pr); pr=pr->link; } } else printf("就绪队列为空队列!\n"); if(pb!=NULL) { printf("后备队列如下:\n"); pr=pb; while(pr!=NULL) { disp(pr); pr=pr->link; } } else printf("后备队列为空队列!\n"); printf("作业%s的开始运行时刻T:%4.2f\n",p->name,T); Tc=T+p->needtime; T=Tc; Ti=Tc-p->arrivetime; Wi=Ti/(p->needtime); for(i=0;i<n;i++) source[i]=source[i]+p->storage[i]; printf("完成时刻Tc:%4.2f\n",Tc); printf("周转时间Ti:%4.2f\n",Ti); printf("带权周转时间Wi:%4.2f\n",Wi); TiSum+=Ti; WiSum+=Wi; destroy();}main()//主函数{ intlen; charch; input(); T=pb->arrivetime; check(); len=space(); while((len!=0)&&(ready!=NULL)) { system("pause"); p=ready; ready=p->link; p->link=NULL; running(); if(pb!=NULL) { if(ready==NULL) { if(T<pb->
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课堂违纪处理禁止体罚操作规范手册
- 生产物料技术标准与验收管理工作手册
- 咖啡豆研磨与冲泡指南
- 2025-2026学年吻火 教学设计
- 2026年山东航空学院公开招聘人员(8名)笔试备考题库及答案详解
- 南京教师招考试题及答案
- 北宋科举考试题及答案
- 2026四川成都市龙王庙正街小学招聘员额教师3人笔试备考题库及答案详解
- 2026年贵阳市南明区网格员招聘考试模拟试题及答案详解
- 2026年中职(环境治理技术)环境监测阶段测试题及答案
- 抖音续火花协议(一)
- DB23∕T 3269-2022 水稻基质育苗规程
- 接触网维修工高级日常工作流程手册
- 2025兴业银行总行国际业务部交易银行部招聘笔试模拟试题及答案解析
- 第四单元《我们生活的空间(一)》练习检测卷(含解析)-北师大版三年级数学下册
- 2025年中华护理学会静疗题库及答案
- 物业防意外伤害知识培训课件
- 汽机EH油系统课件
- 上海松江火灾报警控制器操作说明
- (鲁科版2017课标)高中物理必修第三册 第1章综合测试及答案01
- 失业保险知识培训课件
评论
0/150
提交评论