进程调度操作系统课程设计报告Word格式.docx
- 文档编号:7953897
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:23
- 大小:639.21KB
进程调度操作系统课程设计报告Word格式.docx
《进程调度操作系统课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《进程调度操作系统课程设计报告Word格式.docx(23页珍藏版)》请在冰点文库上搜索。
有重大改进或独特见解,有一定实用价值
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解
观念陈旧
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;
图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;
图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;
图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;
图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;
图纸不工整或不清晰
指导教师评定成绩:
指导教师签名:
杨瑞龙2011年1月7日
王博君学号:
20085680
重庆大学本科学生课程设计任务书
课程设计题目
操作系统进程调度子系统的设计与实现
学院
计算机学院
专业
网络工程
年级
2008
已知参数和设计要求:
设计要求:
通过编程实现操作系统进程调度子系统的基本功能,其中,必须实现的调度算法有:
先来先服务、时间片轮转、多级反馈轮转法、优先级等,在程序设计过程中,要求要有良好清晰的界面来观测进程调度的执行过程,在每个调度算法展示时,可以看到所有有关的队列结构和其中的内容,如就绪队列、阻塞队列等结构的动态变化的过程。
需要的环境:
主要开发平台基于windows平台。
使用Java、C、C++作为主要编码工具(其它开发工具也可选)。
学生应完成的工作:
(1)完成课程设计的编码和测试。
(编码需要实现所提要求的基本功能)
(2)上交课程设计报告(按照标准格式书写)
课程设计的任务分配:
黄进:
实现时间片轮转,多级反馈轮转,程序的可视化,程序调试,写报告
王博君:
实现先来先服务,优先级算法(抢占式,非抢占式),程序的调试和检查,写报告
目前资料收集情况(含指定参考资料):
[1]计算机操作系统教程张尧学,史美林编著清华大学出版社2006第3版
[2]Windows操作系统原理(重点大学计算机教材)
尤晋元、史美林、陈向群等人编著清华大学出版社2001年8月第1版
[3]计算机操作系统实验指导,郁红英,李春强,清华大学出版色,2008年9月第一版
课程设计的工作计划:
序号
课程设计工作进度
起止日期
1
课程设计任务书下发
2010.12.6
2
文献查阅和资料准备
2010.12.6-2010.12.20
3
课程设计编码的设计
2011.1.5-2011.1.6
4
编码测试和设计验收
2011.1.7
任务下达日期2010年12月6日
完成日期2011年1月7日
指导教师杨瑞龙(签名)
学生黄进,王博君(签名)
正文目录
摘要及关键词5
1设计目的及内容6
2设计方案6
3程序功能模块设计6
4程序总控流程图8
5数据结构设计8
6程序主要代码及解析.........................10
7测试数据及测试结果14
7.1主程序界面14
7.2进程生成后界面15
7.3开始模拟进程15
8设计过程中遇到的问题及解决方法17
9设计总结17
10参考文献............................................18
摘要
现代计算机系统中,进程是资源分配和独立运行的基本单位,是操作系统的核心概念。
因而,进程就成为理解操作系统如何实现系统管理的最基本,也是最重要的概念。
进程调度是进程管理过程的主要组成部分,是必然要发生的事件。
在现代操作系统中,进程的并发机制在绝大多数时候,会产生不断变化的进程就绪队列和阻塞队列。
处于执行态的进程无论是正常或非正常终止、或转换为阻塞状态,都会引发从就绪队列中,由进程调度选择一个进程进占CPU。
进程调度的核心是进程调度算法.
在本课程设计中,用良好清晰的界面向用户展示了进程调度中的先来先服务算法,优先级(抢占式与非抢占式),时间片轮转法和多级反馈轮转法。
在最终实现的成果中,用户可指定需要模拟的进程数,CPU时间片和进程的最大执行时间,并且选择需要演示的算法,界面将会动态的显示进程调度过程及各个队列的变化。
同时,为了更加清晰直观的演示各个算法及各关键变量的变化,我们时时更新时间片,算法名称,当前进程信息,全局计时器以及进度条等。
通过此进程调度模拟系统,用户可以对上述的四种算法有进一步以及直观的了解。
关键词:
进程调度先来先服务优先级法时间片轮转多级反馈轮转
一.设计目的及内容
1.1设计目的
课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,掌握进程调度的原理和方法,加强学生的动手能力。
1.2设计内容
二.设计方案
本次课程设计主要开发平台基于windows,我们使用C++并选择VS2010作为开发工具实现进程调度模拟的可视化,以本学期的四次实验作为可视化编程基础,深入学习VS2010的各种控件,使界面更加完善,实现先来先服务、时间片轮转、多级反馈轮转法、优先级(抢占式与非抢占式)这5个算法的可视化模拟调度,并在应用程序的结果分析中统计出5个算法的模拟时间,以比较各个算法的执行效率。
三.程序功能模块设计
图形界面:
采用visualstudio2010软件,实现的界面如下:
图1开始界面
应用程序共有四个主菜单:
参数设置,调度算法,结果分析,使用说明。
·
参数设置:
点击弹出供用户设置模拟参数的新窗口
图2参数设置界面
调度算法
先来先服务:
在就绪进程的队列中,从第一个开始执行下去,且进程开始执行后会一直执行完毕。
时间片轮转法:
当正在执行的进程一个时间片用完后,按照先来先服务的原则在就绪进程队列中选取进程执行,正在执行的进程进入队尾。
多级反馈轮转:
设置多个轮转队列,当一个进程在该队列时间片用完后,跳到下一个队列,继续执行。
每个队列的时间片可以不同。
优先级算法:
非抢占式:
在就绪进程队列中选取优先级最高的执行,相同优先级按照先来先服务原则进行选取,进程开始后不可被抢占。
抢占式:
在就绪进程队列中选取优先级最高的执行,相同优先级按照先来先服务原则进行选取,进程开始后可被抢占。
结果分析
根据每个算法的运行情况,统计结果,进行比较分析,便于分析调度算法的效率。
四.程序总控流程图
N
五.数据结构设计
5.1进程信息的数据结构
classprocess
{
protected:
intname;
//进程名,标识进程的ID
intspendtime;
//进程已经执行的时间
intcosttime;
//进程占用时间片的时间
intneedtime;
//进程需要的总时间
intstarttime;
//进程进入的时间
intpriority;
//进程的优先级
};
5.2各个队列的数据结构
classmyqueue
queue<
process>
qp;
//放进程的容器
intdotime;
//时间片大小
intflag;
//队列执行标识
public:
intgetdotime();
//取出时间片大小
voidsetdotime(intdotimeq);
//设置时间片大小
voidpop();
//弹出队列中的进程
process&
gethead();
//得到队首进程
voidpush(processmpp);
voidpass(myqueue&
mqq);
//队列之间的传递函数
intgetflag();
voidsetflag(intfflag);
intisempty();
//判断当前队列是否为空
intgetsize();
//得到当前队列的大小,即:
包含的进程数
5.3主程序数据结构
主要操作类:
classdojob
dojob(intdotime,intmax,intbig,intmaxshow);
//构造函数
voidcreateprocess(intmax,intbig,intmaxshow);
//创建进程进程
voidfun1();
//先来先服务算法函数
voidfun2();
//时间片轮转算法函数
voidfun3()//多级反馈轮转算法函数
voidfun4(intnowtime);
//非抢占式优先级函数
voidfun5(intnowtime);
////抢占式优先级函数
voiddoprocess3(myqueue&
qqnow,myqueue&
qqnext,myqueue&
qqfinish);
//多级反馈轮转的处理函数
voiddoprocess2(myqueue&
qqfinish)//时间片轮转的处理函数
voidFIFO(myqueue&
qnow);
//先来先服务的处理函数
voidpriority_do_another(intnowtime);
//非抢占式优先级的处理函数
voidpriority_do(intnowtime);
//抢占式优先级的处理函数
六.程序主要代码及解析
6.1各种调度算法的实现函数
(因篇幅有限,更多代码请参见程序源代码,此处不一一列举)
voiddojob:
:
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);
}
doprocess2(myqueue&
qqfinish)//时间片轮转函数
if(!
q1.isempty())
if(q1.gethead().getneedtime()==0)//判断进程的剩余需要时间为0,
{
q1.pass(qqfinish);
return;
}
else
if(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;
priority_do(intnowtime)//抢占式优先级函数
inttemp=-1;
if(!
IsVEmpty(vp))
for(inti=0;
i<
vp.size();
i++)
//使temp的初值为v容器中第一个还未执行的进程
if(vp[i].finishornot==false)
{
temp=i;
break;
if(temp!
=-1)
//如果temp不为-1,说明还有未执行完的进程,则选出优先级最高的执行
{
//通过此循环找到优先级最高且满足到达时间的进程
{if(vp[i].finishornot==false&
&
vp[i].getpriority()>
vp[temp].getpriority()&
vp[i].getstarttime()<
=nowtime)
if(vp[temp].getneedtime()==0)
vp[temp].finishornot=true;
//标明该进程已经执行完
finishq.push(vp[temp]);
//将完成进程放至finishq
vp[temp].setspendtime(vp[temp].getspendtime()+1);
vp[temp].setneedtime(vp[temp].getneedtime()-1);
pNOW=temp;
6.2程序可视化实现中的主窗体函数
publicrefclassForm1:
publicSystem:
Windows:
Forms:
Form//Form1
public:
form2data_form;
formresultresult_form;
forminforinformation_form
intflag;
Form1(void)//Form1的构造函数
InitializeComponent();
nowtime=0;
timer1->
Interval=1000;
Protected:
//Form1的析构数
~Form1()
if(components)
deletecomponents;
}//添加的主要组件声明
private:
System:
Button^start;
protected:
Button^stop;
Button^go_on;
Button^exit;
MenuStrip^menuStrip1;
ToolStripMenuItem^参数设置ToolStripMenuItem;
ToolStripMenuItem^调度算法ToolStripMenuItem;
ToolStripMenuItem^先来先服务ToolStripMenuItem;
ToolStripMenuItem^时间片ToolStripMenuItem;
ToolStripMenuItem^多级反馈轮转ToolStripMenuItem;
ToolStripMenuItem^优先级ToolStripMenuItem;
StatusStrip^statusStrip1;
System:
ToolStripStatusLabel^toolStripStatusLabel1;
ToolStripStatusLabel^toolStripStatusLabel2;
ToolStripStatusLabel^toolStripStatusLabel3;
ToolStripProgressBar^toolStripProgressBar1;
ToolStripStatusLabel^toolStripStatusLabel4;
ToolStripMenuItem^使用说明ToolStripMenuItem1;
TextBox^queue_1;
TextBox^queue_2;
TextBox^queue_3;
Label^label7;
Label^label8;
Timer^timer1;
七.测试数据及测试结果
7.1主程序界面
图3主界面图
弹出参数设置后的主界面,包括参数设置,调度算法,使用说明,结果分析四个主菜单。
7.2进程生成后界面
图4进程生成后界面(以时间片轮转为例)
(图中红色标记处为整个程序中时时变化的部分,在此标识使说明更直观)
可读出的信息如下表:
进程名
已执行时间
总需
时间
执行
进度
时间片
已完成队列
就绪
队列
3秒
6秒
50%
1秒
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 调度 操作系统 课程设计 报告