zoukankan      html  css  js  c++  java
  • 作业调度

    一、目的和要求

         1. 实验目的

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

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

         2.实验要求

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

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

            作业调度算法:

                1)采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。

                2)短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业。

                3)响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高者优先调度。RP (响应比)= 作业周转时间 / 作业运行时间=1+作业等待时间/作业运行时间每个作业由一个作业控制块JCB表示,JCB可以包含以下信息:作业名、提交(到达)时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种之一。每个作业的最初状态都是等待W。

           一、模拟数据的生成

                1.允许用户指定作业的个数(2-24),默认值为5。

                2.允许用户选择输入每个作业的到达时间和所需运行时间。

                3.(**)从文件中读入以上数据。

                4.(**)也允许用户选择通过伪随机数指定每个作业的到达时间(0-30)和所需运行时间(1-8)。

    源代码(先来先服务):

    #include<stdio.h>
    #define N 24

    typedef struct node
    {
    char name[10]; /*作业名*/
    int proc; //进程优先数*/ 
    int ArriTime;//到达时间
    int StartTime;//开始时间
    int NeedTime; /*进程所需时间*/ 
    int RunTime; /*运行时间*/
    int EndTime;//结束时间
    int ZzTime;//周转时间
    float Zznum;
    char state; //进程的状态*/

    /*struct node *next; 链指针*/
    /*int round; 进程时间轮转时间片*/ 
    /*int count; 计数器*/
    }JCB;

    int main(void){
    JCB job[N];
    int n;
    void input();
    input(job,&n);
    void FCFS();
    FCFS(n);

    }

    void input(JCB job[],int n){

    int tot; //作业个数
    int i;

    printf("请输入作业个数:[2-24]\n");
    scanf("%d",&tot);
    for(i=0;i<tot;i++){
    job[i].proc=i;
    printf("输入第[i+1]个作业的作业名,到达时间,所需时间\n");
    scanf("%s",&job[i].name);
    scanf("%d",&job[i].ArriTime);
    scanf("%d",&job[i].NeedTime);
    //scanf("%d",&job[i].EndTime);
    //scanf("%d",&job[i].ZzTime);
    //scanf("%4f",&job[i].Zznum);
    }
    printf("作业名 到达时间 所需时间\n");
    for(i=0;i<tot;i++)
    {
    printf("%s ",job[i].name);
    printf("%5d ",job[i].ArriTime);
    printf("%5d ",job[i].NeedTime);
    //printf("%5d ",job[i].EndTime);
    // printf("%5d ",job[i].ZzTime);
    //printf("%2.1f ",job[i].Zznum);
    }

    }


    void FCFS(int num) //先来先服务算法计算 

    int i,j; 
    for(i=0;i<num;i++)//顺序执行进入队列的作业 
    { if(i==0) //第一个进程 

    job[i].RunTime=job[i].NeedTime; 
    job[i].EndTime=job[i].StartTime+job[i].RunTime; 

    else 

    if(job[i].StartTime>job[i-1].EndTime)//如果当前有作业在执行 

    job[i].RunTime=job[i].NeedTime; 
    job[i].EndTimejob[i].StartTime+job[i].RunTime; 

    else 

    job[i].RunTime=job[i].NeedTime+job[i-1].EndTime-job[i].StartTime;
    job[i].EndTime=job[i].StartTime+jobc[i].RunTime; 

    }

    }

    运行结果:

     实验总结:

    通过这次实验,加深了我对先来先服务作业调度的理解,复习了相关的知识。但对于其他两个的作业调度方法还没掌握好。

  • 相关阅读:
    sql server 以10分钟分组 统计人数
    【转】锁(lock)知识及锁应用
    虚拟机中实现Linux与Windows之间的文件传输
    sql server 备份恢复效率
    sql server dba常用概念、操作分析char,varchar,nvarchar,varchar(max)
    数据库事务的四大特性以及事务的隔离级别
    SQLServer DBA 三十问(加强版)
    SQLServerDBA十大必备工具---让生活轻松点
    http头
    High performance web site
  • 原文地址:https://www.cnblogs.com/xkb07/p/4483879.html
Copyright © 2011-2022 走看看