2022年高优先权优先的进程调度算法模拟 .pdf

上传人:Q****o 文档编号:27078076 上传时间:2022-07-21 格式:PDF 页数:12 大小:736.64KB
返回 下载 相关 举报
2022年高优先权优先的进程调度算法模拟 .pdf_第1页
第1页 / 共12页
2022年高优先权优先的进程调度算法模拟 .pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《2022年高优先权优先的进程调度算法模拟 .pdf》由会员分享,可在线阅读,更多相关《2022年高优先权优先的进程调度算法模拟 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、河南工业大学实验报告课程计算机操作系统实验名称高( 动态 ) 优先权优先的进程调度算法模拟系别信息科学与工程学院计算机科学系专业班级实验日期 2012-10-26 姓名学号教 师 审 批 签 字1. 实验目的通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。2. 实验环境装有操作系统Windows XP 和开发工具VC+6.0,内存在 256M以上的微机;或者:装有Linux(Fedora 7)操作系统和gcc 编译器,内存在256M以上的微机。3. 实验内容(1)用 C语言来实现对N 个进程采用动态优先权优先算法的进程调度。(2)每个用来标识进程的进程控制块PCB用结构来描述,包括

2、以下字段:进程标识数ID;进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高;进程已占用的CPU时间 CPUTIME ;进程还需占用的CPU时间 NEEDTIME 。当进程运行完毕时,NEEDTIME 变为 0;进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK 个时间片后,进程将进入阻塞状态;进程被阻塞的时间BLOCKTIME ,表示已阻塞的进程再等待BLOCKTIME 个时间片后,进程将转换成就绪状态;进程状态STATE ;(READY, RUNNING, BLOCK, FINISH) 队列指针NEXT ,用来将PCB排成队列。(3)优先数改变的原则:进

3、程在就绪队列中呆一个时间片,优先数增加1;进程每运行一个时间片,优先数减3。(4)假设在调度前,系统中有5 个进程,它们的初始状态如下:ID 0 1 2 3 4 PRIORITY 9 38 30 29 0 CPUTIME 0 0 0 0 0 NEEDTIME 3 3 6 3 4 STARTBLOCK 2 -1 -1 -1 -1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - BLOCKTIME 3 0 0 0 0 STATE

4、READY READY READY READY READY (5)为了清楚地观察进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下:RUNNING PROCESS: $id0 READY QUEUE: $id1-$id2 BLOCK QUEUE: $id3-$id4 FINISH QUEUE: $id0-$id1-$id2-$id3-$id4 = ID PRIORITY CPUTIME NEEDTIME STATE STARTBLOCK BLOCKTIME 0 XX XX XX XX XX XX 1 XX XX XX XX XX XX 2 XX XX XX XX XX

5、 XX 3 XX XX XX XX XX XX 4 XX XX XX XX XX XX = 4. 实验要求(1) 将源程序 (priority.c)和程序运行结果写入实验报告。(2) 将该算法执行过程与高响应比优先调度算法的执行过程进行比较。5. 实验过程及结果(1) . 代码:#include #include #include char *State = READY, RUNNING, BLOCK, FINISH; typedef struct PCB int id; int priority; int cputime; int needtime; int startblock; int

