采用静态优先权优先算法的进程调度程序.doc

上传人:一*** 文档编号:4536853 上传时间:2021-09-27 格式:DOC 页数:19 大小:610.50KB
返回 下载 相关 举报
采用静态优先权优先算法的进程调度程序.doc_第1页
第1页 / 共19页
采用静态优先权优先算法的进程调度程序.doc_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《采用静态优先权优先算法的进程调度程序.doc》由会员分享,可在线阅读,更多相关《采用静态优先权优先算法的进程调度程序.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、, 采用静态优先权优先算法的进程调度程序 学 号: 姓 名: 专 业: 指导教师: 日 期: 目录第1部分 课设简介31.1 课程设计题目31.2 课程设计目的31.3 课程设计内容31.4 时间安排3第2部分 实验原理分析32.1问题描述32.2解决方法4第3部分 主要的功能模块53.1主要的函数53.2 测试用例及运行结果7第4部分 源代码9第5部分 总结及参考文献165.1 总结165.2 参考文献17 第1部分 课设简介1.1 课程设计题目 采用静态优先权优先算法的进程调度程序1.2 课程设计目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理

2、论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 1)进一步巩固和复习操作系统的基础知识。 2)培养学生结构化程序、模块化程序设计的方法和能力。 3)提高学生调试程序的技巧和软件设计的能力。 4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。1.3 课程设计内容设计并实现一个采用静态优先权算法的进程调度演示程序1.4 时间安排 1)分析设计贮备阶段 (1 天) 2)编程调试阶段 (7 天) 3)写课程设计报告、考核(2 天) 第2部分 实验原理分析2.1问题描述(1)每一个进程有一个PCB,其内容可以根据具体情况设定。 (2)进程数、进入内存时间、要求服务时间、优先

3、级等均可以在界面上设定 (3)可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化 (4)可以在运行中显示各进程的状态:就绪、执行 (由于不要求设置互斥资源与进程间的同步关系,故只有两种状态) (5)采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列 (6)有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间 (7)具有一定的数据容错性2.2程序设计流程图2.3解决方法 通过数组容纳所有数据,根据冒泡排序把数据按从小到大顺序排列,在分析a0和其他数据的大小,如果a0的完成时间大于其他数据就按照冒泡的

