实验一进程调度实验专业:信息管理与信息系统学号:2014******姓名:陈*实验日期:2016年11月11日实验目的通过本实验,采用动态优先权优先的调度算法编写和调试一个简单的进程调度程序,加深理解了有关进程控制块、进程队列的概念,并体会了优先权调度算法的具体实施办法。实验要求用高级语言编写和调试一个进程调度程序,、实验方法内容算法设计思路(流程图)算法中用到的数据结构(1)首先定义一个结构体,用以保存一个进程的各种信息,最后一个指针便于将所有进程形成一个链表typedefstructpcb{intid;intarriveTime;//到达时间intpriority;intcpuTime;intallTime;intstartBlock;intblockTime;charstate;structpcb*next;}PCB;(2)接着建立一个链表存储所有进程,以结构体PCB为节点(头节点为空节点,从第二个节点开始存储数据)。链表建立过程如下:inti=0; PCB*head,*p1,*p2; head=(PCB*)malloc(sizeof(PCB));//创建链表头 p2=head; //三个进程 for(i=0;i<3;i++){ p1=(PCB*)malloc(sizeof(PCB)); //设置进程的初始状态,各个数据已经保存在对应的各个数组中 p1->id=pcId[i]; p1->priority=priority[i]; p1->cpuTime=cpuTime[i]; p1->allTime=allTime[i]; p1->startBlock=startBlock[i]; p1->blockTime=blockTime[i]; p1->state='W';//初始状态为就绪 p2->next=p1; p2=p1; } p2->next=NULL;//表尾指针设为空指针,表示链表结束主要模块(函数名)如下:创建初始队列,用链表存储PCB*createLink(){};(2)输出链表中所有进程的状态voidprintLink(PCB*head,inttime);(3)判断是否所有进程都已完成intisFinish(PCB*head);(4)判断是否所有未完成的进程都处于阻塞状态intisBlock(PCB*head);(5)获得当前时刻优先权最高且处于就绪状态的进程PCB*getHighPriority(PCB*head);(6)运行(调度函数,在这里展示所有代码)voidrun(PCB*head){};所有代码如下:#include<>#include<>//三个进程的初始状态intpcId[]={0,1,2};intpriority[]={6,8,5};intcpuTime[]={0,0,0};intallTime[]={7,7,6};intstartBlock[]={6,4,2};intblockTime[]={3,8,6};typedefstructpcb{ intid; intarriveTime;//到达时间 intpriority; intcpuTime; intallTime; intstartBlock; intblockTime; charstate; structpcb*next;}PCB;//创建初始队列,用链表存储PCB*createLink(){ //um=0;//进程个数 inti=0; PCB*head,*p1,*p2; head=(PCB*)malloc(sizeof(PCB));//创建链表头 p2=head; for(i=0;i<3;i++){ p1=(PCB*)malloc(sizeof(PCB)); p1->arriveTime=i;//进程到达时间为输入时间//设置进程的初始状态 p1->id=pcId[i]; p1->priority=priority[i]; p1->cpuTime=cpuTime[i]; p1->allTime=allTime[i]; p1->startBlock=startBlock[i]; p1->blockTime=blockTime[i]; p1->state='W';//初始状态为就绪w p2->next=p1; p2=p1; } p2->next=NULL;//表尾指针设为空指针,表示链表结束 returnhead;}//输出所有队列中所有进程的状态voidprintLink(PCB*head,inttime){ printf("当前时刻为:%d\n",time); printf("IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIME
进程调度实验【实验报告】 来自淘豆网m.daumloan.com转载请标明出处.