资源描述:
《进程调度+C语言+操作系统实验.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《操作系统原理》实验报告-5-操作系统原理实验——进程调度实验报告1目的与要求:1)本实验目的是通过对进程调度算法的实现和实验模拟,加深对操作系统进程调度操作功能和进程调度算法的完整理解,培养和提高学生对操作系统开发的兴趣,以及进程调度程序的开发与应用能力;2)理论上必须深刻理解优先权调度算法和时间片轮转调度算法的基本思想和原理;3)独立使用C或VC++编程语言编写优先权调度或时间片轮转算算法调度模拟程序;4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果
2、)5)于2009年10月15日以前提交本次实验报告(含电子和纸质报告,由学习委员以班为单位统一打包提交)。2实验内容或题目1)设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。2)模拟调度程序可任选两种调度算法之一实现(有能力的同学可同时实现两个调度算法)。3)程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。4)本次实验内容(项目)的详细说明以及要求请参见实验指导书。3实验步骤与源程序#include#include《操作系统原理》
3、实验报告-5-#includevoidCheck();typedefstructnode{charname[10];intspan;//轮转时间inttake;//占用时间intused;//已用的时间intneed;//还需要的时间charstatus;//状态structnode*next;}PCB;PCB*ready,*finish,*tail,*rear;voidPrint(PCB*p){while(p!=NULL){printf("%3s%5d%5d%5d%5d%5c",p
4、->name,p->used,p->need,p->take,p->span,p->status);p=p->next;}}voidCreat(intN){PCB*p;inttime;charna[10];ready=NULL;/*就绪队列头指针*/finish=NULL;/*完成队列头指针*/tail=NULL;rear=NULL;printf("Enternameandtimeofroundprocess");for(inti=1;i<=N;i++)//创建就绪队列{p=(PCB*)malloc(s
5、izeof(PCB));scanf("%s",na);scanf("%d",&time);strcpy(p->name,na);p->span=2;p->take=0;p->used=0;p->need=time;p->status='J';p->next=NULL;《操作系统原理》实验报告-5-if(ready==NULL){ready=p;tail=p;}else{tail->next=p;tail=p;}}printf("……………………运行结果……………………");}voidPrint1(){/
6、/输出ready与finish队列PCB*p;p=ready;printf("name,used,need,take,span,state");Print(p);p=finish;Print(p);}voidRun(){Print1();ready->used+=1;ready->need-=1;ready->take+=1;ready->status='R';if(ready->need!=0)//进程时间need片是否为0{if(ready->takespan)/*占用时间是否到轮转
7、时间,没到就继续,到了就排到就绪队列尾*/{Run();}else{tail->next=ready;ready=ready->next;tail=tail->next;tail->status='J';tail->take=0;tail->next=NULL;Check();}}else//进程撤销,放入撤销队列{if(finish==NULL){finish=ready;rear=finish;}else{rear->next=ready;rear=rear->next;}ready=ready->ne
8、xt;rear->next=NULL;rear->status='F';rear->take=0;Check();}//Check();由于上多次文调用Run本身递归,此句也会被多调用,产生在结束时的冗余结果;}《操作系统原理》实验报告-5-voidCheck(){if(ready!=NULL){Run();}elsePrint1();}main(){intN=0;printf("输入进程数目:");scanf(