版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告课程名称计算机操作系统实验名称进程调度算法模拟专业班级学生姓名指导教师实验一进程调度算法模拟,1.内容:设计一个简单的进程调度算法,模拟OS中的进程调度过程;2.要求:①进程数不少于5个;②进程调度算法任选;可以用动态优先数加时间片轮转法实现进程调度,每运行一个时间片优先数减3;③用C语言编程;④程序运行时显示进程调度过程。3.步骤:①设计PCB及其数据结构:进程标识数:ID进程优先数:PRIORITY(优先数越大,优先级越高)进程已占用时间片:CPUTIME,每得到一次调度,值加1;进程还需占用时间片:ALLTIME,每得到一次调度,该值减1,一旦运行完毕,ALLTIME为0)进程队列指针:NEXT,用来将PCB排成队列进程状态:STATE(一般为就绪,可以不用)②设计进程就绪队列及数据结构;③设计进程调度算法,并画出程序流程图;④设计输入数据和输出格式;结构格式:当前正运行的进程:0当前就绪队列:2,1,3,4⑤编程上机,验证结果。4.提示:假设调度前,系统中有5个进程,其初始状态如下:ID01234PRIORITY93830290可否考虑用数组或链表去实现CPUTIME00000ALLTIME32634STATEreadyreadyreadyreadyready①以时间片为单位调度运行;②每次调度ALLTIME不为0,且PRIORITY最大的进程运行一个时间片;③上述进程运行后其优先数减3,再修改其CPUTIME和ALLTIME,重复②,③④直到所有进程的ALLTIME均变为0。5.书写实验报告①实验题目;②程序中所用数据结构及说明;③清单程序及描述;④执行结果。实验源代码:#include<stdio.h>#include<malloc.h>typedefintStatus;#defineERROR0#defineOK1typedefstructPCB{ charNAME[10];//进程名字 intPRIO;//进程优先数 intROUNT;//轮转时间片 intCOUNT;//计数器 intNEEDTIME;//需要的CPU时间 intCPUTIME;//占用cpu时间 char*STATE;//进程状态}ElemPCB;typedefstructQNode{ ElemPCBpcb; structQNode*next;}QNode,*QueuePtr;typedefstruct{//就绪队列 QueuePtrRUN;//当前运行进程指针 QueuePtrREADY;//头指针 QueuePtrTAIL;//尾指针}READYQueue;typedefstruct{//完成队列 QueuePtrFINISH;//头指针 QueuePtrTAIL;//尾指针}FINISHQueue;StatusCreate(READYQueue&ready);StatusPrint(READYQueueready,FINISHQueuefinish);StatusPrintr(READYQueueready,FINISHQueuefinish);StatusFisrt(READYQueue&ready);StatusInsert1(READYQueue&ready);StatusInsert2(READYQueue&ready);StatusPrisch(READYQueue&ready,FINISHQueue&finish);StatusRoundsch(READYQueue&ready,FINISHQueue&finish);voidmain(){ charch; READYQueueready; FINISHQueuefinish; ready.READY=ready.TAIL=(QueuePtr)malloc(sizeof(QNode));//存储分配 ready.RUN=(QueuePtr)malloc(sizeof(QNode)); ready.RUN->next=NULL; finish.FINISH=finish.TAIL=(QueuePtr)malloc(sizeof(QNode)); Create(ready); //创建后就绪对列中 printf("\n就绪对列中初始值:\n"); Print(ready,finish); Fisrt(ready); printf("请输入要选择调度的算法(p--优先数调度,r--时间片轮转法):\n"); while(1){ do{ ch=getchar(); scanf("%c",&ch); }while(ch!='p'&&ch!='r'); switch(ch){ case'p': //优先数调度 Prisch(ready,finish); break; case'r': //时间片轮转法 Roundsch(ready,finish); break;} }}StatusPrint(READYQueueready,FINISHQueuefinish){//打印就绪队列中的进程状态 QueuePtrp,q; p=ready.READY; q=finish.FINISH; //运行中的进程 if(ready.RUN->next!=NULL) { printf("%s",ready.RUN->next->pcb.NAME); printf(":%s\t",ready.RUN->next->pcb.STATE); printf("优先数:%d\n",ready.RUN->next->pcb.PRIO); } //就绪队列的进程 while(p!=ready.TAIL){ printf("%s",p->next->pcb.NAME); printf(":%s\t",p->next->pcb.STATE); printf("优先数:%d\n",p->next->pcb.PRIO); p=p->next; } //完成队列的进程 while(q!=finish.TAIL){ printf("%s",q->next->pcb.NAME); printf(":%s\t",q->next->pcb.STATE); printf("优先数:%d\n",q->next->pcb.PRIO); q=q->next; } returnOK;}StatusPrintr(READYQueueready,FINISHQueuefinish){//打印就绪队列中的进程状态 QueuePtrp,q; p=ready.READY; q=finish.FINISH; //运行中的进程 if(ready.RUN->next!=NULL) { printf("%s",ready.RUN->next->pcb.NAME); printf(":%s\t",ready.RUN->next->pcb.STATE); printf("剩余时间:%d\n",ready.RUN->next->pcb.NEEDTIME); } //就绪队列的进程 while(p!=ready.TAIL){ printf("%s",p->next->pcb.NAME); printf(":%s\t",p->next->pcb.STATE); printf("剩余时间:%d\n",p->next->pcb.NEEDTIME); p=p->next; } //完成队列的进程 while(q!=finish.TAIL){ printf("%s",q->next->pcb.NAME); printf(":%s\t",q->next->pcb.STATE); printf("剩余时间:%d\n",q->next->pcb.NEEDTIME); q=q->next; } returnOK;}StatusCreate(READYQueue&ready){ QueuePtrp; inti=0; intn; printf("请输入进程个数:"); scanf("%d",&n); while(i<n) { p=(QueuePtr)malloc(sizeof(QNode)); printf("输入第%d进程名:",i+1); scanf("%s",p->pcb.NAME); printf("输入进程需要的时间:"); scanf("%d",&p->pcb.NEEDTIME); printf("输入进程的进程优先数:"); scanf("%d",&p->pcb.PRIO); p->pcb.STATE="W"; p->pcb.ROUNT=2; p->pcb.COUNT=0; i++; p->next=NULL; ready.TAIL->next=p; ready.TAIL=p; } returnOK;}StatusFisrt(READYQueue&ready){ if(ready.READY==ready.TAIL) returnERROR; ready.RUN->next=ready.READY->next; ready.RUN->next->pcb.STATE="RUN";//修改进程状态 if(ready.TAIL==ready.READY->next) ready.READY=ready.TAIL; else ready.READY->next=ready.READY->next->next;//头指针后移 printf("\n%s被从就绪队列调度运行\n",ready.RUN->next->pcb.NAME); returnOK;}StatusInsert1(READYQueue&ready){ inti=0,j=0; QueuePtrp=ready.READY,q; ElemPCBtemp; QueuePtrs=(QueuePtr)malloc(sizeof(QNode)); s->pcb=ready.RUN->next->pcb; s->next=NULL; //将未完成的进程插入就绪队列 ready.TAIL->next=s; ready.TAIL=s; //按优先数从大到小排序 for(p;p!=ready.TAIL;p=p->next) { for(q=p->next;q!=ready.TAIL;q=q->next) { if(p->next->pcb.PRIO<q->next->pcb.PRIO) { temp=p->next->pcb; p->next->pcb=q->next->pcb; q->next->pcb=temp; } } } returnOK; }StatusInsert2(READYQueue&ready){ QueuePtrp=ready.RUN->next; if(p->pcb.NEEDTIME>0) { ready.TAIL->next=p;//插入到就绪队列 ready.TAIL=p; ready.RUN->next=NULL; } returnOK;}StatusPrisch(READYQueue&ready,FINISHQueue&finish){ inti=0; while(ready.RUN->next!=NULL) { ready.RUN->next->pcb.CPUTIME++; ready.RUN->next->pcb.NEEDTIME--; ready.RUN->next->pcb.PRIO-=3; if(ready.RUN->next->pcb.NEEDTIME==0) { finish.TAIL->next=ready.RUN->next;//插入到完成队列 finish.TAIL=ready.RUN->next;//尾指针后移 ready.RUN->next->pcb.STATE="FINISH"; ready.RUN->next=NULL; if(ready.READY!=ready.TAIL) { Fisrt(ready); } } elseif(ready.READY!=ready.TAIL&&(ready.RUN->next->pcb.PRIO)<(ready.READY->next->pcb.PRIO)) { ready.RUN->next->pcb.STATE="W"; printf("%s被调到就绪队列里\n",ready.RUN->next->pcb.NAME); Insert1(ready); Fisrt(ready); } i++; printf("\n进程执行第%d个时间片的结果:\n",i); Print(ready,finish); } returnOK;}StatusRoundsch(READYQueue&ready,FINISHQueue&finish){ inti=0; while(ready.RUN->next!=NULL) { ready.RUN->next->pcb.CPUTIME++; ready.RUN->next->
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程施工组织设计方案
- 大学生健康饮食调查问卷
- 2026年肿瘤内科副高试题解析及答案
- 隧道施工坍塌应急演练
- 物业管理服务收费管理制度
- 餐饮卫生健康管理制度模板
- 一年级萌娃秋季开学成长课
- 小熊的生日派对互动课件
- 2026年初中道德与法治七年级下册押题卷
- 有限空间作业安全管理制度
- GB/T 25112-2010焊接、切割及类似工艺用压力表
- GB/T 14099.1-2004燃气轮机采购第1部分:总则与定义
- 远景培训学习1-风机检修基础
- 隧道机械化施工交流
- 河道开挖、拓浚整治工程土方开挖施工方案
- 漂流旅游项目防洪评价报告
- 银行网点标准化服务培训课件
- (完整版)CJJ-1-2008-城镇道路工程施工与质量验收规范
- GB∕T 8081-2018 天然生胶 技术分级橡胶(TSR)规格导则
- ±800kV特高压直流输电工程绍兴换流站土建B包施工组织设计
- 2020年天津中考英语考纲词汇
评论
0/150
提交评论