进程调度算法模拟实现

上传人:桔**** 文档编号:496265691 上传时间:2023-03-09 格式:DOCX 页数:12 大小:22.05KB
返回 下载 相关 举报
进程调度算法模拟实现_第1页
第1页 / 共12页
进程调度算法模拟实现_第2页
第2页 / 共12页
进程调度算法模拟实现_第3页
第3页 / 共12页
进程调度算法模拟实现_第4页
第4页 / 共12页
进程调度算法模拟实现_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《进程调度算法模拟实现》由会员分享,可在线阅读,更多相关《进程调度算法模拟实现(12页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上实验六 进程调度算法模拟一、 实验类型 本实验为设计性实验。二、 实验目的与任务1) 通过对进程调度算法的设计,加深对进程调度原理的理解,进一步掌握各种调度算法的特征;2) 针对你所选择的算法的模拟情况进行对算法进行评价(通过比较计算平均周转时间和平均带权周转时间)。三、 预习要求1) 理解各调度算法原理;2) 理解平均周转时间和平均带权周转时间四、 实验基本原理(1) 设计程序模拟先来先服务(FCFS)进程调度、短进程优先调度(SJF)、高响应比优先调度(HRN)、最高优先权优先调度、时间片轮转调度等算法,要求比较所选算法的平均周转时间和平均带权周转时间,可选用C

2、、C+或Java 等编程语言中任一种语言。(2)自设模拟的情景,但要求至少包括四个进程调度。注意,问题情境最好允许用户设定。即当程序启动时,应允许用户可以选择不同的调度算法;然后用户从控制台输入各个进程的信息,进程信息输入完毕后,就开始了进程调度。参考代码如下:(3) 认真完成实验报告,同时要求说明模拟的情境、数据结构的使用,程序流程图或步骤,并给出实验结果分析和实验小结;五、 实验仪器与设备(或工具软件)实验设备:计算机一台;六、 实验内容 参考代码如下 #includestdio.h#includestdlib.hvoid dayin();typedef struct PCB /定义进程控

3、制块char num2; /进程号char state; /运行状态int tijiaotime; /提交进程时间int starttime; /进程开始时间int finishtime; /结束时间int needtime; /运行需要时间float roundtime; /周转时间float weightroundtime; /带权周转时间struct PCB *next; /指向下个进程pcb;int time=10000,n; /计时器 (假设当前时间)float sumroundtime=0,sumweightroundtime=0,avgroundtime,avgweightrou

4、ndtime; /定义全局平均变量。pcb *head=NULL,*p,*q; / 进程全局指针。void run_fcfs(pcb *p1) /进程执行过程time = p1-tijiaotime time? p1-tijiaotime:time; / 获得真正的当前时间。p1-starttime=time;/printf(n现在时间是%d,开始运行进程%sn,time,p1-num);time+=p1-needtime;p1-state=F;p1-finishtime=time;p1-roundtime=p1-finishtime-p1-tijiaotime;p1-weightroundt

5、ime=(float)(p1-finishtime-p1-tijiaotime)/(float)p1-needtime;sumroundtime+=p1-roundtime;sumweightroundtime+=p1-weightroundtime;void run_spf(pcb *p1,int t) /模拟进程执行过程p1-starttime=t;p1-state=W;p1-finishtime=t+p1-needtime;p1-roundtime=p1-finishtime-p1-tijiaotime;p1-weightroundtime=(p1-finishtime-p1-tijia

6、otime)/(float)p1-needtime;sumroundtime+=p1-roundtime;sumweightroundtime+=p1-weightroundtime;void fcfs() /从队首分别取出进程(找到满足条件的进程,并执行。)int i,j,t;for(j=0;jn;j+)p=head;t=10000;for(i=0;itijiaotimestate=W)t=p-tijiaotime;q=p; /标记当前未完成的进程p=p-next;run_fcfs(q);avgroundtime=sumroundtime/n;avgweightroundtime=sumwe

7、ightroundtime/n;/void spf() /从队首分别取出进程(找到满足条件的最短进程,并执行。)int i,j,t,k,futmin,flag;t=10000;/p=head;for(i=0;itijiaotimestate=F) t=p-tijiaotime;/记录范围内。最早完成时间。 p=p-next; / k=0;while(kn) flag=0;futmin=10000;/最小的一个服务时间。(在范围内总是可以找到最小的一个服务时间。)p=head;for(i=0;itijiaotimestate=F& p-needtimeneedtime;/ 每一次都要修改当前最早

8、时间。q=p; /标记当前未完成的进程flag=1; p=p-next;if(flag=1)k+;run_spf(q,t);t=t+q-needtime; /t为当前时间。用于筛选进程 下一个进程的当前时间。elset=10000;/p=head;for(i=0;itijiaotimestate=F)t=p-tijiaotime;/记录范围内。最早完成时间。p=p-next;avgroundtime=sumroundtime/n;avgweightroundtime=sumweightroundtime/n; /void getInfo() /创建进程int num;printf(n请输入进程

9、个数:);scanf(%d,&n);printf(n依次输入%d个进程:n,n);dayin();printf(进程名 到达时间 运行时间n);for(num=0;numnum,&p-tijiaotime,&p-needtime);if(p-tijiaotime tijiaotime; /记录最早时间。q-next=p;p-starttime=0;p-finishtime=0;p-roundtime=0;p-weightroundtime=0;p-next=NULL;p-state=W;q=p;void display()printf(nn进程名tt);p=head;while(p!=NULL

10、)printf(%st,p-num);p=p-next;printf(平均);printf(n到达时间t);p=head;while(p!=NULL)printf(%dt,p-tijiaotime);p=p-next;printf(n运行时间t);p=head;while(p!=NULL)printf(%dt,p-needtime);p=p-next;printf(n开始运行时间t);p=head;while(p!=NULL)printf(%dt,p-starttime);p=p-next;p=head;printf(n完成时间t);while(p!=NULL)printf(%dt,p-fin

11、ishtime);p=p-next;p=head;printf(n周转时间t);while(p!=NULL)printf(%0.1ft,p-roundtime);p=p-next;printf(%0.1fn,avgroundtime);p=head;printf(带权周转时间t);while(p!=NULL)/printf(%0.1ft,p-roundtime);printf(%0.1ft,p-weightroundtime);p=p-next;printf(%0.1fn,avgweightroundtime);dayin(); printf(平均周转时间为%0.1fn,avgroundtime);printf(平均带权周转时间为%0.1fn,avgweightroundtime); dayin();void dayin()printf(-n);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号