操作系统课程设计报告及代码.doc

上传人:仙人指路1688 文档编号:2881211 上传时间:2023-03-01 格式:DOC 页数:15 大小:130.50KB
返回 下载 相关 举报
操作系统课程设计报告及代码.doc_第1页
第1页 / 共15页
操作系统课程设计报告及代码.doc_第2页
第2页 / 共15页
操作系统课程设计报告及代码.doc_第3页
第3页 / 共15页
操作系统课程设计报告及代码.doc_第4页
第4页 / 共15页
操作系统课程设计报告及代码.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《操作系统课程设计报告及代码.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计报告及代码.doc(15页珍藏版)》请在三一办公上搜索。

1、实习题目指导教师职 称学生姓名学 号日 期实习题目指导教师职 称学生姓名学 号日 期内蒙古师范大学计算机与信息工程学院操作系统课程设计报告实习题目指导教师职 称学生姓名学 号日 期设计题目处理机调度模拟程序指导教师职称姓 名学 号日 期1 设计任务处理机调度模拟程序:选择一个调度算法,实现处理机调度。2 设计的功能目标2.1设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。2.2 设计要求:1

2、)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。2)可选择进程数量3)本程序包括三种算法,可用C语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数及每个进程的运行时间,每个进程的优先数由随机函数产生且优先数随等待时间而变化,执行,显示结果。3 设计的思想、方法和技术首先,我设计了一个界面,上面显示了这次课程设计的题目及我的姓名和学号,接着,又用户根据提示输入进程数、到达时间、执行时间,时间片等要求后,通过菜单选项,选择要执行的算法,计算结束后,将会显示周转时间,带权周转时间等。具体设计时,我用到了一个结构体struct Gzuo int id; /进程名

3、字 int dt; /到达时刻 int st; /执行时间 int wct; /完成时刻 int yxj; /优先级 int st2; /标志是否完成 float zt; /周转时间 float dczt; /带权周转时间 ;剩下的每一种算法以及界面的显示和菜单项的显示。我都用了主函数调用的方法。4 设计的主要代码及注释#includestdio.h#include #include #include #define N 50int n;int sj;struct Gzuo int id; /进程名字 int dt; /到达时刻 int st; /执行时间 int wct; /完成时刻 int

4、 yxj; /优先级 int st2; /标志是否完成 float zt; /周转时间 float dczt; /带权周转时间 ; Gzuo aN;void input(Gzuo a) printf(请输入进程个数:); scanf(%d,&n);for(int i=0;i=0;j-) 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.st2; ai.st2=ai+1.st2; ai+1.st2=min; min=ai.id; ai.id=

5、ai+1.id; ai+1.id=min; time = a0.dt; min = 0; while(minn) flag=true; for(i=0;i0&ai.dt=time) flag=false; for(i=0;i 0 ) if(ai.dt=time) ai.st2 = ai.st2 - sj; time = time + sj; if(ai.st2=0) ai.wct = time + ai.st2; ai.zt=(float)(ai.wct-ai.dt); ai.dczt=ai.zt/ai.st; min+; else if(flag) for(i=0;i0&ai.dttime)

6、 time = ai.dt; break; printf(n进程:到达时间 执行时间 完成时间 周转时间 带权周转时间 n); sum1=0; sum2=0; for(j=0;jn;j+) for(i=0;i=0;j-) 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; if(ai.dt=ai+1.dt&ai.stai+1.st) min=ai.dt; ai.dt=ai+1.d

7、t; 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;ia0.wct) ; else b=b+1; for(j=b-1;j=1;j-) for(i=1;iai+1.st) min=ai.dt; ai.dt=ai+1.dt; ai+1.dt=min; min=ai.st; ai.st=ai+1.st; ai+1.st=min;

