多级反馈队列Word下载.docx

上传人:b****3 文档编号:13751533 上传时间:2022-10-13 格式:DOCX 页数:17 大小:120.21KB
下载 相关 举报
多级反馈队列Word下载.docx_第1页
第1页 / 共17页
多级反馈队列Word下载.docx_第2页
第2页 / 共17页
多级反馈队列Word下载.docx_第3页
第3页 / 共17页
多级反馈队列Word下载.docx_第4页
第4页 / 共17页
多级反馈队列Word下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

多级反馈队列Word下载.docx

《多级反馈队列Word下载.docx》由会员分享,可在线阅读,更多相关《多级反馈队列Word下载.docx(17页珍藏版)》请在冰豆网上搜索。

多级反馈队列Word下载.docx

通过选做上面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。

Ⅱ、设计进度及完成情况

日期

内容

6.13-6.15

选取参考书,查阅有关文献资料,完成课程设计说明书内容1部分。

完成课程设计说明书内容2-4部分

6.16~6.20

创建相关数据结构,录入源程序

6.21~6.22

调试程序并记录调试中的问题,完成课程设计说明书第5部分。

6.23

系统测试,演示设计成果,考核成绩。

6.24

整理课程设计说明书,上午11时,由学习委员交课程设计说明书(计算机科学系9#213或直接交给指导教师)

Ⅲ、主要参考文献及资料

[1]汤子赢等.计算机操作系统(第二版).西安电子科技大学出版社,2006.8

[2]冯耀霖等.操作系统,西安电子科技大学出版社.1992

[3]张尧学等.计算机操作系统教程(第2版).清华大学出版社,2001.4

[4]谭耀铭.操作系统.中国人民大学出版社,2003.4

[5]AbrahamSilberschatz,PeterGalvin&

GregGagne,AppliedOperatingSystemConcepts,HigherEducationPress,2002

Ⅳ、成绩评定:

设计成绩:

 

(教师填写)

指导老师:

(签字)

目 

第一章概述……………………………………………………………1

第二章系统分析………………………………………………………2

第三章系统设计………………………………………………………3

第四章程序设计流程图或N-S图……………………………………4

第五章调试过程中的问题及系统测试情况…………………………5

第六章结束语…………………………………………………………6

附录………………………………………………………………………7

第一章概述

课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《计算机操作系统》一门重要的专业课,是开发操作系统和软件系统的理论和应用基础。

第二章系统分析

很多进程调度方法都有一定的局限性,如短进程优先的调度法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则段进程优先和基于进程长度的抢占调度算法,都将无法使用,而多级反馈队列调度算法,则不必事先知道各种进程所需的时间,而且还可以满足各种类型进程的需要,因而它是目前被公认为的一种较好的进程调度算法。

在采用多级反馈队列调度算法的系统中,调度算法的实施过程如下:

(1)应设置多个就绪队列,并为各个队列赋予不同的优先级,第一个队列的优先级是最高,第二个队列次之,其余各队列的优先权逐个降低,该算法赋予各个队列中进程执行时间片,例如,第二个队列的时间片要不第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍。

(2)当一个新进程进入内存后,首先将它放入第一队列的结尾,按FCFS原则排队等待调度,当论到该进程执行时,如它能在该时间片后内完成,便可准备撤离系统,如果它在一个时间片结束尚未完成,调度程序便将该进程转入第二个队列的结尾,再同样地按FCFS原则等待调度执行;

如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三个队列,……,如此下去,当第一长作业(进程)从第一队列依次降到第n队列后,在第n队列中便采用取按时间片轮转的方式运行。

(3)仅当第一个队列空闲时,调度程序才调度第二个队列中的进程运行,仅当第1~(i-1)队列均空闲时,才会调度第I个队列中为某进程服务时,又有新进程进入优先权比较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占在运行进程的处理机,即由调度程序把在运行的进程放回到第I队列的结尾,把处理机分配给新到的高有限权进程。

第三章系统设计

实现多级反馈队列的模拟。

当一个新进程进入内存后,首先将它放入第一队列的结尾,按FCFS原则排队等待调度,当论到该进程执行时,如它能在该时间片后内完成,便可准备撤离系统,如果它在一个时间片结束尚未完成,调度程序便将该进程转入第二个队列的结尾,再同样地按FCFS原则等待调度执行;

仅当第一个队列空闲时,调度程序才调度第二个队列中的进程运行,仅当第1~(i-1)队列均空闲时,才会调度第I个队列中为某进程服务时,又有新进程进入优先权比较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占在运行进程的处理机,即由调度程序把在运行的进程放回到第I队列的结尾,把处理机分配给新到的高有限权进程。

至CPU

(时间片:

<

用VB模拟的时候,可以用list来显示进程。

第四章程序设计流程图或N-S图

第五章调试过程中的问题及系统测试情况

本系统主要可视的模拟了多级反馈队列的工作过程,多级反馈队列的工作过程如下:

第六章结束语

这次操作系统课程设计,在编写过程中,遇到很多难题,特别是在操作系统实验中不曾注意到的问题,也有许多新的问题,在实际反复调试运行中,不断加深了对操作系统的理解,也很大地程度上提高了编程的能力,由于对重要概念的把握程度还不够深入,在实际理解编写时遇到很多不该发生的问题。

不过,都很好的解决并牢牢地掌握住了。

通过做多级目录文件系统,我知道了多级目录文件系统的工作原理,在打开文件时系统是如何进行操作的,并加深了理解。

希望在以后的学习中,继续保持这份昂扬的斗志,继续努力学习计算机方面的知识,永不懈怠。

通过这次课程设计,不仅让我了解了多级反馈队列的进程管理系统,更重要的还让我学会了、或者说是验证了“做事一定要有次序和对事物的总体把握”这句话。

这次操作系统实习,不仅让我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握,还给了我今后做事的启示。

做事要塌实,不能想着一步登天,要有计划,有目的的进行做事。

盲目真的不应该再在我们新一代的大学生身上出现了,我们应该认真找到自己的缺点并且及时改正。

在这里,我感谢老师的教导。

“活到老,学到老”,这也是我整个学习过程中的一次经验、一次总结,我相信它肯定会给我今后的学习有所启示和指导作用。

附录:

源代码

#include<

stdio.h>

stdlib.h>

string.h>

typedefstructnode 

/*进程节点信息*/ 

charname[20];

/*进程的名字*/ 

intprio;

/*进程的优先级*/ 

intround;

/*分配CPU的时间片*/ 

intcputime;

/*CPU执行时间*/ 

intneedtime;

/*进程执行所需要的时间*/ 

charstate;

/*进程的状态,W--就绪态,R--执行态,F--完成态*/ 

intcount;

/*记录执行的次数*/ 

structnode*next;

/*链表指针*/ 

}PCB;

typedefstructQueue 

/*多级就绪队列节点信息*/ 

PCB*LinkPCB;

/*就绪队列中的进程队列指针*/ 

/*本就绪队列的优先级*/ 

/*本就绪队列所分配的时间片*/ 

structQueue*next;

/*指向下一个就绪队列的链表指针*/ 

}ReadyQueue;

