• 大小: 1.85MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-17
  • 语言: C/C++
  • 标签: OS  RR  

资源简介

该程序实现作业调度的RR算法,只要输入时间片,进程号,到达时间,运行所需时间即可,输出的是一条时间轴和对应的进程运行流程,表示一个时间点里哪个进程在运行。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
using namespace std;
const int MAXN = 1000;//假设能够容纳的进程最多的个数
 
struct Process
{
    int pos;                          //代表第几个输入的进程
    char Process_name[50];            //进程名字,默认最长长度占用50字符
    double Arrival_time;             //进程到达时间
    double Service_time;             //服务时间       进程所需要的时间
    double Start_time;               //服务开始时间
    double End_time;                 //服务结束的时间
    double Turnaround_time;          //周转时间    进程结束的时间-进程到达时间
    double Weight_Turnaround_time;   //带权周转时间       周转时间 / 服务时间
}process[MAXN];
double every_time;
int n;
double temp[100];
double tmp;
double sumwait;
 
void Init()
{
    printf(“请输入时间片的时间:“);
    scanf(“%lf“&every_time);
    printf(“请输入进程的数量:“);
    scanf(“%d“&n);
    for(int i = 0;i < n;i ++)
    {
        cout<<“请输入第“<        scanf(“%s“process[i].Process_name);
        scanf(“%lf“&process[i].Arrival_time);
        scanf(“%lf“&process[i].Service_time);
        process[i].pos = i;
    }
}
bool cmp1(const Process &aconst Process &b)
{
    return a.Arrival_time < b.Arrival_time;
}
 
void Solve_TSRA()
{
    /*
    时间片轮转算法:
    */
    printf(“时间片轮转算法:\n“);
    queue que;
    sort(processprocess+ncmp1);
    bool vis[MAXN];      //表示这个进程有没有在完成,完成使用true表示
    Process ans[MAXN];
    double time = max(0.0process[0].Arrival_time);int index = 0;
    memset(visfalsesizeof(vis));
    que.push(process[0]);vis[process[0].pos] = 1;
    for(int i = 0;i < n;i ++)
    {
        while(!que.empty())
        {
            Process temp = que.front();   que.pop();
            temp.Start_time = time;
            temp.End_time = temp.Service_time >= every_time ? time + every_time : time + temp.Service_time;
            for(int j = 0;j < n;j ++)
                if(!vis[process[j].pos] && process[j].Arrival_time <= temp.End_time)
                {
                    vis[process[j].pos] = 1;
                    que.push(process[j]);
                }
            if(temp.Service_time > every_time)
            {
                temp.Service_time -= every_time;
                que.push(temp);
                time += every_time;
            }
            else
                time += temp.Service_time;       //这里面的时间都是有联系的,所以不用再次更新time
            ans[index++] = temp;             //将顺序存储到最终的答案序列中
        }
        bool flag = false; //判断是否所有的进程都已经完成
        for(int j = 0;j < n;j ++)
            if(!vis[process[j].pos])
            {
                que.push(process[j]);//将一个时间最靠前的添加到队列中
                time = process[j].Arrival_time;   //这里就要更新time了,因为这里的时间和上面的有些脱节!
                flag = true;break;
            }
        if(!flag) break;
    }
    printf(“进程的运行顺序为:\n“);
    for(int i = 0;i < index;i ++){
        printf(“%.0lf - %s - “ans[i].Start_timeans[i].Process_name);
if(i==index-1)
 pr

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      92672  2018-12-14 12:04  RR\Debug\操作系统6.4.exe

     文件     421600  2018-12-14 12:04  RR\Debug\操作系统6.4.ilk

     文件    1002496  2018-12-14 12:04  RR\Debug\操作系统6.4.pdb

     文件       3920  2018-12-14 11:32  RR\操作系统6.4\6.4.cpp

     文件     277061  2018-12-14 12:04  RR\操作系统6.4\Debug\6.4.obj

     文件       1414  2018-12-14 12:04  RR\操作系统6.4\Debug\cl.command.1.tlog

     文件      26442  2018-12-14 12:04  RR\操作系统6.4\Debug\CL.read.1.tlog

     文件        470  2018-12-27 11:16  RR\操作系统6.4\Debug\CL.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link-cvtres.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link-cvtres.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link-rc.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link-rc.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10544-cvtres.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10544-cvtres.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10544-rc.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10544-rc.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10544.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10544.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10652-cvtres.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10652-cvtres.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10652-rc.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10652-rc.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10652.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.10652.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.11028-cvtres.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.11028-cvtres.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.11028-rc.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.11028-rc.write.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.11028.read.1.tlog

     文件          2  2018-12-14 12:04  RR\操作系统6.4\Debug\link.11028.write.1.tlog

............此处省略50个文件信息

评论

共有 条评论