• 大小: 431KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: 操作系统  

资源简介

操作系统实验二 时间片轮转RR进程调度算法(内含源代码和详细实验报告),详细介绍:http://blog.csdn.net/xunciy/article/details/79239096

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
using namespace std;

//存放每个进程信息的结构体
typedef struct{
    char name;//进程名字
    int ArrivalTime;//到达时间
    int ServiceTime;//服务时间
    int FinishedTime;//完成时间
    int WholeTime;//周转时间
    double WeightWholeTime;//带权周转时间
}RR;

static queueRRqueue;  //用来模拟进程执行RR调度算法的队列
static double SumWT=0SumWWT=0AverageWT =0AverageWWT=0;//平均周转时间、平均带权周转时间
static int q;  //时间片数
static int n;  //进程个数
static RR RRarray[100];  //进程结构体
static RR temp;  //进程结构

void Enter();//输入时间片、到达时间、服务时间等
void RRfunction();//执行RR调度算法
void display();//显示各时间执行情况,以及各个时间值

int main(){
    Enter();
    RRfunction();
    display();
    return 0;
}

//输入时间片、到达时间、服务时间等
void Enter(){
    int ij;
    cout<<“Enter n: “;
    cin>>n;
    cout<<“Enter TimeSlice q: “;
    cin>>q;

    for (i=0;i      RRarray[i].name=i+65;//自动将进程名字顺序编号为A、B、C、D、E等
    }

    cout<<“Enter ArrivalTime: “;
    for (i=0;i      cin>>RRarray[i].ArrivalTime;
    }

    cout<<“Enter ServiceTime: “;
    for (i=0;i      cin>>RRarray[i].ServiceTime;
    }

    //根据达时间排序
    for(i=0;i        for(j=i+1;j            if(RRarray[i].ArrivalTime > RRarray[j].ArrivalTime) {
                temp = RRarray[i];
                RRarray[i] = RRarray[j];
                RRarray[j] = temp;
            }
        }
    }
}

//执行RR调度算法
void RRfunction(){
    char Moment[100];   //存储每个时间片p对应的进程名称
    RRqueue.push(RRarray[0]);   //第一个进程进队列

    int MomentPoint = 0;
    int CurrentTime=0;
    int tempTime;   //控制CurrentTime的累加时间,当前进程的服务时间小于时间片q的时候,起到重要作用
    int i=1jkp;  //指向还未处理的进程的下标
    int finalNumber = 0;   //执行RR算法后,进程的个数
    int Time[50];

    //判断第一个进程的服务时间是否大于时间片,如果大于CurrentTime=q,如果小于CurrentTime=服务时间
    if (RRarray[0].ServiceTime>=q)
        CurrentTime = q;
    else
        CurrentTime = RRarray[0].ServiceTime;

    while(!RRqueue.empty()){
        for (j=i;j            if (RRarray[j].name!=NULL && CurrentTime >= RRarray[j].ArrivalTime){
                RRqueue.push(RRarray[j]);
                i++;
            }
        }
        if (RRqueue.front().ServiceTime            tempTime = RRqueue.front().ServiceTime;
        else
            tempTime = q;

        RRqueue.front().ServiceTime -= q;   //进程每执行一次,就将其服务时间 -q

        //将队首进程的名称放入数组中
        Moment[MomentPoint] = RRqueue.front().name;
        MomentPoint++;
        Time[finalNumber] = tempTime;
        finalNumber++;


        if (RRqueue.front().ServiceTime <= 0)  //把执行完的进程退出队列
            RRqueue.pop();   //如果进程的服务时间小于等于,即该进程已经服务完了,将其退栈
        else{
            //将队首移到队尾
            RRqueue.push(RRqueue.front());
            RRqueue.pop();
        }
        CurrentTime += tempTime;

    }

    //进程各时间进程状态,计算完成时间
    cout<<“Time 0: “;
    Time[finalNumber]=0;
    int time = Time[0];
    f

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-02-02 14:31  实验二  时间片轮转RR进程调度算法\
     目录           0  2018-02-02 14:27  实验二  时间片轮转RR进程调度算法\2.RR\
     文件        5556  2017-12-14 11:29  实验二  时间片轮转RR进程调度算法\2.RR\RR.cpp
     文件     1075201  2017-12-14 11:29  实验二  时间片轮转RR进程调度算法\2.RR\RR.exe
     文件       43166  2017-12-14 11:29  实验二  时间片轮转RR进程调度算法\2.RR\RR.o
     文件      141289  2017-12-28 22:10  实验二  时间片轮转RR进程调度算法\实验二  时间片轮转RR进程调度算法.docx

评论

共有 条评论