PCB*run=NULL,*finish=NULL;

/*定义三个队列,就绪队列,执行队列和完成队列*/ 

ReadyQueue*Head=NULL;

/*定义第一个就绪队列*/ 

intnum;

/*进程个数*/ 

intReadyNum;

/*就绪队列个数*/ 

voidOutput();

/*进程信息输出函数*/ 

voidInsertFinish(PCB*in);

/*将进程插入到完成队列尾部*/ 

voidInsertPrio(ReadyQueue*in);

/*创建就绪队列,规定优先数越小,优先级越低*/ 

voidPrioCreate();

/*创建就绪队列输入函数*/ 

voidGetFirst(ReadyQueue*queue);

/*取得某一个就绪队列中的队头进程*/ 

voidInsertLast(PCB*in,ReadyQueue*queue);

/*将进程插入到就绪队列尾部*/ 

voidProcessCreate();

/*进程创建函数*/ 

voidRoundRun(ReadyQueue*timechip);

/*时间片轮转调度算法*/ 

voidMultiDispatch();

/*多级调度算法,每次执行一个时间片*/ 

intmain(void) 

PrioCreate();

/*创建就绪队列*/ 

ProcessCreate();

/*创建就绪进程队列*/ 

MultiDispatch();

/*算法开始*/ 

Output();

/*输出最终的调度序列*/ 

return0;

voidOutput() 

ReadyQueue*print=Head;

PCB*p;

printf("

进程名\t优先级\t轮数\tcpu时间\t需要时间\t进程状态\t计数器\n"

);

while(print) 

if(print->

LinkPCB!

=NULL) 

p=print->

LinkPCB;

while(p) 

%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n"

p->

name,p->

prio,p->

round,p->

cputime,p->

needtime,p->

state,p->

count);

p=p->

next;

print=print->

p=finish;

while(p!

=NULL) 

needt

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

当前位置:首页 > 求职职场 > 笔试

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

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