OS实验报告--FCFS算法

实验二、作业调度模拟实验

专业:商业软件工程  姓名:王泽锴 学号:201406114113

一、实验目的

(1)加深对作业调度算法的理解;

(2)进行程序设计的训练。

二、实验内容和要求

(1)实验要求

  用高级语言编写一个或多个作业调度的模拟程序。

  单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。

(2)实验内容

  根据指定的实验课题,完成设计、编码和调试工作,完成实验报告。

三、实验方法、步骤及结果测试

1.     源程序名:4.cpp         可执行程序名4.exe

2.     原理分析及流程图

  

3.     主要程序段及其解释:、

void FCFS()
{

    //调用输入函数
    base();

    int i,j,k = 0;
    int temp[100];
    for(i=0;i<num;i++)
        temp[i]=i;

    //按作业到达时间进行排序
    for(i=0;i<num;i++){
        for(j=i+1;j<num;j++){
            if(job[temp[i]].arrtime>job[j].arrtime){
                k = temp[i];
                temp[i] = temp[j];
                temp[j] = k;
            }
        }
    }

    //计算周转时间、带权周转时间
    job[temp[0]].startime = job[temp[0]].arrtime;
    job[temp[0]].finitime = job[temp[0]].startime + job[temp[0]].reqtime;
    job[temp[0]].TAtime = (float)job[temp[0]].finitime - job[temp[0]].arrtime;
    job[temp[0]].TAWtime = job[temp[0]].TAtime/job[temp[0]].reqtime;
    for(i=1;i<num;i++){
        job[temp[i]].startime = job[temp[i-1]].finitime;
        job[temp[i]].finitime = job[temp[i]].startime + job[temp[i]].reqtime;
        job[temp[i]].TAtime = (float)job[temp[i]].finitime - job[temp[i]].arrtime;
        job[temp[i]].TAWtime = job[temp[i]].TAtime/job[temp[i]].reqtime;
    }

    printf("经按到达时间排序后,未达到队列是
");
    printf("作业名  到达时间  CPU所需时间  开始时间  结束时间  周转时间  带权周转时间
");

    //输出相关内容
    for(i=0;i<num;i++)    
    {
        printf("  %s	   %d		%d	  %d	    %d	   %f	   %f
",job[temp[i]].name,job[temp[i]].arrtime,
            job[temp[i]].reqtime,job[temp[i]].startime,job[temp[i]].finitime,job[temp[i]].TAtime,job[temp[i]].TAWtime);
    }
    
    //计算平均周转时间、平均带权周转时间
    for(i=0;i<num;i++)
    {
        AVGTAtime += job[temp[i]].TAtime;
        AVGTAWtime += job[temp[i]].TAWtime;
    }

    printf("

平均周转时间=%f
",AVGTAtime/num);
    printf("平均带权周转时间=%f

",AVGTAWtime/num);
}

4.     运行结果及分析

实验分析:实验结果与预期的一致,对于输出内容也进行了测试,也与结果一致。

四、实验总结

    FCFS算法相对比较容易实现,主要是先到先服务,只要按照到达时间进行排序,然后计算周转时间,带权周转时间,就能很简单的计算出平均周转时间,平均带权周转时间。

 

原文地址:https://www.cnblogs.com/wangzekai/p/5395000.html