操作系统实验2.docx
- 文档编号:3250238
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:14
- 大小:219.68KB
操作系统实验2.docx
《操作系统实验2.docx》由会员分享,可在线阅读,更多相关《操作系统实验2.docx(14页珍藏版)》请在冰点文库上搜索。
操作系统实验2
操作系统实验报告二
【实验题目】
时间片轮转RR进程调度算法
【实验目的】
通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。
【实验内容】
问题描述:
设计程序模拟进程的时间片轮转RR调度过程。
假设有n个进程分别在T1,…,Tn时刻到达系统,它们需要的服务时间分别为S1,…,Sn。
分别利用不同的时间片大小q,采用时间片轮转RR进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
程序要求如下:
1)进程个数n;每个进程的到达时间T1,…,Tn和服务时间S1,…,Sn;输入时间片大小q。
2)要求时间片轮转法RR调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;
3)输出:
要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:
进程B开始运行”等等;
4)输出:
要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。
实现提示:
用C++语言实现提示:
1)程序中进程调度时间变量描述如下:
intArrivalTime[100];
intServiceTime[100];
intPServiceTime[100];
intFinishTime[100];
intWholeTime[100];
doubleWeightWholeTime[100];
doubleAverageWT,AverageWWT;
boolFinished[100];
2)进程调度的实现过程如下:
Ø变量初始化;
Ø接收用户输入n,T1,…,Tn,S1,…,Sn;时间片大小q;
Ø按照时间片轮转RR算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间;
Ø计算所有进程的平均周转时间和平均带权周转时间;
Ø按格式输出调度结果。
[实验要求]
1)上机前认真复习时间片轮转RR进程调度调度算法,熟悉进程调度的执行过程;
2)上机时独立编程、调试程序;
3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。
【实验目的】
编程实现时间片轮转法调度算法
【实验要求】
【源代码】
#include
#include
#include
#defineMax100
voidmain()
{voidRR();
inta;
while(true)
{
printf("\n\n");
printf("\t\t/************************************/");
printf("\n\t\t/*1、时间片轮转法调度*/");
printf("\n\t\t/*0、退出*/\n");
printf("\t\t/************************************/");
printf("\n\n\t请选择菜单项:
\t");
scanf("%d",&a);
printf("\n");
switch(a)
{
case1:
RR();break;
default:
break;
}//switch
if(a!
=1)break;
}//while
}//voidmain()
voidRR()
{
charname[Max];
intdaoda[Max],fuwu[Max],i,q,Number;
cout<<"请输入进程数(0-100之间):
";
cin>>Number;
while(Number>100||Number<=0)
{
cout<<"您的输入有误,请重新输入进程数(0-100之间):
";
cin>>Number;
}//while
cout< for(i=0;i { cout<<"请输入第"< "; cin>>name[i]>>daoda[i]>>fuwu[i]; } cout< for(intk=0;k<2;k++) { cout<<"请输入第"< "; cin>>q; cout< //----------------------------------------------------- structstateRR//声明结构 { charname;//进程名 booldone,come;//是否完成,是否到达 intdaoda,fuwu,need;//到达时刻,所需服务时间,还需服务时间 floatwancheng,zhouzhuan,daiquan;//完成时间,周转时间,带权周转时间 }; stateRRpro[Max];//声明结构变量,这里为数组 for(i=0;i { pro[i].name=name[i];//进程名 pro[i].done=false; pro[i].come=false; //pro[i].wancheng=0;//pro[i].zhouzhuan=0;//pro[i].daiquan=0; pro[i].daoda=daoda[i]; pro[i].fuwu=fuwu[i]; pro[i].need=fuwu[i]; } //----------------------------------------------------------------- //获取最先到达的进程的下标 intfirst=0; for(i=1;i { if(daoda[first]>daoda[i]) first=i; } inttimefly=daoda[first],LastTime;//inttimefly=0,LastTime;//定义两个类似于秒表的变量 intcircle; boolalldone=false; boolvalid;//队列中的数是否为有效进程的ID ///* unsignedcharQueue[256];// unsignedcharCurPoint=0;//当前位置指针 unsignedcharLastPoint=0;//最后一个位置指针 for(intj=0;j<256;j++){Queue[j]=Number;} Queue[CurPoint]=first; //-------------时间片代码开始-------------------------- while(! alldone) { for(circle=0;circle { if(0==circle)alldone=pro[circle].done; elsealldone&=pro[circle].done; if(! pro[circle].come)//如果pro[circle].come为false if(pro[circle].daoda<=timefly)//到达 { Queue[LastPoint++]=circle; pro[circle].come=true;//设置到达标志 //cout< 进程"< }//if到达 } if(valid)//该指针有效 { if(! pro[Queue[CurPoint]].done)//如果没有完成,排到队尾去 Queue[LastPoint++]=Queue[CurPoint]; Queue[CurPoint]=Number;//若完成,当前指针设为无效,转向下一个 ++CurPoint; }//if(valid) //获得当前要处理的线程的指针并处理 if(Number! =Queue[CurPoint])//该指针有效 { //分配时间片 valid=true; if(pro[Queue[CurPoint]].need<=q)//小于时间片,表示能在时间片内完成 { pro[Queue[CurPoint]].done=true; LastTime=timefly; timefly+=pro[Queue[CurPoint]].need; pro[Queue[CurPoint]].wancheng=timefly; cout<<"时刻"< 进程"< } else { pro[Queue[CurPoint]].need-=q; LastTime=timefly; timefly+=q; pro[Queue[CurPoint]].wancheng=timefly; cout<<"时刻"< 进程"< } } elsevalid=false; } //--------------------时间片代码结束---------------------- floatRRz=0,RRdq=0;// for(i=0;i {//---------------------------------------------------- pro[i].zhouzhuan=(float)(pro[i].wancheng-pro[i].daoda); RRz+=pro[i].zhouzhuan; pro[i].daiquan=pro[i].zhouzhuan/pro[i].fuwu; RRdq+=pro[i].daiquan; } //-------------------------------输出----------------------------- //---------------------------------------------------------------- cout<<"\t"< cout<<"RR(q="< "< cout< for(i=0;i { cout< cout< cout< : fixed)< (2)< cout< : fixed)< (2)< cout< : fixed)< (2)< } cout<<"平均周转时间为: "< : fixed)< (2)< cout<<"平均带权周转时间为: "< : fixed)< (2)< cout< //------------------------------------------------------------------- } } 【效果截图】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验