您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > FCFS-RR算法实验
淮海工学院计算机工程学院实验报告书课程名:操作系统原理A题目:进程调度班级:学号:姓名:评语:成绩:指导教师:批阅时间:年月日一、目的与要求进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用Java或C/C++语言编写一个进程调度模拟程序,至少使用先来先服务、短进程优先、最高优先权优先或时间片轮转法四种算法中的两种算法来实现进程调度。通过本实验可加深对进程调度算法的理解。二、实验内容1、设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。2、模拟调度程序至少使用先来先服务、短进程优先、最高优先权优先或时间片轮转法四种算法中的两种算法来实现进程调度。3、程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。三、实验步骤1、理解本实验中有关调度算法的说明。2、根据调度算法的说明,画出相应的程序流程图。3、按照程序流程图,用Java/C/C++语言编程并实现。四、测试数据与实验结果(可以抓图粘贴)输入选择先来先服务时间轮转法退出《大型数据库系统概论》实验报告-2-开始输入进程数和规定的时间片输入进程名和运行时间进程入队,并按照时间顺序运行运行时间和时间片时间队列为空结束当前进程,调至尾结束,删除《大型数据库系统概论》实验报告-3-#includestring.h#includestdio.h#includestdlib.htypedefstructnode{charname[10];intprio;intround;intcputime;intneedtime;intcount;charstate;structnode*next;}PCB;PCB*finish,*ready,*tail,*run;intN,t;voidfirstin()到达时间是否比上一进程结束时间小?开始时间为上一进程结束时间开始进程为到达时间运算周转时间和带权周转实际结束开始按时间顺序输入进程数到达时间服务时间《大型数据库系统概论》实验报告-4-{run=ready;run-state='R';ready=ready-next;}voidprt1(chara){if(toupper(a)=='P')printf(进程名占用CPU时间到完成还要的时间轮转时间片状态\n);}voidprt2(chara,PCB*q){if(toupper(a)=='P')printf(%4s%8d%12d%14d%8c\n,q-name,q-cputime,q-needtime,q-round,q-state);}voidprt(charalgo){PCB*p;prt1(algo);if(run!=NULL)prt2(algo,run);p=ready;while(p!=NULL){prt2(algo,p);p=p-next;}p=finish;getchar();}voidinsert(PCB*q){PCB*p1,*s,*r;s=q;p1=ready;r=p1;while(p1!=NULL)if(p1-round=s-round){r=p1;p1=p1-next;}if(r!=p1){r-next=s;s-next=p1;}else{s-next=p1;ready=s;}《大型数据库系统概论》实验报告-5-}voidcreate(charalgo){PCB*p;inti,time;charna[10];ready=NULL;finish=NULL;run=NULL;printf(输入进程名和需要运行的时间(中间用空格键隔开):\n);for(i=1;i=N;i++){p=newPCB;scanf(%s%d,&na,&time);strcpy(p-name,na);p-cputime=0;p-needtime=time;p-state='W';p-round=0;if(ready!=NULL)insert(p);else{p-next=ready;ready=p;}}printf(*****时间片轮转法进程调度过程*****\n);prt(algo);run=ready;ready=ready-next;run-state='R';}voidtimeslicecycle(charalgo){while(run!=NULL){run-cputime=run-cputime+t;run-needtime=run-needtime-t;run-round=run-round+t;if(run-needtime=0){run-next=finish;finish=run;run-state='F';run=NULL;if(ready!=NULL)firstin();《大型数据库系统概论》实验报告-6-}else{run-state='W';insert(run);firstin();}prt(algo);}}voidRoundRobin(){charalgo='P';printf(输入进程的个数:);scanf(%d,&N);printf(定义时间片大小:);scanf(%d,&t);create(algo);timeslicecycle(algo);}typedefstructpcb{intarrivetime;intstarttime;intservicetime;intfinishtime;doubleT;doubleW;//intnum;structpcb*next;}pcb;fcfs(pcbp[],intn){inti;for(i=0;in;i++){if(p[i].arrivetimep[i-1].finishtime)p[i].starttime=p[i-1].finishtime;elsep[i].starttime=p[i].arrivetime;p[i].starttime=p[i].arrivetime;p[i].finishtime=p[i].starttime+p[i].servicetime;p[i].T=p[i].finishtime-p[i].arrivetime;p[i].W=p[i].T/p[i].servicetime;《大型数据库系统概论》实验报告-7-}printf(作业号运行时间开始时间结束时间周转时间带权周转时间\n);for(i=0;in;i++){printf(%d%d%d%d%lf%lf\n,p[i].num,p[i].servicetime,p[i].starttime,p[i].finishtime,p[i].T,p[i].W);}}fcfs1(){inti,pronum;pcbp[20];printf(请输入进程的个数:);scanf(%d,&pronum);printf(按时间先后顺序输入进程的提交时间和运行时间:\n);for(i=0;ipronum;i++){p[i].num=i+1;printf(输入第%d个进程,p[i].num);scanf(%d,%d,&p[i].arrivetime,&p[i].servicetime);}fcfs(p,pronum);}intmain(){intchoice;printf(\n\n);printf(*********************************************\n);printf(进程调度演示\n);printf(*********************************************\n\n\n);printf(1.演示先来先服务算法.\n);printf(2.演示轮转法算法.\n);printf(3.退出程序.\n\n);printf(选择进程调度方法:);scanf(%d,&choice);switch(choice)《大型数据库系统概论》实验报告-8-{case1:system(cls);fcfs1();break;case2:system(cls);RoundRobin();break;default:break;}return0;}《大型数据库系统概论》实验报告-9-五、结果分析与实验体会
本文标题:FCFS-RR算法实验
链接地址:https://www.777doc.com/doc-5608450 .html