6、blocktime; char *state; struct PCB *next; struct PCB *nt; PCB; PCB *Ready, *Block, *Finish, *Runing, *ALL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - PCB *findHighest(); void insert(PCB *node, PCB *insert, int i); void ModifyPriority(

7、); void ModifyBlock(); void BlockToReady(); void Print(); void FreeAllPCB(); void init() PCB *pro = (PCB *)malloc(sizeof(PCB); Ready-next = ALL = pro; pro-id = 0; pro-priority = 9; pro-cputime = 0; pro-needtime = 3; pro-startblock = 2; pro-blocktime = 3; pro = pro-next = pro-nt = (PCB *)malloc(sizeo

8、f(PCB); pro-id = 1; pro-priority = 38; pro-cputime = 0; pro-needtime = 3; pro-startblock = -1; pro-blocktime = 0; pro = pro-next = pro-nt = (PCB *)malloc(sizeof(PCB); pro-id = 2; pro-priority = 30; pro-cputime = 0; pro-needtime = 6; pro-startblock = -1; pro-blocktime = 0; pro = pro-next = pro-nt = (

9、PCB *)malloc(sizeof(PCB); pro-id = 3; pro-priority = 29; pro-cputime = 0; pro-needtime = 3; pro-startblock = -1; pro-blocktime = 0; pro = pro-next = pro-nt = (PCB *)malloc(sizeof(PCB); pro-id = 4; pro-priority = 0; pro-cputime = 0; pro-needtime = 4; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -

10、 - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - pro-startblock = -1; pro-blocktime = 0; pro-next = pro-nt = NULL; PCB *findHighest() PCB *pro, *highest; PCB *propre = Ready; PCB *highpre = Ready; highest = pro = Ready-next; while(pro != NULL) if(pro-priority highest-priority) highest = pr

11、o; highpre = propre; propre = propre-next; pro = pro-next; highpre-next = highest-next; highest-next = NULL; return highest; void insert(PCB *node,PCB *insert,int i) node-state = Statei; node-next = insert-next; insert-next = node; void ModifyPriority() PCB *p; p = Ready-next; while(p !=NULL) p-prio

12、rity+; p = p-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - void ModifyBlock() PCB *p; p = Block-next; while(p !=NULL) p-blocktime-; p = p-next; void BlockToReady() PCB *p, *pre, *node; pre = Block; p = pre-next; while(p != NULL) if

13、(p-blocktime = 0) p-startblock-; node = p; p = pre-next = node-next; node-next = NULL; insert(node, Ready,0); else pre = pre-next; p = p-next; void Print() PCB *pro, *All; if(Runing != NULL)printf(RUNNING PROCESS: $id%dn, Runing-id); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -

14、- - - - - - 第 5 页,共 12 页 - - - - - - - - - printf(READY QUEUE: ); pro = Ready-next; while(pro != NULL) printf(-$id%d, pro-id); pro = pro-next; puts(); printf(BLOCK QUEUE: ); pro = Block-next; while(pro != NULL) printf(-$id%d, pro-id); pro = pro-next; puts(); printf(FINISH QUEUE: ); pro = Finish-next

15、; while(pro != NULL) printf(-$id%d, pro-id); pro = pro-next; puts(); printf(=n); printf(ID PRIORITY CPUTIME NEEDTIME STATE STARTBLOCK BLOCKTIMEn); All = ALL; while(All != NULL) printf(%d%10d%10d%10d%8s%10d%11dn, All-id, All-priority, All-cputime, All-needtime, All-state, All-startblock, All-blocktim

16、e); All = All-nt; void FreeAllPCB() free(Finish); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - int main(void) PCB *pro; Ready = (PCB *)malloc(sizeof(PCB); Block = (PCB *)malloc(sizeof(PCB); Finish = (PCB *)malloc(sizeof(PCB); Ready-next

17、 = NULL; Block-next = NULL; Finish-next = NULL; init(); while(Ready-next != NULL) pro = findHighest(); Runing = pro; pro-state = State1; pro-cputime+; pro-needtime-; if(pro-startblock 0) pro-startblock-; pro-priority -= 3; Print(); ModifyBlock(); ModifyPriority(); BlockToReady(); if(pro-needtime = 0

18、) insert(pro, Finish, 3); Runing=NULL; else if(pro-startblock = 0) insert(pro, Block, 2); else insert(pro, Ready, 0); Runing=NULL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 12 页 - - - - - - - - - Print(); FreeAllPCB(); return 0; 程序运行结果名师资料总结 - - -精品资料欢迎下载

19、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 12 页 - - - - - -

20、 - - - (2). 试验中的问题将该算法执行过程与高响应比优先调度算法的执行过程进行比较。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 12 页 - - - - - - - - - 为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了高优先权优先调度算法。 此算法常被用于批处理系统,作为作业调度算法,也作为多种操作系统中的进程调度算法, 还可用于实时系统。该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把

21、处理机分配给就绪队列中优先权最高的进程。动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。6. 实验中的问题及心得动态高优先权优先算法非常适合用在批处理操作系统中,而且也可以用在实时系统中, 具有非常好的作用。实验过程中遇到了很多的问题也发现了自己的不足,C 语言的功底还是不行啊,编程过程总是不知哪里出错,好在有同学帮助, 问题总算得以解决,C 语言还要学习啊,以后要复习一下编程语言,不能再在编程上出问题了,相信在以后的实验里,会有更大的收获。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 12 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