短作业优先调度_第1页
短作业优先调度_第2页
短作业优先调度_第3页
短作业优先调度_第4页
短作业优先调度_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一 进程调度一、实验目的 编写并调试一个模拟的进程调度程序,以加深对进程的概念及进程调度算法的理解二、实验内容1. 采用“短进程优先”调度算法对五个进程进行调度。每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已用CPU时间、进程状态等等。 2. 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。三、实现思路主函数-输入函数-短作业优先调度函数-输出函数。这是一条最

2、基础的思路。输入函数使用文本导入完成数据输入,输出函数输出调度结果,主函数完成各子函数连接,最主要的是短作业优先的调度函数。我想到的方法就是排序,不断选择需要运行时间最短的作业,接着进行数据输入计算输出等,遍历全部数据并完成调度。四、主要的数据结构struct Process_struct char nameMaxNum; /进程名称 int arrivetime; /到达时间 int servertime; /开始运行时间 int finishtime; /运行结束时间 int runtime; /运行时间 int runflag; /调度标志 int order; /运行次序 double

3、 weightwholetime; /周转时间 double averagewt_FCFS,averagewt_SJF; /平均周转时间 double averagewwt_FCFS,averagewwt_SJF; /平均带权周转时间 proMaxNum;五、算法流程图运行程序 看菜单,选操作0或1 1 0input()输入导入函数SJF()-第一个先到达先执行printf()输出调度结果是否完成 是 否运行结束SJF()-选最短作业调度六、运行与测试用书上数据对程序进行测试,结果如下:另外随便添加一些数据进行测试,结果如下: 代码实现:#include<iostream> #in

4、clude<windows.h>#define MaxNum 100 using namespace std; struct Process_struct char nameMaxNum; /进程名称 int arrivetime; /到达时间 int servertime; /开始运行时间 int finishtime; /运行结束时间 int runtime; /运行时间 int runflag; /调度标志 int order; /运行次序 double weightwholetime; /周转时间 double averagewt_FCFS,averagewt_SJF; /

5、平均周转时间 double averagewwt_FCFS,averagewwt_SJF; /平均带权周转时间 proMaxNum; int N; /实际进程个数 int SJF(); /短作业优先函数 int SJF() int temp_time=0; int i=0,j; int number,temp_counter; /进程编号,当前已执行进程个数 float run_time; int min=0; run_time=proi.runtime; j=1; while(j<N)&&(proi.arrivetime=proj.arrivetime) /判断是否有两

6、个进程同时到达 if(proj.runtime>proi.runtime) run_time=proi.runtime; i=j; j+; for(j;j<N;j+) while(j<N)&&(proi.arrivetime>proj.arrivetime) /选出第一个到达的进程 min=j; i=j; j+; number=min; /对第一个到达的进程赋值,计算 pronumber.servertime=pronumber.arrivetime; pronumber.finishtime=pronumber.servertime+pronumber

7、.runtime; pronumber.runflag=1; temp_time=pronumber.finishtime; pronumber.order=1; temp_counter=1; while(temp_counter<N) for(j=0;j<N;j+) if(proj.arrivetime<=temp_time)&&(!proj.runflag) run_time=proj.runtime; number=j; break; for(j=0;j<N;j+) /选出最短的运行时间(最短作业) if(proj.arrivetime<=

8、temp_time)&&(!proj.runflag) if(proj.runtime<run_time) run_time=proj.runtime; number=j; pronumber.servertime=temp_time; /对最短作业进行赋值,计算 pronumber.finishtime=pronumber.servertime+pronumber.runtime; pronumber.runflag=1; temp_time=pronumber.finishtime; temp_counter+; pronumber.order=temp_counte

9、r; return 0; int input(); /进程参数输入 int output(); /调度结果输出 void main() int option; printf("n*n"); printf(" 主菜单 n"); printf("*nn"); printf(" 1 使用短作业优先 nn"); printf(" 0 退出 nn"); printf("*nn"); printf("输入你想进行的操作:"); scanf("%d"

10、,&option); printf("n"); switch(option) case 0: printf("运行结束。n"); break; case 1: printf("对进程用短作业优先调度。nn"); input(); SJF(); output(); break; printf("点击任意键键继续."); getchar(); int input() /进程参数输入 printf("请输入进程个数:n"); scanf("%d",&N); FILE

11、 *f; char buf100; char *p; if (NULL=(f=fopen("F:1111.txt", "r") /打开文件 fprintf(stderr, "Can not open file:1111.txt"); return 1; int i=0,n=0; while (1) /导入数据 if(n=N) break; if(NULL=fgets(buf,100,f) break; if('n'=buf0) continue; /空行继续 p=buf; sscanf(p,"%c%d%d&q

12、uot;,&,&pron.arrivetime,&pron.runtime); n+; pron.servertime=0; pron.finishtime=0; pron.weightwholetime=0; pron.order=0; pron.runflag=0; fclose(f); return 0; int output() /调度结果输出 int i; float turn_round_time=0,f1,w=0; printf("进程名称 到达 运行 开始运行 结束 执行顺序 周转 带权周转n"); for(i=0;i<N;i+) proi.weightwholetime=proi.finishtime-proi.arrivetime; f1=proi.weightwholetime/proi.runtime; turn_round_time+=proi.weightwholetime; w+=f1; printf("%4s%8d%5d%7d%7d%7d%8.2f%7.2fn",,proi.arrivetime,proi.runtime,proi.servert

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论