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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

采用静态优先权优先算法的进程调度程序学号:姓名:专业:指导教师:日期:目录第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课程设计目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。1)进一步巩固和复习操作系统的基础知识。2)培养学生结构化程序、模块化程序设计的方法和能力。3)提高学生调试程序的技巧和软件设计的能力。4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。1.3课程设计内容设计并实现一个采用静态优先权算法的进程调度演示程序1.4时间安排1)分析设计贮备阶段(1天)2)编程调试阶段(7天)3)写课程设计报告、考核(2天)第2部分实验原理分析2.1问题描述(1)每一个进程有一个PCB,其内容可以根据具体情况设定。(2)进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定(3)可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化(4)可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间的同步关系,故只有两种状态)(5)采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列(6)有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间(7)具有一定的数据容错性2.2程序设计流程图2.3解决方法通过数组容纳所有数据,根据冒泡排序把数据按从小到大顺序排列,在分析a[0]和其他数据的大小,如果a[0]的完成时间大于其他数据就按照冒泡的排列顺序,如果小,就比较其他数据的优先级,按优先级大小排序。第3部分主要的功能模块3.1主要的函数voidfcfs(){inti,j,n,min,px;floatsum1,sum2;printf(\t请输入有n个进程(0n=50):\t);scanf(%d,&n);while(n50||n=0){printf(n\t请重新输入:);scanf(%d,&n);}printf(\n\n);structGzuo{intid;//进程名字intdt;//到达时刻intst;//服务时间intwct;//完成时刻floatzt;//周转时间floatdczt;//带权周转时间};Gzuoa[N];for(i=0;in;i++){a[i].id=i+1;printf(\t到达时间:);scanf(%d,&a[i].dt);printf(\t服务时间:);scanf(%d,&a[i].st);printf(\n);}for(j=n-1;j=0;j--){for(i=0;ij;i++){if(a[i].dta[i+1].dt){min=a[i].dt;a[i].dt=a[i+1].dt;a[i+1].dt=min;min=a[i].st;a[i].st=a[i+1].st;a[i+1].st=min;min=a[i].id;a[i].id=a[i+1].id;a[i+1].id=min;}}}a[0].wct=a[0].st+a[0].dt;a[0].zt=(float)a[0].st;a[0].dczt=a[0].zt/a[0].st;for(i=1;in;i++){if(a[i].dta[i-1].wct){a[i].wct=a[i].dt+a[i].st;a[i].zt=(float)a[i].st;a[i].dczt=a[i].zt/a[i].st;}else{a[i].wct=a[i-1].wct+a[i].st;a[i].zt=(float)(a[i].wct-a[i].dt);a[i].dczt=a[i].zt/a[i].st;}}3.2测试用例及运行结果第4部分源代码#includestdio.h#defineN50voidmain(){voidfcfs();voidyxj();inta;while(true){printf(\n\n);printf(\t\t/*************************/);printf(\n\t\t/*1、先到先服务调度*/);printf(\n\t\t/*2、优先级优先调度*/);printf(\n\t\t/*0、退出*/\n);printf(\t\t/*************************/);printf(\n\n\t请选择菜单项:\t);scanf(%d,&a);printf(\n);switch(a){case1:fcfs();break;case2:yxj();break;default:break;}if(a0&&a2)break;}}voidfcfs(){inti,j,n,min,px;floatsum1,sum2;printf(\t请输入有n个进程(0n=50):\t);scanf(%d,&n);while(n50||n=0){printf(n\t请重新输入:);scanf(%d,&n);}printf(\n\n);structGzuo{intid;//进程名字intdt;//到达时刻intst;//服务时间intwct;//完成时刻floatzt;//周转时间floatdczt;//带权周转时间};Gzuoa[N];for(i=0;in;i++){a[i].id=i+1;printf(\t到达时间:);scanf(%d,&a[i].dt);printf(\t服务时间:);scanf(%d,&a[i].st);printf(\n);}for(j=n-1;j=0;j--){for(i=0;ij;i++){if(a[i].dta[i+1].dt){min=a[i].dt;a[i].dt=a[i+1].dt;a[i+1].dt=min;min=a[i].st;a[i].st=a[i+1].st;a[i+1].st=min;min=a[i].id;a[i].id=a[i+1].id;a[i+1].id=min;}}}a[0].wct=a[0].st+a[0].dt;a[0].zt=(float)a[0].st;a[0].dczt=a[0].zt/a[0].st;for(i=1;in;i++){if(a[i].dta[i-1].wct){a[i].wct=a[i].dt+a[i].st;a[i].zt=(float)a[i].st;a[i].dczt=a[i].zt/a[i].st;}else{a[i].wct=a[i-1].wct+a[i].st;a[i].zt=(float)(a[i].wct-a[i].dt);a[i].dczt=a[i].zt/a[i].st;}}printf(\t1、按id号依次输出\n);printf(\t2、按完成顺序依次输出\n);printf(\n\t请选择输出顺序:\t);scanf(%d,&px);printf(\nid:到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n);sum1=0;sum2=0;switch(px){case2:{for(i=0;in;i++){printf(%d:%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n,a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);sum1+=a[i].zt;sum2+=a[i].dczt;}printf(\n平均周转时间:%.2f\n,sum1/n);printf(\n平均带权周转时间:%.2f\n\n,sum2/n);break;}case1:{for(j=0;jn;j++){for(i=0;in;i++)if(a[i].id==j+1){printf(%d:%d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n,a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);sum1+=a[i].zt;sum2+=a[i].dczt;}}printf(\n平均周转时间:%.2f\n,sum1/n);printf(\n平均带权周转时间:%.2f\n\n,sum2/n);break;}default:break;}}voidyxj(){inti,j,n,min,px;intb=0,z;floatsum1,sum2;printf(\n\t\t请输入有n个进程(0n=50):\t);scanf(%d/n,&n);while(n50||n=0){printf(n\t请重新输入:);scanf(%d,&n);}printf(\n);structGzuo{intid;//进程名字intdt;//到达时刻intst;//服务时间intyxj;//优先级intwct;//完成时刻floatzt;//周转时间floatdczt;//带权周转时间};Gzuoa[N];for(i=0;in;i++){a[i].id=i+1;printf(\t到达时间:);scanf(%d,&a[i].dt);printf(\t服务时间:);scanf(%d,&a[i].st);printf(\t优先级:);scanf(%d,&a[i].yxj);printf(\n);}min=a[0].dt;for(j=n-1;j=0;j--){for(i=0;ij;i++){if(a[i].dta[i+1].dt){min=a[i].dt;a[i].dt=a[i+1].dt;a[i+1].dt=min;min=a[i].st;a[i].st=a[i+1].st;a[i+1].st=min;min=a[i].id;a[i].id=a[i+1].id;a[i+1].id=min;min=a[i].yxj;a[i].yxj=a[i+1].yxj;a[i+1].yxj=min;}if(a[i].dt==a[i+1].dt&&a[i].yxja[i+1].yxj){min=a[i].dt;a[i].dt=a[i+1].dt;a[i+1].dt=min;min=a[i].st;a[i].st=a[i+1].st;a[i+1].st=min;min=a[i].id;a[i].id=a[i+1].id;a[i+1].id=min

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功