为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

操作系统实验:时间片轮转RR进程调度算法

2019-01-25 12页 doc 27KB 88阅读

用户头像

is_686908

暂无简介

举报
操作系统实验:时间片轮转RR进程调度算法实验报告:时间片轮转RR进程调度算法 题目:时间片轮转算法的实现 班级:软件工程2班  姓名:代其全  学号:1025111022 完成日期:2012/10/23 一. 需求分析 程序要实现时间片轮转进程调度算法 (1) 接收用户输入的进程数(n),,各个进程的进程名,到达时间(T1…Tn)和服务时间(S1….Sn),以及时间片大小q。 (2) 输出各个进程首次运行的时间 (3) 输出各个进程的完成时间,周转时间,带权周转时间,所有进程的平均周转时间,以及带权平均周转时间。 (4) 测试数据为:  进程数n为5, 各进程的名...
操作系统实验:时间片轮转RR进程调度算法
实验:时间片轮转RR进程调度算法 目:时间片轮转算法的实现 班级:软件2班  姓名:代其全  学号:1025111022 完成日期:2012/10/23 一. 需求分析 程序要实现时间片轮转进程调度算法 (1) 接收用户输入的进程数(n),,各个进程的进程名,到达时间(T1…Tn)和服务时间(S1….Sn),以及时间片大小q。 (2) 输出各个进程首次运行的时间 (3) 输出各个进程的完成时间,周转时间,带权周转时间,所有进程的平均周转时间,以及带权平均周转时间。 (4) 测试数据为:  进程数n为5, 各进程的名字,到达时间,服务时间分别为:a 0 4 ;  b 1 3;  c 2 5;  d 3 2;  e 4 4。时间片大小q为1 和5。 二. 概要 抽象数据类型的定义: int  ArrivalTime[100];//到达时间 int  ServiceTime[100];//服务时间 int  FinishTime[100];//完成时间 int  WholeTime[100];//周转时间 double  WeightWholeTime[100];//带权周转时间 double AverageWT,AverageWWT; bool Finished[100];//完成标识 typedef struct QNode { char name;      //进程标识 int arrivaltime;//到达时间 int servicetime;//服务时间 int workedtime; //进程已经运行的时间 bool status;    //表示进程的状态,1表示已经结束,0表示还未执行 struct QNode  *next; }QNode,  *QueuePtr; typedef struct { QueuePtr front;//队头指针 QueuePtr rear;//队尾指针 }LinkQueue; 主程序的:调用Init()函数初始化到达时间,服务时间,时间片等进程信息,调度RR()函数实现轮转调度发,最后调度print()函数输出运算结果 三. 详细设计 1. 初始化函数 void init() { int cputime;int x,y;char name; cout<<"请输入进程的个数:"; cin>>n; //进程个数    cout<>name>>x>>y; node.name=name; node.arrivaltime=ArrivalTime[i]=x; node.servicetime=ServiceTime[i]=y; node.workedtime=0; node.status=Finished[i]=0; node.next=NULL; array[i]=node; //cout<<"队中增加一个元素"<>cputime; q=cputime;//时间片大小 } 2. RR()函数 void RR() { int temp;QNode e;int count1=0; //按到达时间先后排序进程信息数组 for(int i=0;iarray[i+1].arrivaltime) { temp=array[i].arrivaltime; array[i].arrivaltime=array[i+1].arrivaltime; array[i].arrivaltime=temp; } } }//此时,array数组中的元素都是按到达时间从小到大排列的 for(i=0;i=(*queue.front->next).servicetime)//时间片大于进程服务时间时,进程一次性执行完,进入下一进程 { //cout<<"!!!!!!!"; cout<<"时刻"<next->name<<"开始执行"<next).servicetime;x++) { currentTime++; for(int y=0;ynext).servicetime;//更新当前时间 cout<<"当前时间为:"<next).workedtime<(*queue.front->next).servicetime)//进程已工作时间小于服务时间时 { if((*queue.front->next).workedtime==0)//进程已工作时间为零时 { //    cout<<"!!!!"; cout<<"时刻"<next).name<<"开始执行"<next).workedtime+=q;//更新进程已工作时间 DeQueue(queue,e);//将该进程出队 EnQueue(queue,e);//将该进程入队,加入到了队列的末尾 } else//进程工作时间不为零且未达到服务时间时 { for(int i=0;inext).workedtime!=(*queue.front->next).servicetime;i++) { currentTime++;//当前时间加一 for(int j=0;jnext).workedtime==(*queue.front->next).servicetime)//已工作时间达到要求的服务时间 { (*queue.front->next).status=1; count++; Finished[count]=1; DeQueue(queue,e); FinishTime[count]=currentTime;//当前时间为完成时间,返回存放入FinishTime[]数组中 } } } } } } } } 3. 输出函数 void print(int n) { cout<<"完成时间:"; for(int i=0;i
/
本文档为【操作系统实验:时间片轮转RR进程调度算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索