版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告课程名称计算机操作系统实验名称进程调度算法模拟专业班级学生姓名指导教师实验一进程调度算法模拟,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年农商银行运营条线人员考试题库附答案
- 口服抗凝药外伤出血分级处置流程共识
- 浙江省台州市仙居县2027届数学七年级第一学期期末学业质量监测试题含解析
- Oracle面试300题及详细答案(实战完整版)
- OCP认证全套题库真题及详细答案解析(完整版)
- 高级育婴师考试试题(含答案)
- 幼儿园教师资格考试综合素质试卷及答案(2026年)
- 溶洞风险点位销号管理办法
- 4.1.1 单项式-2026-2027学年人教版数学七年级上册
- 2027年新高考语文备考现代文阅读训练之五:新题型训练(含答案)
- 智算中心高速互联网络架构设计方案
- 2026中食金安(石家庄)供应链科技有限责任公司公开招聘工作人员28名笔试备考试题及答案解析
- 强制性产品认证检查员考试考题模拟题及答案
- 部编版五年级上册《19.航天员写给孩子的信》教学设计
- 4.7.4 选择健康的生活方式课件 (共24张+内嵌视频2个) 人教版(2024)八年级上册
- 2026年春广东省中职“3+证书”高职高考语文真题(含解析)
- 1995年74号文转发省劳动厅河南省深化企业职工养老保险制度改革试行方案的通知
- 中医儿童科普演讲
评论
0/150
提交评论