- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
《操作系统原理》课程实践报告
专
业
计算机科学与技术
班
级
计算机14-1
学
号
123123
姓
名
123123
指导教师 陈 珂
完成时间 2016.10.14
成 绩
PAGE
PAGE10
进程调度算法模拟
一、设计目的
编程实现进程调度的算法,更好地掌握操作系统的原理及实现方法,从而有利于把握进程调度细节。
二、设计要求
要求实现先来先服务,短作业优先,时间片轮转,高优先权调度算法四种算法并进行对比分析.
要求界面简单,易懂,关键代码部分要注释.
编程语言可以采用自己任意精通的语言
三、设计思想说明
先来先服务:程序的执行调度顺序按先进入队列的先获得执行,并且其他进程都不能中断正在执行的进程,要等进程完成后才能,让出CPU给其他进程。执行的时候可以随时在队列中插入进程。
短作业优先:进程的调度顺序按程序的服务时间来决定,进程的执行顺序。服务时间短的先被调用。调度时先从队列中选取服务时间最短的进程来执行。进程中途不能中断,即使此时队列中存在服务时间比其更短的进程,仍需要等待该进程执行完后才能被执行。
高优先权调度:选取进程中优先级最高的一个,以优先级的值大,优先级就大。
调度时总是选取队列中进程优先级最高的来执行,不管是否有某个进程在执行,只要存在比正在执行进程优先级高的进程,则就会立刻中断正在执行的进程,让给跟高优先级的进程。
时间片轮转:本课程设计采用多级反馈队列调度算法,设立4个进程队列,分给队列1的时间片为3秒,队列2的时间片为6秒,队列3的时间片为12秒,队列4的时间片为24秒。队列1的优先级最高,队列4的优先级最低。高优先级的队列没执行完,即不为空,就永远不执行其下面的低优先级的队列里面的
进程。当执行低优先级队列里面的进程时,突然间高优先级的队列插入了进程就立刻跳到高优先级的队列执行其里面的进程。每个队列的进程都是按先来先执行的顺序执行。进程初次执行肯定要进入队列1。如何从头到尾执行一遍队列1中的进程是,存在某些进程在队列1的时间片内还没执行完,就把进程移交到下一个队列中。每个队列都如此类推。直到最后一个队列4,如果在队列
4还有进程在本时间片内还没没执行完,就把该程序放到队尾,从新等待时间片执行。
四、算法流程
算法流程图
对各进程按到达时间进行排序判断是否所有
对各进程按到达
时间进行排序
判断是否所有
进程都被调度
是
结束
挑选最先到达的程序一次性执行完
SPJ调度算法流程图
判断所有进程是否已经结束否
判断所有进程是
否已经结束
否
查找当前已经到达的最短进
调用该进程
是
结束
高优先权调度算法流程图
所有进程按到达时间排序进程是否已经
所有进程按到达时间排序
进程是否已经
调度完毕
否
是
结束
调度该进程至结束
按优先级大小选定一个已到达的进程
(4)时间片轮转调度算法
所有进程按到达时间排序
所有进程按到达时间排序
否
否
进程是否已经
调度完毕
是
结束
当前进程减去一个时间片单位
按轮转顺序选定一个已到达的进程
进程控制块PCB的设计
进程属性变量名数据类型进程名sNamechar进程状态
进程属性
变量名
数据类型
进程名
sName
char
进程状态
iStatus
int
优先级
iPrivilege
int
服务时间
iRunTime
int
进程等待时间
iWaitTime
int
五、实现过程与结果
1.先来先服务算法运行结果
短进程优先算法运行结果
髙相应比优先算法运行结果
时间片轮转算法运行结果
六、源程序#includestdio.h#includestring.h#includeiostream.h
constintblock_time=10;//定义时间片的长度为10秒constintMAXPCB=100;//定义最大进程数
//定义进程结构体typedefstructnode{
charsName[20]; //进程名
intiStatus; //进程状态
intiRunTime; //进程需运行的时间intiPrivilege; //进程的优先数
intiFinished; //标志进程是否执行完成intiWaitTime; //进程的等待时间
}pcb;
pcbpcbs[MAXPCB];intiPCBNum;
voidinitPCB() //PCB初始化函数
{
inti;
for(i=0;iMAXPCB;i++)
{
strcpy(pcbs[i].sName,);pcbs[i].iStatus=0;pcbs[i].iRunTime=0;pcbs[i].iPrivi
文档评论(0)