实验二时间片轮转RR进程调度算法
操作系统实验报告 时间片轮转RR进程调度算法 (含代码)
实验二 时间片轮转RR进程调度算法
一:需求分析
程序的设计的任务和目的:设计程序模拟进程的时间片轮转RR调度过程。假设有n个进程分别在T1, … ,Tn时刻到达系统,它们需要的服务时间分别为S1, … ,Sn。分别利用不同的时间片大小q,采用时间片轮转RR进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。
(1) 输入的形式和输入值的范围
为避免测试时频繁输入数据,将测试数据放在txt文件中采用读文件方法读取数据。在同目录下的txt文件中输入数据,第一行为进程到达时间,中间用空格隔开,第二行为进程服务时间,不同进程的服务时间之间用空格隔开。
(2) 输出的形式
输出每个时刻的进程运行状态,并且输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。(详见运行截图)
(3) 程序所能达到的功能;
能够模拟进程的时间片轮转RR调度过程,可以输入时间片大小,然后采用时间片轮转RR进程调度算法进行调度,可以模拟调度过程,输出每个时刻的进程运行状态,另外也实现了输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。
(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。
2、概要设计
使用链表创建队列,用链表方法实现时间片轮转调度。主要有主函数,时间片轮转调度函数void RR(int*ArrivalTime,int*ServiceTime,int n,int q,LinkQueue &Q)和输出函数void print(int n,int array[]),void print(int n,double array[]);
操作系统实验报告 时间片轮转RR进程调度算法 (含代码)
三:详细设计
时间片轮转算法流程图:
程序主要设计思想:
(1)创建进程,使用链表的方法,链表中的每个结点相当于一个进程。 (2)读入文件中进程数据(进程的到达时间和服务时间)。 (3)创建一个进程单链表,作为进程队列。 (4)请用户输入时间片大小。
(5)创建执行队列。
(6)定义时间轴,初始化时间轴和执行队列。
(7)当进程数不为零时,分配给执行队列队首一个时间片。继续有未完成进程时进程队列的队首进程是否到达,若到达,将其插入到执行队列的队尾。执行队列不为空时,执行队列的队首进程的,判断是否执行完。执行完,该进程退出执行队列。
(8)执行队列队首是否得到过一个完整的时间片,若有则该进程插入到执行队列的队
操作系统实验报告 时间片轮转RR进程调度算法 (含代码)
尾。
(9)执行队列不为空时,转到第(7)步。当执行队列和进程队列都为空时,转到第(6)步。当两队列都为空时,所有进程运行完,模拟结束。
四:调试分析
调试过程中遇到的问题即在时间片轮转算法中由于循环使用不当导致无法实现预期的结果,后通过问同学,网上查找资料解决。算法改进:可加一个循环将读入的进程按到达时间从先至后排列。经验体会:通过这次实验,又熟悉了链表的使用方法,加深了对进程概念的理解,进一步掌握了进程状态的转变、进程调度的策略及对系统性能的评价方法。
五:用户使用说明
1、在同目录的txt文件中输入进程到达时间和服务时间,第一行为进程到达时间,中间用空格隔开,第二行为进程服务时间,不同进程的服务时间之间用空格隔开。
2、运行时按指示输入,如“请输入时间片长度”时输入时间片大小,若退出按0,继续则继续输入时间片大小。
六:测试结果
时间片长度为2时:
时间片长度为4时:
操作系统实验报告 时间片轮转RR进程调度算法 (含代码)
七:附录 源程序:
#include<iostream> #include<iomanip> #include<fstream> #include<sstream> using namespace std;
typedef int QElemType; #define OK 1 #define ERROR 0
#define OVERFLOW -1 typedef int Status;
typedef struct QNode{ //定义队列节点 QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct{ //定义队列 QueuePtr front; QueuePtr rear; }LinkQueue;
Status InitQueue(LinkQueue &Q); Status DestroyQueue(LinkQueue &Q); Status EnQueue(LinkQueue &Q,QElemType e); int DeQueue(LinkQueue &Q,QElemType e); bool QueueEmpty(LinkQueue &Q);
//初始化队列
//删除队列 //进入队列 //离开队列 //判读队列是否为空
操作系统实验报告 时间片轮转RR进程调度算法 (含代码)
LinkQueue Q; //创建队列Q
static const int MaxNum=100; int
n,q,ArrivalTime[MaxNum],ServiceTime[MaxNum],FinishedTime[MaxNum],WholeTime[MaxNum];//定义进程调度中的时间变量
double WeightWholeTime[MaxNum],Average_WT,Average_WWT;
void print(int n,int array[]); void print(int n,double array[]);
void RR(int*ArrivalTime,int*ServiceTime,int n,int q,LinkQueue &Q);
void main(){ //读文件,到达时间和完成时间 int ia,ib,i,q; ifstream in("test.txt"); string s; getline(in, s); istringstream sin(s); for(i=0; sin>>ia;i++) ArrivalTime[i]=ia; getline(in, s); istringstream sinn(s); for(i=0; sinn>>ib;i++) ServiceTime[i]=ib; int n=i; //输出进程数、到达时间、服务时间 cout<<"输入进程数(n):"<<n<<endl; cout<<"Arrival time:"; print(i,ArrivalTime); cout<<"Service time:"; print(i,ServiceTime); //输入时间片长度 cout<<"请输入时间片长度(q):"; cin>>q; cout<<"时间片轮转算法RR"<<endl; RR(ArrivalTime,ServiceTime,n,q,Q); while(q) { //循环输入时间片长度q,直到q==0结束 cout<<endl<<"退出-->0 or 输入时间片大小:"; cin>>q;
操作系统实验报告 时间片轮转RR进程调度算法 (含代码)
if(q==0) return; RR(ArrivalTime,ServiceTime,n,q,Q); } }
void RR(int*ArrivalTime,int*ServiceTime,int n,int q,LinkQueue &Q) { //---------------初始化模块------------------ int countTime=0,e; int STime[MaxNum],pushed[MaxNum]; for(int i=0;i<n;i++) { STime[i]=ServiceTime[i]; pushed[i]=0; } InitQueue(Q); EnQueue(Q,0); pushed[0]=1; int time=0; //---------------时间片轮转模块------------------ while(QueueEmpty(Q)==false) { e=DeQueue(Q,e); if(STime[e]>q) { STime[e]=STime[e]-q; countTime+=q; } else { countTime+=STime[e]; STime[e]=0; FinishedTime[e]=countTime; } while(t …… 此处隐藏:3550字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [文秘资料]班长职务辞职报告
- [文秘资料]完美的辞职报告
- [文秘资料]经典的员工辞职报告
- [文秘资料]医院口腔医生辞职报告
- [文秘资料]总经理辞职报告范文四篇
- [文秘资料]超市职员个人辞职报告
- [文秘资料]村妇联主任的辞职报告
- [文秘资料]辞职报告书格式
- [文秘资料]酒店辞职报告简单范文
- [文秘资料]联通的辞职报告
- [文秘资料]2017最新私企员工辞职报告范文
- [文秘资料]2019年度医院基层党组织书记抓党建述职
- [文秘资料]工作时间长辞职报告
- [文秘资料]辞职报告怎么写出来
- [文秘资料]个人能力原因辞职报告
- [文秘资料]网络工程师辞职报告
- [文秘资料]项目部辞职报告
- [文秘资料]缝纫工辞职报告怎么写
- [文秘资料]XXX州委书记述职报告
- [文秘资料]抓基层党建工作述职报告
- (王虎应老师讲课记录)六爻理象思维
- 八个常见投影机故障排除法
- 质量专业综合知识(中级)第一章质量管理
- 煤矿班组建设实施意见
- 我国快餐业与肯德基经营模式的比较与分
- 汽车保险杠模具标准化模架技术工艺研究
- 汽车二级维护作业团体赛比赛规程
- 装卸搬运工安全操作规程
- 高效的工作方法-刘铁
- 依据《生产安全事故报告和调查处理条例
- 2015专业PS夜景亮化效果图制作教程
- 企业劳动定额定员浅析
- 中枢神经系统医学影像学本科五年制第五
- 长城汽车参观探营第三站:研发试验中心
- 小升初语文专项训练
- 建筑工程质量检测资质分类与等级标准
- 周燕珉-我国养老社区的发展现状与规划
- 《生命里最后的读书会》读后感
- 实验室管理评审报告
- CCNA思科网院教程精华之网络基础知识




