2022年操作系统实验进程调度 .pdf

上传人:Q****o 文档编号:25942735 上传时间:2022-07-14 格式:PDF 页数:9 大小:123.98KB
返回 下载 相关 举报
2022年操作系统实验进程调度 .pdf_第1页
第1页 / 共9页
2022年操作系统实验进程调度 .pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《2022年操作系统实验进程调度 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验进程调度 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验三 进程调度一实验目的加深理解并模拟实现进程(作业)调度算法。1)熟悉常用的进程调度算法,如FCFS、SPF、FPF、高响应比优先、时间片轮转;2)结合所学的数据结构及编程知识,选择三种进程调度算法予以实现。二实验属性该实验为设计性实验。三实验仪器设备及器材普通 PC386以上微机四实验要求本实验要求2 学时完成。本实验要求完成如下任务:1) 编程实现单处理机系统中的进程调度,要求从FCFS、SPF、FPF、高响应比优先、时间片轮转算法中至少选择三个;2) 最后编写主函数对所做工作进行测试。实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、 实验中认真调

2、试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告(参见附录A) ,并要求用正规的实验报告纸和封面装订整齐,按时上交。五:实验具体设计此程序模拟了两种调度算法,FCFS和 SPF ,首先 FCFS就是按照进程的创建顺序依次顺序进行,流程图为:进程顺序执行SPF: 每次都进行循环,选出在该时间刻运行时间最短的进程优先执行。程序代码具体详解:1.创建一结构体作为进程控制器typedef struct PCB int ID; char state; int arrivetime; 进程 4 进程 1 进程 2 进程 3 新进程名师资料总结 - - -精品资料欢迎下载

3、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - int starttime; int finishtime; int servicetime; struct PCB *next; pcb; 定义全局变量作为计时器int time;/ 计时器2.创建进程链表:从 txt 文件中读取数据,构造一条不含头结点的单链表void Create_process() ifstream inFile; inFile.open(test.txt); inFilen; inFile.ge

4、t(); int i=0; for (;ip-ID; inFilep-arrivetime; inFilep-servicetime; p-starttime=0; p-finishtime=0; p-state=F; p-next=NULL; if(head=NULL) head=p;q=p;time=p-arrivetime; if(p-arrivetime arrivetime; q-next=p; q=p; 3.若执行 FCFS 算法,按顺序遍历链表void fcfs1() int i; p=head; for(i=0;istate=F) 名师资料总结 - - -精品资料欢迎下载 -

5、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - q=p; run_fcfs1(q); p=p-next; void run_fcfs1(pcb *p1) time = p1-arrivetime time? p1-arrivetime:time; p1-starttime=time; printf(n 现在时间: %d,开始运行作业 %dn,time,p1-ID); time+=p1-servicetime; p1-state=T; p1-finishtime=time;

6、printf(ID号到达时间开始运行时间服务时间完成时间n); printf(%d%10d%12d%12d%12dn,p1-ID,p1-arrivetime,p1-starttime,p1-servicetime,p1-finishtime); 4.若执行 SPF 算法,每次都从链表头开始遍历链表,找出arrivetimeservicetime; while (p!=NULL) if (p-arrivetimeservicetimenext; else p=p-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心

7、整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - run_fcfs2(q); pcb *pre; if (q=head) head=head-next; else pre=head; while(pre-next!=q) pre=pre-next; if(q-next=NULL) pre-next=NULL; else pre-next=q-next; void run_fcfs2(pcb *p1) p1-starttime=time; printf(n 现在时间: %d,开始运行作业 %dn,time,p1-ID); time+=p1-servic

8、etime; p1-state=T; p1-finishtime=time; printf(ID号到达时间开始运行时间服务时间完成时间n); printf(%d%10d%12d%12d%12dn,p1-ID,p1-arrivetime,p1-starttime,p1-servicetime,p1-finishtime); 六:程序执行效果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 实验总结:模拟实验调度算法,用到的具体知识

9、还主要是数据结构中的知识,在这次实验中,FCFS 算法实现还算比较简单,SPF算法稍微有一些麻烦,主要是在进行查找运行时间最短的节点,并需要满足到达时间time,并且还要是没有执行的节点,这一点稍微有些麻烦。源码#include #include #include #include typedef struct PCB int ID; char state; int arrivetime; int starttime; int finishtime; int servicetime; struct PCB *next; pcb; int time;/ 计时器int n; / 进程个数pcb*h

10、ead=NULL; pcb*p,*q; void fcfs1(); void fcfs2(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - void run_fcfs1(pcb *p1); void Create_process(); void Create_process() ifstream inFile; inFile.open(test.txt); inFilen; inFile.get(); int i=0; fo

11、r (;ip-ID; inFilep-arrivetime; inFilep-servicetime; p-starttime=0; p-finishtime=0; p-state=F; p-next=NULL; if(head=NULL) head=p;q=p;time=p-arrivetime; if(p-arrivetime arrivetime; q-next=p; q=p; inFile.close(); void run_fcfs1(pcb *p1) time = p1-arrivetime time? p1-arrivetime:time; p1-starttime=time;

12、printf(n 现在时间: %d,开始运行作业 %dn,time,p1-ID); time+=p1-servicetime; p1-state=T; p1-finishtime=time; printf(ID号到达时间开始运行时间服务时间完成时间n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - printf(%d%10d%12d%12d%12dn,p1-ID,p1-arrivetime,p1-starttime,p1-s

13、ervicetime,p1-finishtime); void run_fcfs2(pcb *p1) p1-starttime=time; printf(n 现在时间: %d,开始运行作业 %dn,time,p1-ID); time+=p1-servicetime; p1-state=T; p1-finishtime=time; printf(ID号到达时间开始运行时间服务时间完成时间n); printf(%d%10d%12d%12d%12dn,p1-ID,p1-arrivetime,p1-starttime,p1-servicetime,p1-finishtime); void fcfs1(

14、) int i; p=head; for(i=0;istate=F) q=p; run_fcfs1(q); p=p-next; void fcfs2() while(head) p=head; q=p; int Run_time=p-servicetime; while (p!=NULL) if (p-arrivetimeservicetimenext; else p=p-next; run_fcfs2(q); /删除该节点pcb *pre; if (q=head) head=head-next; else pre=head; while(pre-next!=q) pre=pre-next;

15、if(q-next=NULL) pre-next=NULL; else pre-next=q-next; void main() Create_process(); int i; cout 输入 1 或 2或 0i; while(i!=0) if (i=1) fcfs1(); cout 输入 1 或 2 或 0i; else if (i=2) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - fcfs2(); cout 输入 1 或 2 或 0i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -

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

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