ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:191.95KB ,
资源ID:5931599      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5931599.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OS课程设计模拟处理机调度算法MFC实现.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OS课程设计模拟处理机调度算法MFC实现.docx

1、OS课程设计模拟处理机调度算法MFC实现课程设计报告 设计题目:处理机调度算法模拟实现 班级 : 学号: 姓名: 指导老师: 设计时间: 2012年八月摘要1、主要算法包括:先来先服务、短作业优先、高优先权优先、基于时间片的轮转、多级反馈队列调度算法。2、内容要求:1)定义与算法相关的数据结构,如进程控制块(PCB),相关队列(队列要考虑实际应用,应采用类似于类的私有成员定义所用到的队列,并使用公有函数提供对类的操作);2)所设计的系统中至少需要实现三种以上调度算法,且必须包含多级反馈队列调度算法;3)提供用户选择功能,用户可以根据需要选择采用何种调度算法;4)算法执行结构之后,应该给出周转时

2、间和平均周转时间。本系统模拟操作系统处理机调度算法的实现,实现了先来先服务、短作业优先、基于时间片的轮转、多级反馈队列调度算法四种调度算法的模拟实现,可以根据需要自行选择合适的调度算法,进程用PCB来控制,队列由PCB相链接而成,分为就绪队列,阻塞队列,完成队列。进程在在运行时可以随时挂起暂停进程执行,待条件满足后,继续恢复运行,进程在运行的时候优先权是不断的变化的,运行的时间越长,优先级会相应减小。关键词:先来先服务,短作业优先,高优先权优先,基于时间片的轮转,多级反馈队列调度算法。目录1.概述 .42.课程设计任务及要求 2.1 设计任务 .4 2.2 设计要求 .43.算法及数据结构 3

3、.1算法的总体思想(流程) 5 3.2 PCB模块 3.2.1功能(运算) .53.2.2数据结构(存储结构) .53.2.3算法(实现) .5 3.3 进程队列模块3.3.1功能 63.3.2数据结构 63.3.3算法 64.程序设计与实现 4.1 程序流程图 .7 4.2 程序说明(代码) 4.3实验结果 .105.结论 .116.参考文献。 .117.收获、体会和建议。 .11一:概述定义与算法相关的数据结构,模拟操作系统处理机调度算法的实现,至少实现3种以上算法,且必须包含多级反馈队列调度算法;提供用户选择功能,用户可以根据需要选择采用何种调度算法;算法执行结构之后,应该给出周转时间和

4、平均周转时间。二:课程设计任务及要求设计任务:使用Visual C+ 模拟实现处理机调度算法,实现先来先服务、短作业优先、基于时间片的轮转、多级反馈队列调度算法。设计要求:所设计的系统中至少需要实现三种以上调度算法,且必须包含多级反馈队列调度算法;提供用户选择功能,用户可以根据需要选择采用何种调度算法;算法执行结构之后,应该给出周转时间和平均周转时间。三:算法及数据结构进程控制块数据结构和相应的操作。classPCBpublic: PCB(void); PCB(PCB&); voidCreat(CString ,int ); PCB(void); voidUpdate(); /剩余时间与运行时

5、间更新 CStringShowPro(); /返回进程信息 boolIsEnd(); /判断进行是否执行完成 voidDispose(); /锁定进程 boolIsLocked(); /判断进程是否锁住 voidTerminal(); /强制终止进程函数 intGetServiceT(); /获得需要服务时间 floatGetPrio(); /返回进程优先级 CStringGetCurTime(); /返回当前系统时间 CStringGetName(); /获取进程名称 voidUpdateGoneTime(); /更新进程周转时间 intGetGoneTime(); /返回进程周转时间 in

6、tGetRuningTime(); /返回进程运行时间private: CStringName; /进程名称 CStringStart; /创建时间 intServiceT; /需要服务时间 intRunningT; /已运行时间 intRemainT; /剩余时间 intGoneTime; /消逝时间 | 周转时间 intID; /进程标识符 CStringReadyTime; /进程成为就绪进程的时间 floatprio; /进程优先权 intLocked; /进程锁 staticintcount ; /计数;#include StdAfx.h#include PCB.hint PCB:c

