⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workunit.c

📁 这是一个基于C++的操作系统分页功能的模拟算法!虽然简单
💻 C
字号:

#include <string.h>
#include <stdio.h>

#define N  20


typedef struct
{
    char ID[3];/*作业的序号*/
    int s_min; /*开始的提交时间*/
    int s_hour;
    int e_min; /*运行结束时间*/
    int e_hour;
    int finish; /*作业运行结束的标志:0表示未运行*/
    float respond;/*响应比*/
    int runtime;/*程序运行时间*/
}workunit;/*作业类型*/

/****************函数声明*********************/
float calrespond(workunit ,int ,int);
void display(char *sort[],int n);
void displayunit(workunit unit[],int );



/****************主函数***********************/
void main()
{
    int n_min,n_hour;
    char *sort[N];
    float highres=0;/*最高响应比*/
    int referno=0;
    workunit unit[N];
    int unitno,i=1,next,j;
    printf("输入各作业的信息(作业号,提交时间,运行时间)\n");
    printf("当作业号为(*)时,作业序列提交结束!\n");
    while(1)
    {
        printf("作业号:");
        scanf("%s",unit[i].ID);
        if(unit[i].ID[0]=='*')  break;
        printf("提交时间:");
        scanf("%d:%d",&unit[i].s_hour,&unit[i].s_min);
        printf("运行时间:");
        scanf("%d",&unit[i].runtime);
        unit[i].e_min=unit[i].e_hour=unit[i].finish=0;
        unit[i].respond=0.0;
        i++;
    }
    unitno=i-1;
    displayunit(unit,unitno);
    for(i=1;i<=unitno;)
    {
        if(i==1)/*第一个作业*/
        {
            sort[1]=unit[1].ID;
            /*strcpy(sort[1],unit[1].ID);*/
            n_min=unit[1].e_min=(unit[1].s_min+unit[1].runtime)%60;
            n_hour=unit[1].e_hour=unit[1].s_hour+(unit[1].s_min+unit[1].runtime)/60;
            unit[1].finish=1;
            i++;
        }
        if(i<=unitno)/*后续的作业*/
        {
            for(j=2;j<=unitno;j++)
            {   if(unit[j].finish==0)/*未完成的作业*/
                {
                    if((unit[j].s_hour<n_hour)||(unit[j].s_hour==n_hour&&unit[j].s_min<n_min))
                    /*找出已提交的,并且响比最高的作业*/
                    {
                        referno++;
                        unit[j].respond=calrespond(unit[j],n_min,n_hour);
                        if(unit[j].respond>highres)
                        {
                            next=j;
                            highres=unit[j].respond;
                            sort[i]=unit[j].ID;
                        }
                    }
                }
            }
            if(referno>=1)   /*存在已提交的作业*/
            {
                n_hour=unit[next].e_hour=n_hour+(n_min+unit[next].runtime)/60;
                n_min=unit[next].e_min=(n_min+unit[next].runtime)%60;
                unit[next].finish=1;
                i++;
                highres=0;
            }
            else     /*不存在已提交的作业*/
            {
                sort[i]=unit[i].ID;
                n_min=unit[i].e_min=(unit[i].s_min+unit[i].runtime)%60;
                n_hour=unit[i].e_hour=unit[i].s_hour+(unit[i].s_min+unit[i].runtime)/60;
                unit[i].finish=1;
                i++;
            }
        }
    }
    for(i=1;i<=unitno;i++)  unit[i].respond=(float)((unit[i].e_hour-unit[i].s_hour)*60+(unit[i].e_min-unit[i].s_min))/unit[i].runtime;
    printf("\n\n最后的作业信息:\n");
    displayunit(unit,unitno);
    display(sort,unitno);
    getch();
}


/********************函数定义***********************/
float calrespond(workunit temp,int min,int hour)
{
    float respond;
    int waittime;
    waittime=(hour-temp.s_hour)*60+(min-temp.s_min);
    respond=(float)(waittime+temp.runtime)/temp.runtime;
    return respond;
}
void display(char *sort[],int n)
{
    int i;
    printf("响应序列:");
    for(i=1;i<=n;i++)   printf("%s    ",sort[i]);
}
void output(int min,int hour)
{
    if(hour>=0&&hour<=9)  printf("0");
    printf("%d:",hour);
    if(min>=0&&min<=9)   printf("0");
    printf("%d",min);
}
void displayunit(workunit u[],int n)
{
    int i;
    printf("作业号\t提交时间\t结束时间\t响应比\n");
    for(i=1;i<=n;i++)
    {
        printf("%s\t ",u[i].ID);
        output(u[i].s_min,u[i].s_hour);printf("  \t ");
        output(u[i].e_min,u[i].e_hour);printf("\t\t");
        printf("%f\n",u[i].respond);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -