logo资料库

时间片轮转RR进程调度算法.doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
时间片轮转 RR 进程调度算法 /******************************************** ** ********************************************/ #include #include #include #include using namespace std; //====================================================== static const int MaxNum=100; int n = 0; int q = 0; int ArrivalTime[MaxNum] = {0}; int ServiceTime[MaxNum] = {0}; int PServiceTime[MaxNum] = {0}; int FinishTime[MaxNum] = {0}; int WholeTime[MaxNum] = {0}; double WeightWholeTime[MaxNum] = {0.0}; double AverageWT=0.0; double AverageWWT=0.0; bool Finished[MaxNum] = {false}; void Input_Data(); void Round_Robin(); void Output_Data(); struct Nodes { //完成标志 //输入函数 //RR 函数 //输出函数 //结点 ** //最大进程数 //进程数 //时间片 //到达时间 //服务时间 //已完成的服务时间 //完成时间 //周转时间 //带权周转时间 //平均周转时间 //平均带权周转时间 int Index;//序号 int AT; int ST; int PST; //到达时间 //服务时间 //已完成的服务时间 }; //====================================================== int main() { 时间片轮转 RR 进程调度算法 cout<<"********************************************"<
{//输入函数 int i = 0; ifstream in("data.txt");//为方便,从文件读取数据 cout<<"请输入进程数(默认从 data.txt 文件中读取):"; in>>n; cout<=100) { cout<<"输入的进程数超过 100!\n"; exit(-1); } else if(n <= 0) { cout<<"输入的进程数小于 1!\n"; exit(-1); } for(; i < n ; i++) {//输入到达时间 cout<<"请输入第"<>ArrivalTime[i]; cout<>ServiceTime[i]; cout<>q; cout<
void Round_Robin() {//时间轮转算法函数 //周转时间总值 //带权周转时间总值 int i = 0; double WT = 0; double WWT = 0; int NowTime = 0; //时刻 // list nodes_list; //链表 Nodes node; for(i = 0;i < n;i++) {//把所有需要的信息一次填充进结点然后放进 list 容器 //结点 node.Index = i; node.AT = ArrivalTime[i]; node.ST = ServiceTime[i]; node.PST = PServiceTime[i]; nodes_list.push_back(node); } while(!nodes_list.empty()) {//当 list 容器不空的时候执行 int index = nodes_list.front().Index;//下标且为序号 cout<= nodes_list.front().ST) {//如果进程已经完成的服务时间不小于服务时间(即已经完成),则标志结束标记, 并且计算要求的量 //标记 Finished[index] = true; s = nodes_list.front().PST - nodes_list.front().ST; int r = q-s;//完成作业需要的时间 FinishTime[index] = NowTime + r; WholeTime[index] = FinishTime[index] - ArrivalTime[index]; //计算周转时间 WeightWholeTime[index] = (double)WholeTime[index]/ServiceTime[index]; //计 //计算结束时间 算带权周转时间 } if(Finished[index]) {//如果进程确认结束 nodes_list.pop_front(); //把该表示进程的结点从容器中删除 if(nodes_list.empty())//如果容器空,则退出 while 循环 break; int r = q-s; NowTime += r;//时刻前进 continue;//如果容器不空,则继续下一个循环
} NowTime += q;//时刻前进 //把 list 容器的第一个进程转移到已经到达的进程的最末 list::iterator iter; list::iterator iter1 = nodes_list.begin(); list::iterator iter2 = nodes_list.end(); while(iter1 != iter2) {//查找进程插入的位置 if(iter1->AT <= NowTime) {//如果到达时间不大于现在的时刻,表示已经到达 iter = ++iter1;//让迭代器只向下一位 continue;//继续下一个循环 } else break;//如果进程没有到达,那么跳出循环 } Nodes node = nodes_list.front(); nodes_list.insert(iter,node);//把第一个进程插入到所查找的位置 nodes_list.pop_front();//删除第一个进程 } // for(i = 0;i < n;i++) { WT = WT + WholeTime[i]; WWT = WWT + WeightWholeTime[i]; } AverageWT = WT/n; AverageWWT = WWT/n; //求出平均周转时间 //求出平均带权周转时间 } //====================================================== void Output_Data() {//输出函数 for(int a = 0 ; a < n ; a++) { //<<"时刻"<
分享到:
收藏