7、ount =0;PCB:PCB(void) RemainT=0; /标志对象初始化时没有值,相当于为空! Locked=1; GoneTime=0;PCB:PCB(PCB &data) Name=data.Name; Start=data.Start; ServiceT=data.ServiceT; RunningT=data.RunningT; RemainT=data.RemainT; ID=data.ID; ReadyTime=data.ReadyTime; prio=data.prio; GoneTime=data.GoneTime; Locked=0; /解锁PCB:PCB(void

8、)CString PCB:GetName() return Name;CString PCB:GetCurTime() if (Locked=1) return ; /(CTime:GetCurrentTime().Format(%H:%M:%S) SYSTEMTIME TM; :GetSystemTime(&TM); CString tmp; tmp.Format( %d:%d:%d ,(8+TM.wHour)%24,TM.wMinute,TM.wSecond); return tmp;int PCB:GetServiceT() return ServiceT;float PCB:GetPr

9、io() return prio;void PCB:Creat(CString name , int needtime) Locked=0; /默认为锁定Locked=1,创建需解锁! Name = name; Start = GetCurTime(); ServiceT = needtime; RunningT=0; RemainT=needtime; ID=count; count+; if (count100) count=0; ReadyTime=GetCurTime(); GoneTime=0; prio =(float)RemainT/ ServiceT; void PCB:Upd

10、ateGoneTime() if (Locked=1) return ; GoneTime+;void PCB:Update() if (Locked=1) return ; RunningT+; if (RemainT0) RemainT-; prio =(float) RemainT/ ServiceT;void PCB:Dispose() Locked=1;CString PCB:ShowPro() if (Locked=1) return ; CString tmp ; tmp.Format(进程名:%s,进程ID:%d,创建时间:%s,需要时间:%d,已运行时间:%d,剩余时间:%d

11、,优先权:%f,Name,ID,ReadyTime,ServiceT,RunningT,RemainT,prio); return tmp;bool PCB:IsEnd() if (RemainTnext =NULL;Queue:Queue()/template bool Queue:IsEmpty() if (first-next = NULL) return true; else return false;/template void Queue:Enqueue(PCB data) Node *s = new Node; s-Data =data; Node *p; /work Ptr p

12、 = first; while(p-next) p=p-next; p-next =s; s-next =NULL;/template void Queue:Dequeue() first-next = first-next-next;int Queue:GetLength() int count =0; Node *p =first-next; while(p) count+; p=p-next; return count;CString Queue:Print() Node *p=first; int n =GetLength(); CString tmp =; for (int i=0;

13、inext-Data.ShowPro(); tmp+=rn; p=p-next; return tmp;PCB Queue:GetFirst() PCB tmp = first-next-Data; Dequeue(); return tmp;void Queue:Update() Node *p =first-next; while(p) p-Data.Update(); p=p-next; void Queue:UpdateGoneTime() Node *p =first-next; while(p) p-Data.UpdateGoneTime(); p=p-next; void Que

14、ue:LeastFirst() Node *p=NULL; Node *q=NULL; if(first-next=NULL) return; for(p=first-next;p-next;p=p-next) for (q=p-next;q;q=q-next) if (p-Data.GetServiceT()q-Data.GetServiceT() PCB tmp; tmp=p-Data; p-Data=q-Data; q-Data=tmp; void Queue:HighPrio() Node *p=NULL; Node *q=NULL; for(p=first-next;p-next;p

15、=p-next) for (q=p-next;q;q=q-next) if (p-Data.GetPrio()q-Data.GetPrio() PCB tmp; tmp=p-Data; p-Data=q-Data; q-Data=tmp; void Queue:Clear() while(first-next!=NULL) Node *tmp=first-next; first-next=tmp-next; delete tmp; CString Queue:GetGoneTime() CString tmp; CString Ret; Node *p =first-next; int tim

16、e=0; while(p) tmp.Format(进程名:%s,周转时间:%drn,p-Data.GetName(),p-Data.GetGoneTime(); time+=p-Data.GetGoneTime(); Ret+=tmp; p=p-next; tmp.Format(平均周转时间:%.2f,(float)(time/GetLength(); Ret+=tmp; return Ret;Node* Queue:GetFirstPtr() return first;四:程序设计与实现。 流程图 实验结果:五:收获,体会和建议 本次课程设计让我更加深刻的理解了操作系统的处理机调度算法,对进程间的调度有了较为深刻的看法,加强了对教材的理解,并且帮助自己复习了MFC的有关知识,对C+也能更加熟练的使用。本次实验让我自己再次认识到动手实验的重要性,理论研究的再透彻,也必须通过实践来引导,只有不断动手做实验,才能加强对程序设计的理解,多动手才能积累经验,平时遇到的错误耐心查找资料一个个解决,下一次再遇到时能够轻松解决,在以后的学习过程中,一定要加强自己的动手能力,充分利用自己手头的资源,养成多动手写代码的好习惯。 六:参考资料和书籍。MFC程序设计 -Jeff Prosise操作系统 -Achyut Godbole计算机操作系统-汤子瀛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1