4、排列顺序,如果小,就比较其他数据的优先级,按优先级大小排序。 第3部分 主要的功能模块3.1主要的函数void fcfs()int i,j,n,min,px;float sum1,sum2;printf(t请输入有n个进程(0n50|n=0)printf(nt请重新输入: );scanf(%d,&n);printf(nn);struct Gzuoint id; /进程名字int dt; /到达时刻int st; /服务时间int wct; /完成时刻float zt; /周转时间float dczt; /带权周转时间;Gzuo aN;for(i=0;i=0;j-) for(i=0;iai+1.

5、dt) min=ai.dt;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; a0.wct=a0.st+a0.dt;a0.zt=(float)a0.st;a0.dczt=a0.zt/a0.st;for(i=1;iai-1.wct)ai.wct=ai.dt+ai.st;ai.zt=(float)ai.st;ai.dczt=ai.zt/ai.st;elseai.wct=ai-1.wct+ai.st;ai.zt=(float)(ai.wct-ai.dt

6、);ai.dczt=ai.zt/ai.st; 3.2 测试用例及运行结果 第4部分 源代码#includestdio.h#define N 50void main() void fcfs();void yxj();int a;while(true)printf(nn);printf(tt/*/);printf(ntt/* 1、先到先服务 调 度 */);printf(ntt/* 2、优先级优先 调 度 */);printf(ntt/* 0、 退 出 */n);printf(tt/*/);printf(nnt请选择菜单项:t);scanf(%d,&a);printf(n);switch(a)ca

7、se 1: fcfs();break;case 2: yxj();break;default: break;if(a2) break;void fcfs()int i,j,n,min,px;float sum1,sum2;printf(t请输入有n个进程(0n50|n=0)printf(nt请重新输入: );scanf(%d,&n);printf(nn);struct Gzuoint id; /进程名字int dt; /到达时刻int st; /服务时间int wct; /完成时刻float zt; /周转时间float dczt; /带权周转时间;Gzuo aN;for(i=0;i=0;j-

8、) for(i=0;iai+1.dt) min=ai.dt;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; a0.wct=a0.st+a0.dt;a0.zt=(float)a0.st;a0.dczt=a0.zt/a0.st;for(i=1;iai-1.wct)ai.wct=ai.dt+ai.st;ai.zt=(float)ai.st;ai.dczt=ai.zt/ai.st;elseai.wct=ai-1.wct+ai.st;ai.zt=(flo

9、at)(ai.wct-ai.dt);ai.dczt=ai.zt/ai.st; printf(t1、按id号依次输出n);printf(t2、按完成顺序依次输出n);printf(nt请选择输出顺序:t);scanf(%d,&px);printf(nid:到达时间t服务时间t完成时间t周转时间t带权周转时间n);sum1=0;sum2=0;switch(px)case 2: for(i=0;in;i+) printf(%d: %dtt%dtt%dtt%.0ftt%.2fn,ai.id,ai.dt,ai.st,ai.wct,ai.zt,ai.dczt);sum1+=ai.zt;sum2+=ai.d

10、czt;printf(n平均周转时间:%.2fn,sum1/n);printf(n平均带权周转时间:%.2fnn,sum2/n);break;case 1: for(j=0;jn;j+) for(i=0;in;i+)if(ai.id=j+1)printf(%d: %dtt%dtt%dtt%.0ftt%.2fn,ai.id,ai.dt,ai.st,ai.wct,ai.zt,ai.dczt);sum1+=ai.zt;sum2+=ai.dczt;printf(n平均周转时间:%.2fn,sum1/n);printf(n平均带权周转时间:%.2fnn,sum2/n);break; default: b

11、reak;void yxj()int i,j,n,min,px;int b=0,z;float sum1,sum2;printf(ntt请输入有n个进程(0n50|n=0)printf(nt请重新输入: );scanf(%d,&n);printf(n);struct Gzuoint id; /进程名字int dt; /到达时刻int st; /服务时间int yxj; /优先级int wct; /完成时刻float zt; /周转时间float dczt; /带权周转时间;Gzuo aN;for(i=0;i=0;j-) for(i=0;iai+1.dt) min=ai.dt;ai.dt=ai+

12、1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min;min=ai.yxj;ai.yxj=ai+1.yxj;ai+1.yxj=min;if(ai.dt=ai+1.dt&ai.yxjai+1.yxj)min=ai.dt;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min;min=ai.yxj;ai.yxj=ai+1.yxj;ai

13、+1.yxj=min; a0.wct=a0.st+a0.dt;a0.zt=(float)a0.st;a0.dczt=a0.zt/a0.st;for(i=1;ia0.wct) ;else b+;for(j=b-1;j=1;j-) for(i=1;ij;i+)if(ai.yxjai+1.yxj) min=ai.dt;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min;min=ai.yxj;ai.yxj=ai+1.yxj;ai+1.yxj=min; for

14、(i=1;iai-1.wct)ai.wct=ai.dt+ai.st;ai.zt=(float)ai.st;ai.dczt=ai.zt/ai.st;elseai.wct=ai-1.wct+ai.st;ai.zt=(float)(ai.wct-ai.dt);ai.dczt=ai.zt/ai.st; for(j=i+1,b=j;jai.wct) ;else b=b+1;for(j=b-1;j=i;j-) for(z=i;zj;z+)if(az.yxjaz+1.yxj) min=az.dt;az.dt=az+1.dt;az+1.dt=min;min=az.st;az.st=az+1.st;az+1.s

15、t=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; printf(nt请选择输出顺序n);printf(t1、按id号依次输出n);printf(t2、按完成顺序依次输出n);scanf(%d,&px);printf(nid:到达时间t服务时间t优先级t完成时间t周转时间t带权周转时间n);sum1=0;sum2=0;switch(px)case 2: for(i=0;in;i+) printf(%d: %dtt%dtt%dtt%dtt%.0ftt%.2fn,ai.id,ai.dt,ai.yxj,ai.st,ai.wct,ai.zt,ai.dczt);sum

16、1+=ai.zt;sum2+=ai.dczt;printf(n平均周转时间:%.2fn,sum1/n);printf(n平均带权周转时间:%.2fnn,sum2/n);break;case 1: for(j=0;jn;j+) for(i=0;in;i+)if(ai.id=j+1)printf(%d: %dtt%dtt%dtt%dtt%.0ftt%.2fn,ai.id,ai.dt,ai.yxj,ai.st,ai.wct,ai.zt,ai.dczt);sum1+=ai.zt;sum2+=ai.dczt;printf(n平均周转时间:%.2fn,sum1/n);printf(n平均带权周转时间:%.

17、2fnn,sum2/n);break; default: break; 第5部分 总结及参考文献5.1 总结 1)多线程编程对于解决一些并发性的问题是很高效的,而且也很必要,现在学会了使用多线程编程,对于以后解决类似的并发性问题(例如网络编程中经常遇到的多客户线程同时访问的问题),都会很有用。 2)虽然我们学习的操作系统理论课里面说多线程间的执行顺序具有随机性和不确定性,但我们毕竟是在一个特定的操作系统平台上实验,Windows 的线程调度机制我是不得而知的,所以出现的一些奇怪的问题也很难调试,只好人为地去5.2 参考文献 1)宗大华,宗涛,陈吉人著 操作系统 北京:人民邮电出版社,2009 2)李爱华,程磊著 面相对象程序设计(C+语言) 北京: 清华大学出版社,2010 3)宋晓宇 , windows操作系统核心编程实验教程 中国铁道出版社 4)张丽芬 刘利雄 王金玉编著 操作系统实验教程 清华大学出版社

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

当前位置:首页 > 教育专区 > 教案示例

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

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