当前位置:首页 >> 高中作文 >> 时间片轮转法

时间片轮转法


《操作系统》实验二内容要求
【实验题目】:时间片轮转 RR 进程调度算法 【实验学时】:4学时 【实验目的】 通过这次实验,加深对进程概念的理解,进一步掌握进程状态的 转变、进程调度的策略及对系统性能的评价方法。 【实验内容】 问题描述: 设计程序模拟进程的时间片轮转 RR 调度过程。假设有 n 个进程 分 别 在 T1, … ,Tn 时 刻到 达 系统 ,它 们 需

要 的服 务时 间 分 别 为 S1, … ,Sn。分别利用不同的时间片大小 q,采用时间片轮转 RR 进程 调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转 时间,并且统计 n 个进程的平均周转时间和平均带权周转时间。 程序要求如下: 1)进程个数 n;每个进程的到达时间 T1, … ,Tn 和服务时间 S1, … ,Sn;输入时间片大小 q。 2)要求时间片轮转法 RR 调度进程运行,计算每个进程的周转时 间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周 转时间; 3) 输出: 要求模拟整个调度过程, 输出每个时刻的进程运行状态, 如“时刻 3:进程 B 开始运行”等等; 4)输出:要求输出计算出来的每个进程的周转时间,带权周转时

间,所有进程的平均周转时间,带权平均周转时间。 实现提示: 用 C++语言实现提示: 1)程序中进程调度时间变量描述如下: int ArrivalTime[100]; int ServiceTime[100]; int PServiceTime[100]; int FinishTime[100]; int WholeTime[100]; double WeightWholeTime[100]; double AverageWT,AverageWWT; bool Finished[100]; 2)进程调度的实现过程如下: ? 变量初始化; ? 接收用户输入 n,T1, … ,Tn,S1, … ,Sn;时间片大小 q; ? 按照时间片轮转 RR 算法进行进程调度, 计算进程的完成时间、 周转时间和带权周转时间; ? 计算所有进程的平均周转时间和平均带权周转时间;
?

按格式输出调度结果。

代码
#include <iostream> #include <algorithm> #include <queue> using namespace std;

const int MaxNum = 100; struct Node{ int index; int arriveTime; int rest; }; bool NodeCmp(const Node& a,const Node& b) { return a.arriveTime < b.arriveTime; } int n; //进程数 int ArrivalTime[MaxNum]; int ServiceTime[MaxNum]; int PServiceTime[MaxNum]; int FinishTime[MaxNum]; int WholeTime[MaxNum]; double WeightWholeTime[MaxNum]; bool Finished[MaxNum]; double AverageWT,AverageWWT; bool isEnterQue[MaxNum]; int cntTimes[MaxNum]; void init() { memset(PServiceTime,0,sizeof(PServiceTime)); memset(Finished,0,sizeof(Finished)); memset(FinishTime,0,sizeof(FinishTime)); memset(WholeTime,0,sizeof(WholeTime)); memset(WeightWholeTime,0,sizeof(WeightWholeTime)); } int sum(int array[],int n) { int sum=0; int i; for(i=0;i<n;i++) { sum += array[i]; } return sum; }

