您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > 设计一个按优先数调度算法实现处理器调度的程序
实验1处理器调度1、实验目的:在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。2、实验内容:用高级语言(要求C语言实验环境)编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.按进程调度算法实现处理机调度。通过设计相应的数据结构建立进程控制块(PCB)和进程队列,采用先来先服务、优先数优先、轮转法,以及多级反馈轮转法等进程调度算法分别实现处理机调度策略。3,实验题目:处理器调度4.流程图:(1)主程序流程图:(2)子程序init()流程图:调用初始化子程序调用运行子程序结束开始(3)子程序max_pri_process()流程图:开始定义ii=0inum输出操作提示输入ID,pri,runtimestate=’R’getchar()结束i=i+1(4)子程序show()流程图:开始定义i,key,max=100i=0inumpcblist[i].state==’r’maxpcblist[i].pri&&pcblist[i].state=='R'max=pcblist[i].prikey=ipcblist[key].state=='F'return-1returnkey结束return-1i=i+1(5)子程序run()流程图:开始定义i输出提示i=0inum输出pcblist[i]的ID,pri,runtime,state提示按键继续i=i+1结束开始定义i,j,tj=0jnumt+=pcblist[j].runtimej=j+1输出提示show()getchar()jtmax_pri_process()!=-1j=0pcblist[max_pri_process()].state='r'i=0inumpcblist[i].state=='r'pcblist[i].pri-=1pcblist[i].runtime--pcblist[i].runtime==0pcblist[i].state='F'pcblist[i].state='R'show()getchar()i=i+1j=j+1结束5.源程序//按优先数调度算法实现处理器调度的程序#includestdio.h#includestring.h#definenum5//假定系统中进程个数为5structPCB{charID;//进程名intruntime;//要求运行时间intpri;//优先数charstate;//状态,R-就绪,F-结束};structPCBpcblist[num];//定义进程控制块数组voidinit()//PCB初始化子程序{inti;for(i=0;inum;i++){printf(PCB[%d]:IDpriruntime\n,i+1);//为每个进程任意指定pri和runtimescanf(%s%d%d,&pcblist[i].ID,&pcblist[i].pri,&pcblist[i].runtime);pcblist[i].state='R';//进程初始状态均为就绪getchar();//接收回车符}}intmax_pri_process()//确定最大优先级进程子程序{intmax=-100;//max为最大优先数,初始化为-100inti;intkey;for(i=0;inum;i++){if(pcblist[i].state=='r')//r为辅助状态标志,表示正在运行return-1;//返回-1elseif(maxpcblist[i].pri&&pcblist[i].state=='R')//从就绪进程中选取优先数最大的进程{max=pcblist[i].pri;//max存放每次循环中的最大优先数key=i;//将进程号赋给key}}if(pcblist[key].state=='F')//具有最大优先数的进程若已运行完毕return-1;//则返回-1else//否则returnkey;//将key作为返回值返回}voidshow()//显示子程序{inti;printf(\nIDpriruntimestate\n);printf(-------------------------------------------------\n);for(i=0;inum;i++)//依次显示每个进程的名、优先数、要求运行时间和状态{printf(%s%6d%8d%s\n,&pcblist[i].ID,pcblist[i].pri,pcblist[i].runtime,&pcblist[i].state);}printf(pressanykeytocontinue...\n);}voidrun()//进程运行子程序{inti,j;intt=0;//t为运行次数for(j=0;jnum;j++){t+=pcblist[j].runtime;}//运行次数即为各个进程运行时间之和printf(\nbeforerun,theconditonis:\n);show();//调用show()子程序显示运行前PCB的情况getchar();//等待输入回车符for(j=0;jt;j++){while(max_pri_process()!=-1)//具有最大优先数的进程没有运行完,让其运行{pcblist[max_pri_process()].state='r';//将其状态置为r,表示其正在运行}for(i=0;inum;i++){if(pcblist[i].state=='r'){pcblist[i].pri-=1;//将当前运行进程的优先数减1pcblist[i].runtime--;//要求运行时间减1{if(pcblist[i].runtime==0)pcblist[i].state='F';//运行完则将该进程状态置为结束elsepcblist[i].state='R';//未运行完将其状态置为就绪}show();//显示每次运行后各PCB的情况getchar();//等待回车进入下一次运行}}}}voidmain()//按动态优先数调度主程序{init();//初始化各个进程PCBrun();//进程调度模拟}6,运行的初值和运行结果:初值界面:运行界面1:运行界面2:运行界面3:7.总结和心得:本实验严格按照试验要求,根据要求所涉及的知识点进行了针对性的知识点掌握和复习。通过编程软件对程序进行编写,了解了程序编写的基本流程,巩固了程序编写的知识,而且对于进程掉调度的知识有了更加深刻的理解和掌握。
本文标题:设计一个按优先数调度算法实现处理器调度的程序
链接地址:https://www.777doc.com/doc-1512900 .html