您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 计算机操作系统:处理机调度模拟实验
1课程实验报告课程名称操作系统原理班级实验日期姓名学号实验成绩实验名称处理机调度模拟实验实验目的及要求在单处理机的情况下模拟用优先权的时间片轮转调度策略实现处理机调度,以加深了解处理机调度的工作过程。要求:可利用先来先服务、短作业优先、响应比高者优先、多级反馈队列模型、时间片轮转法等,来实现处理机的调度。根据单处理机,多任务的问题特性做好软件实现的需求分析。可根据问题的实际需要,可选择进程数量。当系统运行时,能直观地、动态地反映当前处理机状态及各进程执行的状况。实验环境Windows7或以上版本+VS2010或以上版本实验内容程序运行一次中,要求三个进程队列,每个优先权依次为1、2、3,即优先权为1的只分配1个时间片,优先权为2的只分配2个时间片,优先权为3的只分配3个时间片;每个进程队列命名、进程命名与进程数自定,轮转打印出各个进程名,程序结束打印退出。实验完成后请现场演示。实验步骤1.给一系列进程创建结构体2.写一个printready函数探测就绪队列是否为空3.写一个display1函数,用于显示当前进程4.写一个display2函数,用于显示就绪进程信息5.写一个display函数,这是总的显示函数,里面也要调用display1和display22描述6.create函数用于创建队列7.insert为插入函数,用于将一个时间片运行结束的进程插入到就绪进程的队尾8.priority函数:如果有进程就绪,就将处理机分配给该进程让他执行。调试过程及实验结果3总结每次运行一步,电脑将会将该时刻所有进程控制块的运行状态显示给用户。包括进程名、要求运行时间、已经运行时间、还需要运行时间、状态等信息。当每个进程运行一个时间片之后将它从该队列中移除,添加到就绪队列队尾中以便使每个进程可以循环执行。当要求运行时间和已运行时间相等时,说明该进程运行结束,将该进程撤出该队列并且不再添加到就绪队列中。直到就绪队列中没有就绪进程为止附录#define_CRT_SECURE_NO_DEPRECATE#includestdio.h#includestdlib.h#includestring.htypedefstructnode{charpname[10];//进程名intrtime;//已运行时间intsytime;//剩余时间4intntime;//要求服务时间charstate;//状态structnode*next;}PCB;PCB*finish,*ready,*run;intN=3;//探测就绪队列是否为空voidprintready(){if(ready==NULL)printf(\n就绪队列为空!\n);}//建立进程显示函数,用于显示当前进程;voiddisplay1()/*建立进程显示函数,用于显示当前进程*/{printf(\n进程名已运行时间剩余时间要求服务时间状态\n);}//显示进程信息voiddisplay2(PCB*q)/*轮转法的输出*/{printf(%3s%10d%12d%10d%10c\n,q-pname,q-rtime,q-sytime,q-ntime,q-state);}//总的显示函数,在此框架下调用其它子显示函数voiddisplay(){PCB*p;if(run!=NULL){printf(\n*-----------------------------------------------------------*);printf(\n****当前正在运行的进程是%s,它的状态如下:\n,run-pname);/*显示当前运行进程*/display1();display2(run);}p=ready;if(p!=NULL)printf(\n****当前就绪队列中进程的状态如下:\n);/*显示就绪队列状态*/while(p!=NULL){display2(p);p=p-next;}5p=finish;printready();}//插入函数voidinsert(PCB*q){PCB*p1,*s,*r;s=q;p1=ready;r=p1;while(p1!=NULL){r=p1;p1=p1-next;}if(r!=p1){r-next=s;s-next=p1;}else{s-next=p1;ready=s;}}//创建函数用于创建队列voidcreate(){PCB*p;inti,time;ready=NULL;finish=NULL;run=NULL;for(i=1;i=N;i++){p=newPCB;if(i==1)strcpy(p-pname,pcb1);if(i==2)strcpy(p-pname,pcb2);if(i==3)strcpy(p-pname,pcb3);time=i;p-rtime=0;p-sytime=time;p-ntime=time;6p-state='w';if(ready!=NULL)insert(p);else{p-next=ready;ready=p;}}printready();printf(\n开始运行............);run=ready;ready=ready-next;run-state='R';display();}//探测到有就绪队列时,选择一个将处理机分配给它voidpriority(intT){while(run!=NULL){run-rtime=run-rtime+T;run-sytime=run-sytime-T;if(run-sytime=0){run-sytime=0;run-next=finish;finish=run;printf(\n进程[%s]已完成.\n,run-pname);run=NULL;if(ready!=NULL){run=ready;run-state='R';ready=ready-next;}}elseif(ready!=NULL){run-state='W';insert(run);run=ready;run-state='R';7ready=ready-next;}display();}}//主函数voidmain(){intT=1;printf(|----------------------------------------------------------|\n);printf(|*******************时间片轮转调度算法模拟*****************|\n);printf(||\n);printf(|**********************13计本邵鑫鑫***********************|\n);printf(|----------------------------------------------------------|\n);//printf(\n请输入进程的个数:);//scanf(%d,&N);//printf(\n请输入轮转时间片周期T:);//scanf(%d,&T);printf(\n进程个数为:3);printf(\n轮转时间片周期为:1);create();priority(T);printf(\n进程已经完成.\n);system(pause);}
本文标题:计算机操作系统:处理机调度模拟实验
链接地址:https://www.777doc.com/doc-5937396 .html