




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西北农林科技大学信息工程学院实习报告课程 操作系统 学院 信息工程 专业年级 软件151 学号 2015012893 姓名 张鑫 周次 第八周 交报告时间 2017.5.5 成绩 实验二 作业调度实验一. 目的要求: 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二、实验内容:1、编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 流程图如下:1、响应比高者优先算法流程图:2、先来先服务调度算法流程图:3、短作业优先算法调度流程图:实验代码如下:#include#include#includestruct jcb char name10;/作业名 float arrtime;/提交时间 float waitTime;/等待时间 float startTime;/开始时间 float runTime;/运行时间 float finishTime;/完成时间 float TAtime; /周转时间 float TAWtimei;/带权周转时间 float AvgTAtime,AvgTAWtimei;/平均周转时间;平均带权周转时间 float bi;/响应比;jcb JCB100;int ReadFile() int m=0; int i=0; FILE *fp; /定义文件指针 fp=fopen(3.txt,r); /打开文件 if(fp=NULL) printf(File open error !n); exit(0); else printf(作业名 提交时间 运行时间n); while(!feof(fp) fscanf(fp,%s%f%f,&JCB,&JCBi.arrtime,&JCBi.runTime); /fscanf()函数将数据读入 printf(n%s%15f%12f,JCB,JCBi.arrtime,JCBi.runTime); /输出到屏幕 i+; fclose(fp); /关闭文件 m=i-1; return m;/菜单void menu() printf(nn |* 作业调度 *|n); printf( |=|n); printf( | 0.退出 |n); printf( | 1.先来先服务 (FCFS) 调度算法 |n); printf( | 2.短作业优先 (SJF) 调度算法 |n); printf( | 3.响应比高者优先 (HRRN) 调度算法 |n); printf( |=|n);void displayone(float p,char *h,int i,int j) strcpy(h,JCB); strcpy(JCB,JCB); strcpy(JCB,h); p=JCBi.arrtime; JCBi.arrtime=JCBj.arrtime; JCBj.arrtime=p; p=JCBi.runTime; JCBi.runTime=JCBj.runTime; JCBj.runTime=p; p=JCBi.startTime; JCBi.startTime=JCBj.startTime; JCBj.startTime=p; p=JCBi.finishTime; JCBi.finishTime=JCBj.finishTime; JCBj.finishTime=p;void displaytow(int i,int y) printf(n); printf(作业%s先开始运行nn,JCB0.name); float AvgCycleTime,AvgValueCycleTime,k=0,m=0;/AvgCycleTime为平均周转时间,AvgValueCycleTime为平均带权周转时间 for(i=0;iy;i+) JCB0.startTime=JCB0.arrtime; JCBi.finishTime=JCBi.startTime+JCBi.runTime;/结束时间 JCBi+1.startTime=JCBi.finishTime; JCBi.waitTime=JCBi.startTime-JCBi.arrtime;/等待时间 JCBi.TAtime=JCBi.finishTime-JCBi.arrtime;/周转时间 JCBi.TAWtimei=JCBi.TAtime/JCBi.runTime;/带权周转时间 k+=JCBi.TAtime; m+=JCBi.TAWtimei; AvgCycleTime=k/y;/平均旋转时间 AvgValueCycleTime=m/y;/平均带权旋转时间 printf(作业名 提交时间 开始时间 运行时间 结束时间 等待时间 周转时间 带权周转时间n); for(i=0;iy;i+) printf(%st%.2ft%.2ft%4.2ft%6.2ft%7.2ft%7.2ft%8.2fnn,JCB,JCBi.arrtime,JCBi.startTime,JCBi.runTime,JCBi.finishTime,JCBi.waitTime,JCBi.TAtime,JCBi.TAWtimei); printf(平均周转时间为:); printf(%.2fnn,AvgCycleTime); printf(平均带权周转时间为:); printf(%.2fnn,AvgValueCycleTime);void FCFS(int y)/先来先服务算法 float p; int i,j; char h100; for(i=0;iy;i+) for(j=i+1;jJCBj.arrtime) displayone(p,h,i,j); displaytow(i,y);void SJF(int y)/短作业优先算法 float p; int i,j; char h100; for(i=0;iy;i+)/先提交的作业先运行,后面来的作业再比较运行时间长短 for(j=i+1;jJCBj.arrtime)/先把作业按提交时间来排序 displayone(p,h,i,j); for(i=1;iy;i+) for(j=i+1;jJCBj.runTime)/比较后面来的作业的运行时间 displayone(p,h,i,j); displaytow(i,y);void HRRN(int y)/响应比高者优先算法 int i,j; float p; char h100; for(i=0;iy;i+)/先提交的作业先运行,后面来的作业再比较响应比的大小 for(j=i+1;jJCBj.arrtime)/先把作业按提交时间来排序 displayone(p,h,i,j); for(i=0;iy;i+) JCB0.startTime=JCB0.arrtime; JCBi.finishTime=JCBi.startTime+JCBi.runTime;/结束时间 JCBi+1.startTime=JCBi.finishTime; JCBi.waitTime=JCBi.startTime-JCBi.arrtime;/等待时间 JCBi.TAtime=JCBi.finishTime-JCBi.arrtime;/周转时间 JCBi.bi=JCBi.TAtime/JCBi.runTime;/响应比 for(i=1;iy;i+) for(j=i+1;jy;j+) if(JCBi.biJCBj.bi)/比较后面来的作业的响应比 displayone(p,h,i,j); p=JCBi.bi; JCBi.bi=JCBj.bi; JCBj.bi=p; displaytow(i,y); for(i=1;iy;i+) printf(%s的响应比为:%.2fn,JCB,JCBi.bi); int main() while(1) int i,x,n; menu(); loop1:printf(请选择模块(03): ); scanf(%d,&i); if(i=0) exit(0); else if(i3) printf(输入有误,请重新输入n); goto loop1;/无条件转移语句 loop2:printf(原始数据是:n); n=ReadFile(); for(x=0;xn;x+) printf(n%s%15f%12f,JCB,JCBi.arrtime,JCBi.runTime); switch(i) case 0:exit(0);break; case 1:FCFS(n);break; case 2:SJF(n);break; case 3:HRRN(n);break; 实验截图说明如下:这是先来先服务算法调度这是最短优先作业调度算法结果这是响应比高者优先调度算法结果2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求实验代码如下:#include <stdio.h>#include <stdlib.h>#define getjch(type) (type*)malloc(sizeof(type)#define N 10struct jcb /* 定义作业控制块PCB */ char name10; float needtime; /*运行时间*/ float arrivetime;/*提交时刻*/ float storageN;/*系统资源*/ struct jcb* link;*ready=NULL,*pb=NULL,*p;typedef struct jcb JCB;float Tc,Ti,Wi,T=0;/*完成时刻,周转时间,带权周转时间,时间量*/float TiSum=0,WiSum=0;/*平均周转时间,带权a平均周转时间*/float sourceN;int n;void input(); /*输入作业信息*/int space(); /* 返回就绪队列中作业的数目*/void fcfs(); /*先来先服务算法*/void disp(JCB *pr); /* 显示相应的作业*/void running(); /*运行作业组*/void destroy(); /* 撤销作业*/void input() /* 建立作业控制块函数*/ int i,k,num; printf(" 请输入所拥有的资源种类:"); scanf(" %d",& n); printf(" 输入系统所拥有资源数:n"); for(i=0; i< n; i+) printf(" 资源%d:",i); scanf(" %f",& sourcei); 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-> storagek); printf(" n"); p-> link=NULL; fcfs(); int space() int l=0; JCB* pr=ready; while(pr!=NULL) l+; pr=pr-> link; return(l);void disp(JCB * pr) /*建立作业显示函数,用于显示当前作业*/ int i; printf(" n%6st%6st%6st"," 作 业 名 "," 运行时间"," 提交时刻"); for(i=0; i< n; i+) printf(" 资源%dt",i); printf(" n%6st%6.2ftt%6.2ft",pr-> name,pr-> needtime,pr-> arrivetime); for(i=0; i< n; i+) printf(" t%6.2f",pr-> storagei); printf(" n");void destroy() /*建立作业撤消函数(作业运行结束,撤消作业)*/ free(p);void check() JCB *first,*fir,*p; int flag=0,i,test=0; first=pb; while(first& & (T> =first-> arrivetime)& & (flag=0) void running() JCB *pr; int i; printf(" 正在运行的作业是:%sn",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.2fn",p-> name,T); Tc=T+p-> needtime; T=Tc; Ti=Tc-p-> arrivetime; Wi=Ti/(p-> needtime); for(i=0; i< n; i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民生监督业务培训课件
- 民法课件简单案例
- 民法学第二章课件
- 冰雪运动考试题库及答案
- 河南安全监管动态讲解
- 基层医护人员关系优化
- 民族资本主义经济课件
- 保教个人工作方案(模板)
- 新质生产力:科技与创新的融合
- 光棍节双十一活动方案
- 2025年乡镇民政办招聘养老护理员面试常见问题及答案
- 2025客运从业资格试题及答案
- 2025租房合同范本下载参考
- 2025广东广州市公安局招聘交通辅警150人(第二批)笔试参考题库附答案解析
- 2025危险品押运员模拟考试试题及答案
- (2025秋新版)人教版二年级数学上册全册教案(教学设计)
- 网络意识形态课件
- 中小学预防基孔肯雅热主题班会课件-防蚊灭蚊守护健康
- 社工基础知识培训课件
- 党史宣讲面试题目及答案
- 2025年小水电行业当前竞争格局与未来发展趋势分析报告
评论
0/150
提交评论