8、min=ai.id; ai.id=ai+1.id; ai+1.id=min; for(i=1;iai-1.wct) ai.wct=ai.dt+ai.st; ai.zt=(float)ai.st; ai.dczt=ai.zt/ai.st; else ai.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;zaz+1.st) min=az.dt; az.dt=az+1.dt; az+1

9、.dt=min; min=az.st; az.st=az+1.st; az+1.st=min; min=ai.id; ai.id=ai+1.id; ai+1.id=min; printf(n进程:到达时间t执行时间t完成时间t周转时间t带权周转时间n); sum1=0; sum2=0; for(j=0;jn;j+) for(i=0;i=0;j-) 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+

10、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+1.yxj=min; a0.wct=a0.st+a0.dt; a0.zt=(float)a0.st; a0.dczt=a0.zt/

11、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(i=1;iai-1.wct) ai.wct=ai.dt+ai.st; ai.zt=(float)a

12、i.st; ai.dczt=ai.zt/ai.st; else ai.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.st=min; min=ai.id; ai.id=ai+1.id; ai

13、+1.id=min; printf(n进程:到达时间 执行时间 优先级 完成时间 周转时间 带权周转时间n); sum1=0; sum2=0; for(j=0;jn;j+) for(i=0;in;i+) if(ai.id=j+1) printf(%d: %d %d %d %d %.0f %.2f n,ai.id,ai.dt,ai.st,ai.yxj,ai.wct,ai.zt,ai.dczt); sum1+=ai.zt; sum2+=ai.dczt; printf(*n); void version()/显示信息函数 coutendlendl; cout endl; cout 进程调度算法模拟实

14、验 endl; cout endl; cout 优先级 时间片轮转 短作业 endl; cout 刘洋 endl; cout 20101106651 endl; cout endl; coutendlendl; /void version()/主函数 void main() version();/显示信息函数int input1; input(a); bool bGoOn;char sGoOn1; bGoOn= true;strcpy(sGoOn, );while (bGoOn)coutendl请输入算法编号(1 OR 2 OR 3 )选择进程调度功能:endlendl;cout1短进程优先调

15、度算法 endl2时间片轮转调度算法endlinput1;switch(input1)case 1:sjf(a);/短进程优先调度算法break;case 2:sjp(a,sj);/时间片轮转调度算法break;case 3:yxj(a);/优先级调度算法break;default:printf(n输入的算法编号错误!n);break;/switch(iInput)bGoOn= false;strcpy(sGoOn, );coutendl;coutsGoOn;bGoOn=(sGoOn0=y|sGoOn0=Y);/while bGoOn /if(readData()=1)5 结果分析(含实现中出

16、错原因分析)1界面设计:2短进程优先调度算法3时间片轮转法调度算法4优先级调度算法本次实验中遇到的问题:1.短进程调度算法是否存在可抢占问题,如果可抢占,那就说明,首先,按先来先服务原则,哪个进程先到,则哪个进程作为第一个进程先执行,然后,根据短进程优先原则,对剩下的进程进行排序,哪个进程短,则作为第二个执行。以此类推。我在刚拿到题目时,没有理解清楚题意,只是简单对执行时间进行排序,所以没有达到老师要求。经过老师指导。改进后,符合了题意。2动态优先级算法中,我一开始只做出来了静态优先级,自己给进程提前设定优先级,所以,没达到老师要求,后来,改进后,优先级变为动态了。首先,每个进程的优先级是10减去执行时间,然后按时间片轮转后,优先级减一。这样就达到了动态的效果,防止了执行时间长的的进程一直抢不上CPU的情况。6 设计小结 这次课程设计我不仅学到了要审题细心外,还学到了遇到问题要坚持的精神。以前编程时,没有注意自己的编程风格,经过老师的指导下,我明白了课程设计,不仅要求把结果做出来外,还要求界面设计美观,不罗嗦,程序简洁,不繁琐。这使我在今后的编程中更加熟练,而且能让我养成一个好的编程习惯,对以后其他课程设计来说,有很大的帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号