zoukankan      html  css  js  c++  java
  • 操作系统-模拟作业调度

    #include<stdio.h>
    
    void readfile(void);
    void input(void);
    void output(void);
    void sort(void);
    void FCFS(void);
    void SJF(void);
    void HRRF(void);
    
    struct job{
        char name[10];//作业名
        char status;//作业状态
        
        int arrtime;//到达时间
        int reqtime;//所需时间
        int startime;//开始时间
        int finitime;//结束时间
    
        float TAtime, TAWtime;//周转时间,带权周转时间
        float prio;//优先级
    } jobarr[24], jobfin[24], job[24], temp;
    
    int systime = 0;
    int intarr, intfin, intjob;//到达作业个数,完成作业个数,未到达作业个数
    
    int main(void)
    {
        //input();
        readfile();
        sort();
        output();
        FCFS();
        SJF();
        HRRF();
        return 0;
    }
    
    void readfile(void)
    {   int count = 0; 
        FILE *fp;
        if((fp=fopen("data.txt","a+"))!=NULL)
        {
            while(!feof(fp)&&fgetc(fp)!=EOF)
            {
                fseek(fp,-1L,SEEK_CUR);
                fscanf(fp,"%s%d%d",&job[count].name,&job[count].arrtime,&job[count].reqtime);
                count++;
            }
        }else
            printf("fail to open");
        fclose(fp);
        intarr = count;
    }
    
    
    void input(void)
    {
        int i;
        printf("请输入作业个数:");
        scanf("%d", &intarr);
        for(i = 0; i < intarr; i++)
        {
            printf("
    第%d个作业:
    ", i+1);
            printf("输入作业名:");
            scanf("%s", job[i].name);
            printf("到达时间:");
            scanf("%d", &job[i].arrtime);
            printf("要求服务时间:");
            scanf("%d", &job[i].reqtime);
        }
    }
    void sort(void)
    {
        int i, j;
        for(i = 0; i < intarr; i++)
        {
            for(j = 0; j < intarr-1; j++)
            {
                if(job[j].arrtime > job[j+1].arrtime)
                {
                    temp = job[j]; 
                    job[j] = job[j+1]; 
                    job[j+1] = temp;
                }
            }
        }
    }
    void output(void)
    {
        int i;
        printf("经按到达时间排序后
    ");
        printf("	name	arrtime	rqtime
    ");
        for(i = 0; i < intarr; i++)
        {
            printf("N %d	%s	%d	%d
    ", i, job[i].name, job[i].arrtime, job[i].reqtime);
        }
        printf("
    			现在系统时间%d
    ", systime);
    }
    
    void FCFS(void)
    {
        int i;
        double sumTAtime = 0;//总周转时间
        double sumTAWtime = 0;//总带权周转时间
        double avgTAtime = 0;//平均周转时间
        double avgTAWtime = 0;//平均带权周转时间
        job[0].finitime = job[0].arrtime + job[0].reqtime;
        job[0].startime = job[0].arrtime;
        for(i = 1; i < intarr; i++)
        {
            job[i].startime = job[i-1].finitime;
            job[i].finitime = job[i-1].finitime + job[i].reqtime;
        }
        for(i = 0; i < intarr; i++)
        {
            job[i].TAtime = job[i].finitime - job[i].arrtime;
            sumTAtime += job[i].TAtime;
            job[i].TAWtime = job[i].TAtime / job[i].reqtime;
            sumTAWtime += job[i].TAWtime;
        }
        avgTAtime = sumTAtime / intarr;
        avgTAWtime = sumTAWtime / intarr;
    
        printf("
    FCFS算法作业序列表
    ");
        printf("-----------------------------------------------
    ");
        printf("作业名	到达系统时间	cpu所需时间	开始时间	结束时间	周转时间
    ");
        for(i = 0; i < intarr; i++)
        {
            printf("%s	%d		%d		%d		%d		%.2f
    ", job[i].name, job[i].arrtime, job[i].reqtime, job[i].startime, job[i].finitime, job[i].TAtime);
        }
        printf("
    平均周转时间=%.2f", avgTAtime);
        printf("
    平均带权周转时间=%.2f
    ", avgTAWtime);
    }
    
    void SJF(void)
    {
        int i = 1, j = 1;
        double sumTAtime = 0;//总周转时间
        double sumTAWtime = 0;//总带权周转时间
        double avgTAtime = 0;//平均周转时间
        double avgTAWtime = 0;//平均带权周转时间
        
        job[0].finitime = job[0].arrtime + job[0].reqtime;
        job[0].startime = job[0].arrtime;
        
        for(i = 1; i < intarr; i++)
        {
            for(j = 1; j < intarr-1; j++)
            {
                if(job[j].reqtime > job[j+1].reqtime)
                {
                    temp = job[j]; 
                    job[j] = job[j+1]; 
                    job[j+1] = temp;
                }
            }
        }
        for(i = 1; i < intarr; i++)
        {
            job[i].startime = job[i-1].finitime;
            job[i].finitime = job[i-1].finitime + job[i].reqtime;
        }
        for(i = 0; i < intarr; i++)
        {
            job[i].TAtime = job[i].finitime - job[i].arrtime;
            sumTAtime += job[i].TAtime;
            job[i].TAWtime = job[i].TAtime / job[i].reqtime;
            sumTAWtime += job[i].TAWtime;
        }
        avgTAtime = sumTAtime / intarr;
        avgTAWtime = sumTAWtime / intarr;
    
        printf("
    SJF算法作业序列表
    ");
        printf("-----------------------------------------------
    ");
        printf("作业名	到达系统时间	cpu所需时间	开始时间	结束时间	周转时间
    ");
        for(i = 0; i < intarr; i++)
        {
            printf("%s	%d		%d		%d		%d		%.2f
    ", job[i].name, job[i].arrtime, job[i].reqtime, job[i].startime, job[i].finitime, job[i].TAtime);
        }
        printf("
    平均周转时间=%.2f", avgTAtime);
        printf("
    平均带权周转时间=%.2f
    ", avgTAWtime);
    }
    
    void HRRF(void)
    {
        int i = 1, j = 1;
        double sumTAtime = 0;//总周转时间
        double sumTAWtime = 0;//总带权周转时间
        double avgTAtime = 0;//平均周转时间
        double avgTAWtime = 0;//平均带权周转时间    
        job[0].finitime = job[0].arrtime + job[0].reqtime;
        job[0].startime = job[0].arrtime;
        sort();
        for(i = 1; i < intarr; i++)
        {
            for(j = 1; j < intarr-1; j++)
            {
                if(job[j].prio < job[j+1].prio)
                {
                    if(job[j].arrtime == job[j+1].arrtime)
                    {
                        temp = job[j]; 
                        job[j] = job[j+1]; 
                        job[j+1] = temp;
                    }
                }
            }
        }
        for(i = 1; i < intarr; i++)
        {
            job[i].prio = 1 + (job[i-1].finitime - job[i].arrtime) / job[i].reqtime;
            job[i].finitime = job[i-1].finitime + job[i].reqtime;
        }
    
        for(i = 0; i < intarr; i++)
        {
            job[i].TAtime = job[i].finitime - job[i].arrtime;
            sumTAtime += job[i].TAtime;
            job[i].TAWtime = job[i].TAtime / job[i].reqtime;
            sumTAWtime += job[i].TAWtime;
        }
        avgTAtime = sumTAtime / intarr;
        avgTAWtime = sumTAWtime / intarr;
    
        printf("
    HRRF算法作业序列表
    ");
        printf("-----------------------------------------------
    ");
        output();
        printf("id	最高响应比
    ");
        for(i = 1; i < intarr; i++)
        {
            printf("%s	%.2f
    ", job[i].name, job[i].prio);
        }
        printf("-----------------------------------------------
    ");
        printf("作业名	到达系统时间	cpu所需时间	开始时间	结束时间	周转时间
    ");
        for(i = 0; i < intarr; i++)
        {
            printf("%s	%d		%d		%d		%d		%.2f
    ", job[i].name, job[i].arrtime, job[i].reqtime, job[i].startime, job[i].finitime, job[i].TAtime);
        }
        printf("
    平均周转时间=%.2f", avgTAtime);
        printf("
    平均带权周转时间=%.2f
    ", avgTAWtime);
    }

  • 相关阅读:
    程序员小抄大全
    赢在中国“80后30个忠告”
    Eclipse下python插件(pydev)的安装
    PDF加密文件的解密和打印
    中美欧联手打击僵尸网络 深化安全合作 狼人:
    入侵奥巴马帐号法国黑客自称是一个好黑客 狼人:
    Firefox 3.6.3版率先修复黑客大赛所曝漏洞 狼人:
    2009年全球安全SaaS市场收入比2008年增长70% 狼人:
    微软等厂商高管谈安全云面临的挑战 狼人:
    报告称Windows7不安全 管理员权限是罪魁祸首 狼人:
  • 原文地址:https://www.cnblogs.com/qazwsxedcrfv/p/5421075.html
Copyright © 2011-2022 走看看