优先级调度算法实验报告

上传人:dao****ing 文档编号:53696262 上传时间:2022-02-10 格式:DOC 页数:9 大小:118.50KB
收藏 版权申诉 举报 下载
优先级调度算法实验报告_第1页
第1页 / 共9页
优先级调度算法实验报告_第2页
第2页 / 共9页
优先级调度算法实验报告_第3页
第3页 / 共9页
资源描述:

《优先级调度算法实验报告》由会员分享,可在线阅读,更多相关《优先级调度算法实验报告(9页珍藏版)》请在装配图网上搜索。

1、优先级调度算法实验报告 院系:*学院 班级:* 姓名:* 学号:*一、实验题目:优先级调度算法二、实验目的 进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先级算法的具体实施办法。 三、实验内容1.设计进程控制块PCB的结构,通常应包括如下信息:进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程到完成还需要的时间、进程的状态、当前队列指针等。2.编写优先级调度算法程序3.按要求输出结果。四、实验要求每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINI

2、SH),并假定初始状态为就绪状态。(一)进程控制块结构如下: NAME进程标示符 PRIO/ROUND进程优先数 NEEDTIME进程到完成还需要的时间片数 STATE进程状态 NEXT链指针注: 1.为了便于处理,程序中进程的的运行时间以时间片为单位进行计算; 2.各进程的优先数或,以及进程运行时间片数的初值,均由用户在程序运行时给定。(二)进程的就绪态和等待态均为链表结构,共有四个指针如下: RUN当前运行进程指针 READY就需队列头指针 TAIL就需队列尾指针 FINISH完成队列头指针五、实验结果:六、实验总结: 首先这次实验的难度不小,它必须在熟悉掌握数据结构的链表和队列的前提下才

3、能完成,这次实验中用了三个队列,就绪队列,执行队列和完成队列,就绪队列中的优先级数是有序插入的,当进行进程调度的时候,需要先把就绪队列的队首节点(优先级数最大的节点)移入执行队列中,当执行进程结束后,判断该进程是否已经完成,如果已经完成则移入完成队列,如果没有完成,重新有序插入就绪队列中,这就是这次实验算法的思想。附录(算法代码):#include #include #include typedef struct nodechar name20; /*进程的名字*/ int prio; /*进程的优先级*/ /int cputime; /*CPU执行时间*/ int needtime; /*进

4、程执行所需要的时间*/ char state; /*进程的状态,W-就绪态,R-执行态,F-完成态*/ struct node *next; /*链表指针*/PCB;PCB *ready=NULL,*run=NULL,*finish=NULL; /*定义三个队列,就绪队列,执行队列和完成队列*/ int num;void GetFirst(); /*从就绪队列取得第一个节点*/ void Output(); /*输出队列信息*/ void InsertPrio(PCB *in); /*创建优先级队列,规定优先数越小,优先级越高*/ void InsertTime(PCB *in); /*时间片

5、队列*/ void InsertFinish(PCB *in); /*时间片队列*/ void PrioCreate(); /*优先级输入函数*/ /void TimeCreate(); /*时间片输入函数*/ void Priority(); /*按照优先级调度*/ /void RoundRun(); /*时间片轮转调度*/ void main() printf(优先数调度算法n);printf(请输入要创建的进程数目:);scanf(%d,&num);PrioCreate();Priority();Output();void GetFirst() /*取得第一个就绪队列节点*/ run =

6、 ready; if(ready!=NULL) run -state = R; ready = ready -next; run -next = NULL; void Output() /*输出队列信息*/ PCB *p; p = ready; printf(进程名t优先级t需要时间t进程状态n); while(p!=NULL) printf(%st%dt%dtt%ctn,p-name,p-prio,p-needtime,p-state); p = p-next; p = finish; while(p!=NULL) printf(%st%dt%dtt%ctn,p-name,p-prio,p-

7、needtime,p-state); p = p-next; p = run; while(p!=NULL) printf(%st%dt%dtt%ctn,p-name,p-prio,p-needtime,p-state); p = p-next; void InsertPrio(PCB *in) /*创建优先级队列,规定优先数越小,优先级越低*/ PCB *fst,*nxt; fst = nxt = ready; if(ready = NULL) /*如果队列为空,则为第一个元素*/ in-next = ready; ready = in; else /*查到合适的位置进行插入*/ if(in

8、 -prio = fst -prio) /*比第一个还要大,则插入到队头*/ in-next = ready; ready = in; else while(fst-next != NULL) /*移动指针查找第一个别它小的元素的位置进行插入*/ nxt = fst; fst = fst-next; if(fst -next = NULL) /*已经搜索到队尾,则其优先级数最小,将其插入到队尾即可*/ in -next = fst -next; fst -next = in; else /*插入到队列中*/ nxt = in; in -next = fst; void InsertFinish

9、(PCB *in) /*将进程插入到完成队列尾部*/ PCB *fst; fst = finish; if(finish = NULL) in-next = finish; finish = in; else while(fst-next != NULL) fst = fst-next; in -next = fst -next; fst -next = in; void PrioCreate() /*优先级调度输入函数*/ PCB *tmp; int i; printf(输入进程名字,进程所需时间和优先级数:n); for(i = 0;i name); getchar(); /*吸收回车符号

10、*/ scanf(%d,&(tmp-needtime); getchar();scanf(%d,&(tmp-prio); / tmp -cputime = 0; tmp -state =W; /tmp -prio = 20 - tmp-needtime; /*设置其优先级,需要的时间越多,优先级越低*/ InsertPrio(tmp); /*按照优先级从高到低,插入到就绪队列*/ void Priority() /*按照优先级调度,每次执行一个时间片*/ int flag = 1; GetFirst(); while(run != NULL) /*当就绪队列不为空时,则调度进程如执行队列执行*

11、/ Output(); /*输出每次调度过程中各个节点的状态*/ while(flag) run-prio -= 3; /*优先级减去三*/ /run-cputime+; /*CPU时间片加一*/ run-needtime-;/*进程执行完成的剩余时间减一*/ if(run-needtime = 0)/*如果进程执行完毕,将进程状态置为F,将其插入到完成队列*/ run -state = F; / run-count+; /*进程执行的次数加一*/ InsertFinish(run); flag = 0; else /*将进程状态置为W,入就绪队列*/ run-state = W; /run-count+; /*进程执行的次数加一*/ /InsertTime(run);/再次插入就绪队列尾部 InsertPrio(run);flag = 0; flag = 1; GetFirst(); /*继续取就绪队列队头进程进入执行队列*/

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!