double sum(double array[],int n) { double sum=0; int i; for(i=0;i<n;i++) { sum += array[i]; } return sum; } void print() { int i=0; cout<<"进程完成时间:"; for(i=0;i<n;i++) { cout<<FinishTime[i]<<' '; } cout<<endl; cout<<"周转时间:"; for(i=0;i<n;i++) { cout<<WholeTime[i]<<' '; } cout<<endl; cout<<"带权周转时间:"; for(i=0;i<n;i++) { printf("%.2f ",WeightWholeTime[i]); } cout<<endl; } void SearchToEnterQue(queue<Node>& que,Node* pArr,int maxArrivalTime) { int i; for(i=0;i<n;i++) { if(pArr[i].arriveTime>maxArrivalTime) break; if(isEnterQue[pArr[i].index]==false)

{ que.push(pArr[i]); isEnterQue[pArr[i].index] = true; } } } void Work(int q) { init(); memset(isEnterQue,0,sizeof(isEnterQue)); memset(cntTimes,0,sizeof(cntTimes)); Node* pNodeArr = new Node[n]; int i; for(i=0;i<n;i++) { pNodeArr[i].index = i; pNodeArr[i].arriveTime = ArrivalTime[i]; pNodeArr[i].rest = ServiceTime[i]; } sort(pNodeArr,pNodeArr+n,NodeCmp); int totalTime = sum(ServiceTime,n); int time=pNodeArr[0].arriveTime; queue<Node> que; que.push(pNodeArr[0]); isEnterQue[pNodeArr[0].index]=true; Node cur; cout<<"================================================="<< endl; while(!que.empty()) { cur = que.front(); que.pop(); cntTimes[cur.index]++; if(cntTimes[cur.index]==1) printf("在%d 时刻,进程%d 开始执行。。\n",time,cur.index); 。 if(cur.rest > q) { time += q; cur.rest -= q; } else

{ time += cur.rest; Finished[cur.index]=true; FinishTime[cur.index] = time; cur.rest = 0; printf("在%d 时刻,进程%d 执行结束。\n",time,cur.index); } SearchToEnterQue(que,pNodeArr,time); if(cur.rest!=0) que.push(cur); if(que.empty())//若队列为空,则在 time 之后才达到的进程找最早到达的 进程入队列 { for(i=0;i<n;i++) { if(isEnterQue[i]==false)//找到了 { que.push(pNodeArr[i]);//入队列 time = pNodeArr[i].arriveTime; break; } } } } for(i=0;i<n;i++) { WholeTime[i] = FinishTime[i] - ArrivalTime[i]; WeightWholeTime[i] = (double)WholeTime[i] / (double)ServiceTime[i]; } AverageWT = (double)sum(WholeTime,n)/(double)n; AverageWWT=(double)sum(WeightWholeTime,n)/(double)n; cout<<"================================================="<< endl; print(); cout<<endl<<endl; cout<<"================================================="<< endl; printf(" 平 均 周 转 时 间 :%.2f, 平 均 带 权 周 转 时 间:%.2f\n",AverageWT,AverageWWT); delete[] pNodeArr; } int main() {

//

freopen("test.txt","rw",stdin); int q;//时间片大小 int i; cout<<"输入进程数:"; cin>>n;; cout<<"输入每个进程的到达时间:"<<endl; for(i=0;i<n;i++) cin>>ArrivalTime[i]; cout<<"输入每个进程的服务时间:"<<endl; for(i=0;i<n;i++) cin>>ServiceTime[i]; cout<<"输入时间片大小"<<endl; cin>>q; Work(q);

return 0; } 运行截图


更多相关文档:

时间片轮转法

时间片轮转法_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 时间片轮转法_计算机软件及应用_IT/计算机_专业资料。#include <stdio....

操作系统时间片轮转法调度

时间片轮转法模拟进程调度一、基本原理 在时间片轮转法中, 系统将所有的就绪进程按先来先服务的原则 排成一个队列,每次调度时,把 CPU 分配给队首进程,并令其...

时间片轮转法例题执行图

时间片轮转法例题执行图_司法考试_资格考试/认证_教育专区 暂无评价|0人阅读|0次下载|举报文档 时间片轮转法例题执行图_司法考试_资格考试/认证_教育专区。...

时间片轮转调度算法

《操作系统》课程实验报告 实验名称:时间片轮转调度算法 班学姓 级: *** 号: *** 名:*** *** 指导老师: 成绩: 一、实验目的: 1、测试数据可以随即输入...

时间片轮转法完成进程调度(操作系统实验报告)

时间片轮转法完成进程调度【实验目的】 (1) 加深对进程的理解(2) 理解进程控制块的结构 (3) 理解进程运行的并发性 (4) 掌握时间片轮转法进程调度算法 【...

时间片轮转调度法

时间片轮转调度法_工学_高等教育_教育专区。时间片轮转调度法时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每 个进程被分配一个时间段,称作它...

时间片轮转法

《操作系统》实验二内容要求【实验题目】:时间片轮转 RR 进程调度算法 【实验学时】:4学时 【实验目的】 通过这次实验,加深对进程概念的理解,进一步掌握进程状态...

时间片轮转法调度程序

时间片轮转调度法 2页 5财富值 基于优先数和轮转时间片的... 3页 5财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行...

操作系统时间片轮转法进程CPU调度

项目名称:设计一个按时间片轮转法进程 CPU 调度的程序一、 设计目的操作系统课程设计是计算机专业重要的课程,它为学生提供了一个既动手又 动脑, 将课本上的理论...

时间片轮转法

时间片轮转法_IT/计算机_专业资料。郑州轻工业学院 实训报告 实训名称: 实训名称: 时间片轮转 姓 名: 张驰 计算机与通信工程 嵌入式 09-01 540913090149 张旭 ...
更多相关标签:
时间片轮转调度算法 | 时间片轮转 | 时间片轮转法例题 | 时间片轮转调度例题 | 时间片轮转法流程图 | 时间片轮转法怎么算 | 时间片轮转调度练习题 | 时间片轮转法c++代码 |
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com