进程调度操作系统课程设计报告Word格式.docx

上传人:b****4 文档编号:7953897 上传时间:2023-05-09 格式:DOCX 页数:23 大小:639.21KB
下载 相关 举报
进程调度操作系统课程设计报告Word格式.docx_第1页
第1页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第2页
第2页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第3页
第3页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第4页
第4页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第5页
第5页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第6页
第6页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第7页
第7页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第8页
第8页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第9页
第9页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第10页
第10页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第11页
第11页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第12页
第12页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第13页
第13页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第14页
第14页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第15页
第15页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第16页
第16页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第17页
第17页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第18页
第18页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第19页
第19页 / 共23页
进程调度操作系统课程设计报告Word格式.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

进程调度操作系统课程设计报告Word格式.docx

《进程调度操作系统课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《进程调度操作系统课程设计报告Word格式.docx(23页珍藏版)》请在冰点文库上搜索。

进程调度操作系统课程设计报告Word格式.docx

有重大改进或独特见解,有一定实用价值

有较大改进或新颖的见解,实用性尚可

有一定改进或新的见解

有一定见解

观念陈旧

论文(计算书、图纸)撰写质量

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秒

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2