版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南工业大学实验报告课程一计算机操作系统实验名称高(动态)优先权优先的进程调度算法模拟系别 信息科学与工程学院计算机科学系 专业班级 实验日期2012-10-26姓名 学号 教师审批签字实验目的通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。实验环境装有操作系统WindowsXP和开发工具VC++6.0,内存在256M以上的微机;或者:装有Linux(Fedora7)操作系统和gcc编译器,内存在256M以上的微机。实验内容用C语言来实现对N个进程采用动态优先权优先算法的进程调度。每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:进程标识数ID;进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高;进程已占用的CPU时间CPUTIME;进程还需占用的CPU时间NEEDTIME。当进程运行完毕时,NEEDTIME变为0;进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态;进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,进程将转换成就绪状态;进程状态STATE;(READY,RUNNING,BLOCK,FINISH)队列指针NEXT,用来将PCB排成队列。优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加1;进程每运行一个时间片,优先数减3。假设在调度前,系统中有5个进程,它们的初始状态如下:ID01234PRIORITY93830290CPUTIME00000NEEDTIME33634STARTBLOCK2-1-1-1-1BLOCKTIME30000STATE READY READY READY READY READY为了清楚地观察进程的调度过程,程序应将每个时间片内的进程的情况显示出来参照的具体格式如下:RUNNINGPROCESS:$id0READYQUEUE:$id1->$id2BLOCKQUEUE:$id3->$id4FINISHQUEUE:$id0->$id1->$id2->$id3->$id4IDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME0XXXXXXXXXXXX1XXXXXXXXXXXX2XXXXXXXXXXXX3XXXXXXXXXXXX4XXXXXXXXXXXX实验要求将源程序(priority.c)和程序运行结果写入实验报告。将该算法执行过程与高响应比优先调度算法的执行过程进行比较实验过程及结果(1).代码:#include<stdio.h>#include<string.h>#include<stdlib.h>char*State[]={"READY","RUNNING","BLOCK","FINISH"};typedefstructPCB{intid;intpriority;intcputime;intneedtime;intstartblock;intblocktime;char*state;structPCB*next;structPCB*nt;}PCB;PCB*Ready,*Block,*Finish,*Runing,*ALL;PCB*findHighest();voidinsert(PCB*node,PCB*insert,inti);voidModifyPriority();voidModifyBlock();voidBlockToReady();voidPrint();voidFreeAllPCB();voidinit(){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(sizeof(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=(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;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=pro;highpre=propre;}propre=propre->next;pro=pro->next;}highpre->next=highest->next;highest->next=NULL;returnhighest;}voidinsert(PCB*node,PCB*insert,inti){node->state=State[i];node->next=insert->next;insert->next=node;}voidModifyPriority(){PCB*p;p=Ready->next;while(p!=NULL){p->priority++;p=p->next;voidModifyBlock(){PCB*p;p=Block->next;while(p!=NULL){p->blocktime--;p=p->next;}}voidBlockToReady(){PCB*p,*pre,*node;pre=Block;p=pre->next;while(p!=NULL){if(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;}}}voidPrint(){PCB*pro,*All;if(Runing!=NULL)printf("RUNNINGPROCESS:$id%d\n",Runing->id);printf("READYQUEUE:");pro=Ready->next;while(pro!=NULL){printf("->$id%d",pro->id);pro=pro->next;}puts("");printf("BLOCKQUEUE:");pro=Block->next;while(pro!=NULL){printf("->$id%d",pro->id);pro=pro->next;}puts("");printf("FINISHQUEUE:");pro=Finish->next;while(pro!=NULL){printf("->$id%d",pro->id);pro=pro->next;}puts("");printf("===============================================================\n");printf("IDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME\n");All=ALL;while(All!=NULL){printf("%d%10d%10d%10d%8s%10d%11d\n",All->id,All->priority,All->cputime,All->needtime,All->state,All->startblock,All->blocktime);All=All->nt;}}voidFreeAllPCB(){free(Finish);}intmain(void){PCB*pro;Ready=(PCB*)malloc(sizeof(PCB));Block=(PCB*)malloc(sizeof(PCB));Finish=(PCB*)malloc(sizeof(PCB));Ready->next=NULL;Block->next=NULL;Finish->next=NULL;init();while(Ready->next!=NULL){pro=findHighest();Runing=pro;pro->state=State[1];pro->cputime++;pro->needtime--;if(pro->startblock>0){pro->startblock--;}pro->priority-=3;Print();ModifyBlock();ModifyPriority();BlockToReady();if(pro->needtime==0){insert(pro,Finish,3);Runing=NULL;}else{if(pro->startblock==0){insert(pro,Block,2);}else{insert(pro,Ready,0);}Runing=NULL;
Print();FreeAllPCB();return0;}程序运行结果RUNNINGPROCESS:$idl^EADVQUEUE:->$id0->$id2->$id3->$id4BLOCKQUEUE:FINISHQUEUE:IDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME0 903READV231 3512READV-10* 3006READV-10□ 2903READV-104 004READV-10誠C:\Windows\system32\cmd£»e4卜jRunningprocess:$idi^EADVQUEUE:->$id0->$id2->$id3->$id4BLOCKQUEUE:FINISHQUEUE:IDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME01003READV231 3221READV-10* 3106READV-10□ 3003READV-104 104READV-10誠C:\WindoW5\system32\cmd.exe
RUNNINGPROCESS:$id2READVQUEUE:BLOCKQUEUE:FINISHQUEUE:->$idB->$id3->$id4:->$idlIDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME01203READV231 2930READV-10* 3015READV-103 3203READV-104 3a4READV-10nrawC:\WindDws\system32\cmd,exeRUNNINGPROCESS:$id2READVQUEUE:BLOCKQUEUE:FINISHQUEUE->$id0->$id4:->$id3->$idlIDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME01803READV231 2930READV-10* 2442READV-10□2630READV-104 904READV-10■誠C:\Wind0ws\system32\cmd.exe
RUNNINGPROCESS:$id0HEADVQUEUE:->$id4BLOCKQUEUE:FINISHQUEUE::->$id2->$id3->$idlIDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME01812READV131 2930READV-10*1860READV-103 2630READV-104 12a4READV-10rawC:\Windows\system32\cmd.exeRUNNINGPROCESS:$id4READVQUEUE:BLOCKQUEUE:FINISHQUEUE->$idB:->$id2->$id3->$idlIDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME01521READV0312930READV-1021860READV-1032630READV-1041113READV-10■ 誠C:\Wind0W5\system32\cmd.exeRUNNINGPROCESS:$id4READVQUEUE:BLOCKQUEUE:RUNNINGPROCESS:$id4READVQUEUE:BLOCKQUEUE:->$id0FINISHQUEUE::->$id2->$id3->$idlIDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME0 1521READV011 2930READV-10*1860READV-103 2630READV-104 531READV-10rawC:\Windows\systeni32\cmd.exerawC:\Windows\system32\cmd.exe[RUNNINGPROCESS:$id0READVQUEUE:->$id4BLOCKQUEUE:rawC:\Windows\systrawC:\Windows\system32\cmd.exeIDPRIORITYCPUTIMENEEDTIMESTATESTARTBLOCKBLOCKTIME01230READV-1012930READV-1021860READV-1032630READV-104531READV-10rrrrawC:\Windows\system32\cmd.exeRUNNINGPROCESS:$id4READVQUEUE:BLOCKQUEUE:FINISHQUEUE:->$id0->$id2->$id3->$idlIDPRI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《基于深度学习的多步交通流预测研究》
- 2024年医疗设备维修与维护服务合同范本3篇
- 肺部感染居家护理个案
- 营养代谢疾病预防-洞察分析
- 虚拟现实技术在小儿麻痹症患者康复中的应用-洞察分析
- 外汇衍生品在汇率风险管理中的应用-洞察分析
- 预防溺水应急救护课件
- 新材料在空调中的应用-洞察分析
- 云南红药胶囊的功效与作用介绍课件
- 2024年度土地承包经营权流转纠纷调解协议范本3篇
- 超市柜台长期出租合同范例
- 人教版三年级下册数学期中测试卷含答案(新)
- 2024政府采购评审专家考试题库附含答案
- 第24课《穿井得一人》公开课一等奖创新教学设计 统编版语文七年级上册
- 提高吸入剂使用正确率品管圈成果汇报
- 2024年全新七年级语文上册期末试卷及答案(人教版)
- 北京邮电大学《大数据技术与应用》2022-2023学年期末试卷
- 2024年沪教版一年级上学期语文期末复习习题
- 吉林高校新型智库建设实施方案
- 前台文员的工作灵活性与适应能力计划
- 第八届全国测绘地理信息行业职业技能竞赛理论考试题库及答案
评论
0/150
提交评论