您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 操作系统实验一-处理机调度算法的实现
计算机与通信工程学院天津理工大学计算机与通信工程学院实验报告2013至2014学年第一学期课程名称操作系统学号学生姓名年级专业教学班号实验地点实验时间2013年11月21日第一节至月日第节主讲教师辅导教师计算机与通信工程学院2实验(一)实验名称处理机调度算法的实现软件环境VC++6.0硬件环境IBM-PC或兼容机实验目的通过编写程序实现进程高优先权优先调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。实验内容(应包括实验题目、实验要求、实验任务等)实验题目:处理机调度算法的实现实验要求:学生应正确地设计有关的数据结构与各个功能模块,画出程序的流程图,编写程序,程序执行结果应正确。1、设定系统中有五个进程,每一个进程用一个进程控制块表示。2、输入每个进程的“优先数”和“要求运行时间”。3、为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。4、处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。5、若要求运行时间为零,则将其状态置为“结束”,且退出队列。6、运行所设计程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。实验任务:计算机与通信工程学院3实现处理机调度算法。实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)一、程序流程图:二、实验代码#includeiostream#includestringusingnamespacestd;#defineMAXSIZE10structPCB{intname;//进程名intpriority;//进程优先数inttime;//进程执行时间};计算机与通信工程学院4structQueue_Process{PCBdata[MAXSIZE];//PCB队列intfront;//队首intrear;//队尾};voidInitQueue(Queue_Process*Q){Q-front=Q-rear=0;}boolIsQueueEmpty(Queue_ProcessQ)//队空判断函数{return(Q.front==Q.rear)?true:false;}boolIsQueueFull(Queue_ProcessQ)//队满判断函数{return(Q.front==(Q.rear+1)%MAXSIZE)?true:false;}voidEnQueue(Queue_Process*Q,PCBx)//入队函数{if(IsQueueFull(*Q))//判断队列是否为满{cout队满,入队操作失败!endl;exit(0);}//队列非满,将PCB入队,将其中信息填入Q-data[Q-rear].name=x.name;Q-data[Q-rear].priority=x.priority;Q-data[Q-rear].time=x.time;Q-rear=(Q-rear+1)%MAXSIZE;//队列队尾指针后移}voidDeleQueue(Queue_Process*Q){if(IsQueueEmpty(*Q))//判断队列是否为空{cout队空,出队操作失败!endl;exit(0);}Q-front=(Q-front+1)%MAXSIZE;//将队列首指针后移计算机与通信工程学院5}voidSortPCB(PCB*pcb,intn)//PCB优先数大小从大到小排列函数{PCBtemp;boolexchange=true;//交换标志for(inti=n-1;i0&&exchange;i--)//冒泡排序算法排序{exchange=false;for(intj=0;ji;j++){if(pcb[j].prioritypcb[j+1].priority)//交换PCB中的数据{temp.name=pcb[j].name;temp.priority=pcb[j].priority;temp.time=pcb[j].time;pcb[j].name=pcb[j+1].name;pcb[j].priority=pcb[j+1].priority;pcb[j].time=pcb[j+1].time;pcb[j+1].name=temp.name;pcb[j+1].priority=temp.priority;pcb[j+1].time=temp.time;exchange=true;}}}}voidInput(PCB*pcb,intn)//进程信息输入函数{cout请输入每个进程的优先数和执行时间:endl;intp,t;for(inti=0;in;i++)//输入每个进程的优先数和执行时间{cinpt;pcb[i].name=i;pcb[i].priority=p;pcb[i].time=t;}}voidDisplay(Queue_Process*queue)//输出每个时刻的进程运行情况函数{cout进程名\t优先数\t执行时间\t进程状态endl;计算机与通信工程学院6do{if(queue-data[queue-front].time1){coutqueue-data[queue-front].name\tqueue-data[queue-front].priority\t\tqueue-data[queue-front].time\t\t执行中...endl;queue-data[queue-front].priority-=1;queue-data[queue-front].time-=1;for(inti=1;iqueue-rear-queue-front;i++)coutqueue-data[queue-front+i].name\tqueue-data[queue-front+i].priority\t\tqueue-data[queue-front+i].time\t\t等待中...endl;coutendlendl;}else{coutqueue-data[queue-front].name\tqueue-data[queue-front].priority\t\tqueue-data[queue-front].time\t\t执行中...endl;for(inti=1;iqueue-rear-queue-front;i++)coutqueue-data[queue-front+i].name\tqueue-data[queue-front+i].priority\t\tqueue-data[queue-front+i].time\t\t等待中...endl;cout进程queue-data[queue-front].name执行完毕!endlendlendl;DeleQueue(queue);}SortPCB(queue-data,queue-rear-queue-front);/*对队列中的优先数进程重新排序}while(!IsQueueEmpty(*queue));}voidmain(){PCBprocess[MAXSIZE-1];//进程数组Queue_Processqueue;//进程队列intnum;//要输入的进程数cout请输入进程同步数num:endl;cinnum;计算机与通信工程学院7InitQueue(&queue);//初始化队列Input(process,num);for(inti=0;inum;i++)//通过循环使每个进程入队{EnQueue(&queue,process[i]);}SortPCB(queue.data,queue.rear-queue.front);//对进程按优先数从大到小排列coutendl\t\t进程执行情况:endl;Display(&queue);//进程运行函数}三、运行结果计算机与通信工程学院8计算机与通信工程学院9附录(可包括源程序清单或其它说明)
本文标题:操作系统实验一-处理机调度算法的实现
链接地址:https://www.777doc.com/doc-5261624 .html