1112实验二 作业调度模拟程序

一、 实验目的

1. 实验目的

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

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

2.实验要求

用高级语言编写一个或多个作业调度的模拟程序。按照模拟数据的到达时间和所需运行时间,执行FCFS, SJF和HRRN调度算法,程序计算各作业的开始执行时间,各作业的完成时间,周转时间和带权周转时间(周转系数)。

二、 实验内容

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

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

  1. 源程序名1.c ;可执行程序名:1.exe

2.原理分析及流程图

先定义一个进程的结构体,内容包括进程名称、到达时间、执行时间、开始时间、完成时间、周转时间。再让客户输入,接着输入要用的算法,然后系统显示该算法运行完的结果。

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

main()
{
    struct stu s[MAX];
    int i,j,p;
    printf("输入进程的个数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        getchar();
        printf("输入第个%d进程的名字:",i+1);
        scanf("%c",&s[i].name);
        printf("输入第%d个进程的到达时间:",i+1);
        scanf("%d",&s[i].gettime);
        printf("输入第%d个进程的执行时间:",i+1);
        scanf("%d",&s[i].time);
        s[i].kstime=0;
        s[i].wctime=0;
        s[i].zztime=0;
    }
    printf("            name  gettime  time  kstime  wctime  zztime\n");
    for(j=0;j<n;j++)
    {
    printf("jinchen      %c      %d      %d      %d       %d       %d\n",s[j].name,s[j].gettime,s[j].time,s[j].kstime,s[j].wctime,s[j].zztime);
    }
    while(1)
    {
    printf("请选择要使用的算法:1,FCFS;2,SJF;3,HRRF:");
    scanf("%d",&p);
    switch(p)
    {
    case 1:
        fcfs(s);
        break;
    case 2:
        sjf(s);
        break;
    case 3:
        hrrf(s);
        break;
    }
    }
}

void fcfs(struct stu d[])
{
    int i,j,q;
    struct stu tim;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(d[i].gettime>d[j].gettime)
            {
                tim=d[i];
                d[i]=d[j];
                d[j]=tim;
            }
        }
    }
    q=d[0].gettime;
    for(i=0;i<n;i++)
    {
        if(q<d[i].gettime)
            q=d[i].gettime;
        d[i].kstime=q;
        d[i].wctime=q+d[i].time;
        d[i].zztime=d[i].wctime-d[i].gettime;
        q=q+d[i].wctime;
    }
    printf("以下是FCFS的调度结果:\n");
    printf("            name  gettime  time  kstime  wctime  zztime\n");
    for(j=0;j<n;j++)
    {
    printf("jinchen      %c      %d      %d      %d       %d       %d\n",d[j].name,d[j].gettime,d[j].time,d[j].kstime,d[j].wctime,d[j].zztime);
    }
}

void sjf(struct stu d[])
{
    int i,j,q;
    struct stu tim;
    q=d[0].gettime;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(d[j].gettime<=q)
            {
                if(d[i].time>d[j].time)
                {
                    tim=d[i];
                    d[i]=d[j];
                    d[j]=tim;
                }
            }
        }
        q=q+d[i].time;
    }

    q=d[0].gettime;
    for(i=0;i<n;i++)
    {
        if(q<d[i].gettime)
            q=d[i].gettime;
        d[i].kstime=q;
        d[i].wctime=q+d[i].time;
        d[i].zztime=d[i].wctime-d[i].gettime;
        q=q+d[i].wctime;
    }
    printf("以下是SJF的调度结果:\n");
    printf("            name  gettime  time  kstime  wctime  zztime\n");
    for(j=0;j<n;j++)
    {
    printf("jinchen      %c      %d      %d      %d       %d       %d\n",d[j].name,d[j].gettime,d[j].time,d[j].kstime,d[j].wctime,d[j].zztime);
    }
}

四、 实验总结

通过这次实验,我学会了很多知识,加深了对作业调度算法的理解,查阅了一些资料和问了同学才得到答案,总体来讲很有挑战性

时间: 2024-12-29 12:27:56

1112实验二 作业调度模拟程序的相关文章

实验二 作业调度模拟程序

实验二 作业调度模拟程序 一.        实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.        实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)      采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间

0421实验二 作业调度模拟程序

实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)

1111《操作系统教程》实验二 作业调度模拟程序

实验二 作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优先 (SJF

操作系统-实验二作业调度模拟程序

实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)

【操作系统】实验二 作业调度模拟程序

实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)

实验二作业调度模拟程序实验报告

实验二作业调度模拟程序 网络工程专业   姓名:蔡利聪  学号:201306114117 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1)       采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进

操作系统 实验二 作业调度模拟程序

实验二.作业调度模拟程序 专业:商软一班   姓名:赖新耀 学号:201406114129 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到

实验二作业调度模拟程序(先来先服务(FCFS)调度算法)

1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1)       采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)       短作业优先 (SJF) 调度算法,优先

实验二作业调度模拟程序

一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)        短作业优