操作系统课程设计报告及代码.doc_第1页
操作系统课程设计报告及代码.doc_第2页
操作系统课程设计报告及代码.doc_第3页
操作系统课程设计报告及代码.doc_第4页
操作系统课程设计报告及代码.doc_第5页
已阅读5页,还剩10页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程设计 20101106651刘洋实习题目指导教师职 称学生姓名学 号日 期实习题目指导教师职 称学生姓名学 号日 期内蒙古师范大学计算机与信息工程学院操作系统课程设计报告实习题目指导教师职 称学生姓名学 号日 期设计题目处理机调度模拟程序指导教师职称姓 名学 号日 期1 设计任务处理机调度模拟程序:选择一个调度算法,实现处理机调度。2 设计的功能目标2.1设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。2.2 设计要求:1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。2)可选择进程数量3)本程序包括三种算法,可用c语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数及每个进程的运行时间,每个进程的优先数由随机函数产生且优先数随等待时间而变化,执行,显示结果。3 设计的思想、方法和技术首先,我设计了一个界面,上面显示了这次课程设计的题目及我的姓名和学号,接着,又用户根据提示输入进程数、到达时间、执行时间,时间片等要求后,通过菜单选项,选择要执行的算法,计算结束后,将会显示周转时间,带权周转时间等。具体设计时,我用到了一个结构体struct gzuo int id; /进程名字 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 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=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) 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.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;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; 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.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+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/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)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;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+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 进程调度算法模拟实验 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短进程优先调度算法 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 结果分析(含实现中出错原因分析)1界面设计:2短进程优先调度算法3时间片轮转法调度算法4优先级调度算法本次实验中遇到的问题:1.短进程调度算法是否存在可抢占问题,如果可抢占,那就说明,首先,按先来先服务原则,哪个进程先到,则哪个进程作为第一个进程先执行,然后,根据短进程优先原则,对剩下的进程进行排序,哪个进程短,则作为第二个执行。以此类推。我在刚拿到题目时,没有理解清楚题意,只是简单对执行时间进行排序,所以没有达到老师要求。经过老师指导。改进后,符合了题意。2动态优先级算法中,我一开始只做出来了静态优先级,自己给进程提前设定优先级,所以,没达到老师要求,后来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论