




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科学生课程设计任务书课程设计题目操作系统进程调度子系统的设计与实现学院计算机学院专业网络工程年级20XX已知参数和设计要求:设计要求:通过编程实现操作系统进程调度子系统的基本功能,其中,必须实现的调度算法有:先来先服务、时间片轮转、多级反馈轮转法、优先级等,在程序设计过程中,要求要有良好清晰的界面来观测进程调度的执行过程,在每个调度算法展示时,可以看到所有有关的队列结构和其中的内容,如就绪队列、阻塞队列等结构的动态变化的过程。需要的环境: 主要开发平台基于windows平台。使用Java、C、C+作为主要编码工具(其它开发工具也可选)。学生应完成的工作:(1) 完成课程设计的编码和测试。(编码需要实现所提要求的基本功能)(2) 上交课程设计报告(按照标准格式书写)课程设计的任务分配: 黄进:实现时间片轮转,多级反馈轮转,程序的可视化,程序调试,写报告 王博君:实现先来先服务,优先级算法(抢占式,非抢占式),程序的调试和检查,写报告 目前资料收集情况(含指定参考资料): 课程设计的工作计划:序号课程设计工作进度起止日期1课程设计任务书下发20XX.12.62文献查阅和资料准备20XX.12.6-20XX.12.203课程设计编码的设计20XX.1.5-20XX.1.64编码测试和设计验收20XX.1.7任务下达日期 20XX年 12 月 6 日完成日期 20XX年 1月 7 日指导教师 (签名)学 生 (签名)正文目录摘要及关键词51 设计目的及内容6 2 设计方案6 3 程序功能模块设计6 4 程序总控流程图8 5 数据结构设计86 程序主要代码及解析. . . . . . . . . . . .10 7 测试数据及测试结果14 7.1 主程序界面14 7.2 进程生成后界面15 7.3 开始模拟进程158设计过程中遇到的问题及解决方法17 9设计总结17摘要现代计算机系统中,进程是资源分配和独立运行的基本单位,是操作系统的核心概念。因而,进程就成为理解操作系统如何实现系统管理的最基本,也是最重要的概念。进程调度是进程管理过程的主要组成部分,是必然要发生的事件。在现代操作系统中,进程的并发机制在绝大多数时候,会产生不断变化的进程就绪队列和阻塞队列。处于执行态的进程无论是正常或非正常终止、或转换为阻塞状态,都会引发从就绪队列中,由进程调度选择一个进程进占CPU。进程调度的核心是进程调度算法在本课程设计中,用良好清晰的界面向用户展示了进程调度中的先来先服务算法,优先级(抢占式与非抢占式),时间片轮转法和多级反馈轮转法。在最终实现的成果中,用户可指定需要模拟的进程数,CPU时间片和进程的最大执行时间,并且选择需要演示的算法,界面将会动态的显示进程调度过程及各个队列的变化。同时,为了更加清晰直观的演示各个算法及各关键变量的变化,我们时时更新时间片,算法名称,当前进程信息,全局计时器以及进度条等。通过此进程调度模拟系统,用户可以对上述的四种算法有进一步以及直观的了解。关键词:进程调度 先来先服务 优先级法 时间片轮转 多级反馈轮转 一. 设计目的及内容1.1 设计目的课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,掌握进程调度的原理和方法,加强学生的动手能力。1.2 设计内容通过编程实现操作系统进程调度子系统的基本功能,其中,必须实现的调度算法有:先来先服务、时间片轮转、多级反馈轮转法、优先级等,在程序设计过程中,要求要有良好清晰的界面来观测进程调度的执行过程,在每个调度算法展示时,可以看到所有有关的队列结构和其中的内容,如就绪队列、阻塞队列等结构的动态变化的过程。二. 设计方案本次课程设计主要开发平台基于windows,我们使用C+并选择VS20XX作为开发工具实现进程调度模拟的可视化,以本学期的四次实验作为可视化编程基础,深入学习VS20XX的各种控件,使界面更加完善,实现先来先服务、时间片轮转、多级反馈轮转法、优先级(抢占式与非抢占式)这5个算法的可视化模拟调度,并在应用程序的结果分析中统计出5个算法的模拟时间,以比较各个算法的执行效率。三程序功能模块设计图形界面:采用visual studio 20XX软件,实现的界面如下: 图1 开始界面应用程序共有四个主菜单:参数设置,调度算法,结果分析,使用说明。参数设置:点击弹出供用户设置模拟参数的新窗口图2 参数设置界面调度算法 先来先服务:在就绪进程的队列中,从第一个开始执行下去,且进程开始执行后会一直执行完毕。 时间片轮转法:当正在执行的进程一个时间片用完后,按照先来先服务的原则在就绪进程队列中选取进程执行,正在执行的进程进入队尾。 多级反馈轮转:设置多个轮转队列,当一个进程在该队列时间片用完后,跳到下一个队列,继续执行。每个队列的时间片可以不同。 优先级算法: 非抢占式:在就绪进程队列中选取优先级最高的执行,相同优先级按照先来先服务原则进行选取,进程开始后不可被抢占。抢占式:在就绪进程队列中选取优先级最高的执行,相同优先级按照先来先服务原则进行选取,进程开始后可被抢占。结果分析 根据每个算法的运行情况,统计结果,进行比较分析,便于分析调度算法的效率。四程序总控流程图Y先来先服务时间片轮转多级反馈轮转优先级(抢占、非抢占)是否继续模拟结束启定时器执行选中的算法模拟是否结束写入信息统计设置参数开始选择算法YNN五数据结构设计5.1进程信息的数据结构 class processprotected:int name; / 进程名,标识进程的IDint spendtime; /进程已经执行的时间int costtime; /进程占用时间片的时间int needtime; /进程需要的总时间int starttime; /进程进入的时间int priority; /进程的优先级;5.2 各个队列的数据结构 class myqueueprotected:queue qp; /放进程的容器int dotime; /时间片大小int flag; /队列执行标识public:int getdotime(); / 取出时间片大小void setdotime(int dotimeq);/设置时间片大小void pop(); /弹出队列中的进程process& gethead(); /得到队首进程void push(process mpp);void pass(myqueue &mqq); /队列之间的传递函数int getflag();void setflag(int fflag);int isempty(); /判断当前队列是否为空int getsize(); /得到当前队列的大小,即:包含的进程数;5.3主程序数据结构 主要操作类:class dojobpublic:dojob(int dotime, int max, int big,int maxshow); /构造函数void createprocess(int max,int big,int maxshow); /创建进程进程void fun1(); /先来先服务算法函数void fun2(); /时间片轮转算法函数void fun3() /多级反馈轮转算法函数void fun4(int nowtime); /非抢占式优先级函数void fun5(int nowtime); /抢占式优先级函数void doprocess3(myqueue &qqnow,myqueue &qqnext,myqueue &qqfinish); /多级反馈轮转的处理函数void doprocess2(myqueue &qqfinish) /时间片轮转的处理函数void FIFO(myqueue &qnow); /先来先服务的处理函数 void priority_do_another(int nowtime); /非抢占式优先级的处理函数void priority_do(int nowtime); /抢占式优先级的处理函数;六程序主要代码及解析6.1各种调度算法的实现函数 (因篇幅有限,更多代码请参见程序源代码,此处不一一列举)void dojob:FIFO(myqueue & qnow) /先来先服务函数if (qnow.gethead().getneedtime() = 0) /如果进程所需时间等于该进程所需总时间,则转入完成队列qnow.pass(finishq);else qnow.gethead().setneedtime(qnow.gethead().getneedtime()-1); qnow.gethead().setspendtime(qnow.gethead().getspendtime()+1);void dojob:doprocess2(myqueue &qqfinish) /时间片轮转函数if (!q1.isempty()if(q1.gethead().getneedtime() = 0) /判断进程的剩余需要时间为0,q1.pass(qqfinish);return;elseif (q1.gethead().getcosttime()= q1.getdotime() /若进程在队列中的执行时间超过时间片,则进入等待队列q1.gethead().setcosttime(0);q1.push(q1.gethead();q1.pop();return;else /进程执行q1.gethead().setneedtime(q1.gethead().getneedtime()-1);q1.gethead().setspendtime(q1.gethead().getspendtime()+1); q1.gethead().setcosttime(q1.gethead().getcosttime()+1);return;void dojob:priority_do(int nowtime) /抢占式优先级函数int temp=-1;if(!IsVEmpty(vp)for (int i=0;ivp.size();i+) /使temp的初值为v容器中第一个还未执行的进程if(vpi.finishornot=false)temp=i;break;if(temp!=-1) /如果temp不为-1,说明还有未执行完的进程,则选出优先级最高的执行 for (int i=0;ivptemp.getpriority()&vpi.getstarttime()Interval = 1000; Protected: /Form1的析构数Form1()if (ponents)delete ponents; /添加的主要组件声明private: System:Windows:Forms:Button start;protected: private: System:Windows:Forms:Button stop;private: System:Windows:Forms:Button go_on;private: System:Windows:Forms:Button exit;private: System:Windows:Forms:MenuStrip menuStrip1;private: System:Windows:Forms:ToolStripMenuItem 参数设置ToolStripMenuItem; private: System:Windows:Forms:ToolStripMenuItem 调度算法ToolStripMenuItem;private: System:Windows:Forms:ToolStripMenuItem 先来先服务ToolStripMenuItem;private: System:Windows:Forms:ToolStripMenuItem 时间片ToolStripMenuItem;private: System:Windows:Forms:ToolStripMenuItem 多级反馈轮转ToolStripMenuItem;private: System:Windows:Forms:ToolStripMenuItem 优先级ToolStripMenuItem;private: System:Windows:Forms:StatusStrip statusStrip1;private:System:Windows:Forms:ToolStripStatusLabel toolStripStatusLabel1;private:System:Windows:Forms:ToolStripStatusLabel toolStripStatusLabel2;private:System:Windows:Forms:ToolStripStatusLabel toolStripStatusLabel3;private:System:Windows:Forms:ToolStripProgressBar toolStripProgressBar1;private:System:Windows:Forms:ToolStripStatusLabel toolStripStatusLabel4;private: System:Windows:Forms:ToolStripMenuItem 使用说明ToolStripMenuItem1;private: System:Windows:Forms:TextBox queue_1;private: System:Windows:Forms:TextBox queue_2;private: System:Windows:Forms:TextBox queue_3;private: System:Windows:Forms:Label label7;private: System:Windows:Forms:Label label8;private: System:Windows:Forms:Timer timer1;七测试数据及测试结果7.1 主程序界面 图3 主界面图弹出参数设置后的主界面,包括参数设置,调度算法,使用说明,结果分析四个主菜单。7.2 进程生成后界面 图4 进程生成后界面(以时间片轮转为例) (图中红色标记处为整个程序中时时变化的部分,在此标识使说明更直观) 可读出的信息如下表:进程名已执行时间总需时间执行进度时间片已完成队列就绪队列13秒6秒50%1秒2,41,3,7,6,5,87.3 开始模拟进程 由于时间片轮转上面已作为例子进行说明,概不赘述,只贴出其余算法的模拟进程,如下所示。图5 先来先服务的模拟截图图6 多级反馈轮转的模拟截图图7 优先级(以抢占式为例)的模拟截图图8 结果分析:各种算法总周转时间比较八设计中遇到的问题及解决方法8.1算法切换时的参数初始化问题 因为该程序要实现进程调度中几种主要算法的调度演示,并且进行比较。那么就需要在一组进程上,调用不同的算法,并比较结果。但是,当从一个算法转换到另一个算法时,涉及到一些关键变量的初始化问题,由于此次课程设计,是我们两个同学一起完成,在实现不同的代码时,用到一些各自的关键变量,这为程序的统一初始化带来了很大问题。在重新带代码检查多次后,找出这些关键变量,异种求同,并各自根据需要重新设置这些变量,调整算法的实现方法,最终,做到了几种算法的切换而不需要重启程序,也使得最后的结果分析有了其实际的分析价值。8.2优先级调度算法是用和其他算法不同的数据结构带来的问题 由于优先级调度需选出优先级最高的进程来执行,而其余算法采用的队列的数据结构,无法遍历各个进程,就无法选出优先级最高的进程。这使得优先级算法要是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 库存物资进出统计表
- 企业定制棋类礼品创新创业项目商业计划书
- 综合医院AI智能设备行业跨境出海项目商业计划书
- 自然保护区观鸟之旅企业制定与实施新质生产力项目商业计划书
- 体育场馆建筑和装饰装修AI应用行业跨境出海项目商业计划书
- 仪器仪表信息化管理创新创业项目商业计划书
- 书籍消毒设备创新创业项目商业计划书
- 福建船政交通职业学院《应急救护实训》2023-2024学年第二学期期末试卷
- 购物中心手工巧克力店企业制定与实施新质生产力项目商业计划书
- 南京邮电大学通达学院《概率论与随机过程(双语)》2023-2024学年第二学期期末试卷
- ISO9001质量管理体系培训考试试题含答案
- 全新入股在股东名下协议二零二五年
- 2025-2030中国雷达告警接收机行业市场发展趋势与前景展望战略研究报告
- 2025年一年级语文下册期末考试检测题苏教版
- 游泳池水质检测培训
- 国家级突发中毒事件卫生应急处置队建设规范
- 薪酬管理制度级差设计
- 2025年中考地理务必掌握的答题思路与模板
- 婚内单身协议书范本
- 工会法律知识培训课件
- 总经理讲安全课件
评论
0/150
提交评论