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

    作业调度主要有FIFO,运算时间短的作业优先,优先数调度算法,响应比最高者优先调度算法,均衡调度算法
    模拟最高响应比优先作业调度算法
    输入:作业流文件,其中存储的是一系列要执行的作业,
    每个作业包括三个数据项:
    作业号、作业进入系统的时间(用一整数表示,如10:10,表示成1010)、估计执行时间(单位分)优先级(0级最高)
    参数用空格隔开,下面是示例:
    1 800 50
    2 815 30
    3 830 25
    4 835 20
    5 845 15
    6 900 10
    7 920 5
    其中调度时刻为最后一个作业到达系统的时间!
    输出作业号!进入内存的时间!每行输出一个作业信息
    本程序包括:FIFO,运算时间短的作业优先,优先数调度算法,响应比最高者优先调度算法

    作业调度
    #include<stdio.h>
    #include
    <iostream.h>
    #include
    <iomanip.h>
    #include
    <string.h>

    const int MAXJOB=50; //定义最大作业

    //定义数据结构体
    typedef struct node{
    int number;
    int reach_time;
    int reach_hour;
    int reach_minite;
    int need_time;

    int privilege;

    float excellent;

    int start_time;
    int wait_time;

    int visited;
    }job;

    job jobs[MAXJOB];
    int quantity;

    //初始化函数
    void initial()
    {
    int i;

    for(i=0;i<MAXJOB;i++){
    jobs[i].number
    =0;
    jobs[i].reach_time
    =0;
    jobs[i].reach_hour
    =0;
    jobs[i].reach_minite
    =0;

    jobs[i].privilege
    =0;

    jobs[i].excellent
    =0;

    jobs[i].start_time
    =0;
    jobs[i].wait_time
    =0;

    jobs[i].visited
    =0;
    }
    quantity
    =0;
    }

    //重置作业数据函数
    void reset()
    {
    int i;

    for(i=0;i<MAXJOB;i++){
    jobs[i].start_time
    =0;
    jobs[i].wait_time
    =0;

    jobs[i].visited
    =0;
    }

    }

    //读入作业数据函数
    void readData()
    {
    FILE
    *fp;
    char fname[20];
    int i;

    cout
    <<"请输入作业数据文件名:";
    strcpy(fname,
    "8job.txt");
    cin
    >>fname;

    if((fp=fopen(fname,"r"))==NULL){
    cout
    <<"错误,文件打不开,请检查文件名:)"<<endl;
    }
    else{
    while(!feof(fp)){
    fscanf(fp,
    "%d %d %d %d",&jobs[quantity].number,&jobs[quantity].reach_time,&jobs[quantity].need_time,&jo
    bs[quantity].privilege);
    jobs[quantity].reach_hour
    =jobs[quantity].reach_time/100;
    jobs[quantity].reach_minite
    =jobs[quantity].reach_time%100;
    quantity
    ++;
    }
    //输出初始作业数据
    cout<<"输出初始作业数据"<<endl;
    cout
    <<"---------------------------------------------------------------"<<endl;
    cout.setf(
    2);
    cout
    <<setw(10)<<"作业号"<<setw(12)<<"到达时间"<<setw(14)<<"所需时间(分)"<<setw(14)<<"优先级(0>1)"<<endl;

    for(i=0;i<quantity;i++){
    cout
    <<setw(10)<<jobs[i].number<<setw(12)<<jobs[i].reach_time<<setw(14)<<jobs[i].need_time<<setw(14)<<jobs[i].privil
    ege
    <<endl;
    }
    }

    }

    //FIFO算法
    void FIFO()
    {
    int i;
    int current_hour;
    int current_minute;

    int total_time=0;

    //输出作业流
    cout<<endl;
    cout
    <<endl<<"FIFO算法作业流"<<endl;
    cout
    <<"---------------------------------------------------------------"<<endl;
    cout.setf(
    2);
    cout
    <<setw(10)<<"作业号"<<setw(12)<<"到达时间"<<setw(12)<<"开始时间"<<setw(14)<<"周转时间(分)"<<endl;

    current_hour
    =jobs[0].reach_hour;
    current_minute
    =jobs[0].reach_minite;
    for(i=0;i<quantity;i++){
    jobs[i].start_time
    =current_hour*100+current_minute;
    jobs[i].wait_time
    =(current_hour-jobs[i].reach_hour)*60+(current_minute-jobs[i].reach_minite)+jobs[i
    ].need_time;

    cout
    <<setw(10)<<jobs[i].number<<setw(12)<<jobs[i].reach_time<<setw(12)<<jobs[i].start_time<<setw(14)<<jobs[i].wait_
    time
    <<endl;

    current_hour
    =current_hour+(jobs[i].need_time+current_minute)/60;
    current_minute
    =(jobs[i].need_time+current_minute)%60;

    total_time
    +=jobs[i].wait_time;
    }

    cout
    <<endl<<"总周转时间:"<<total_time<<" 平均周转时间:"<<total_time/quantity<<endl;
    }


    //运算时间短的作业优先算法
    void shorter()
    {
    int i,j,p;
    int current_hour;
    int current_minute;
    int current_need_time;

    int total_time=0;

    //输出作业流
    cout<<endl;
    cout
    <<endl<<"时间短作业优先算法作业流(开始调度时刻为最后一个作业到达系统的时间)"<<endl;
    cout
    <<"------------------------------------------------------------------------"<<endl;
    cout.setf(
    2);
    cout
    <<setw(10)<<"作业号"<<setw(12)<<"到达时间"<<setw(14)<<"所需时间(分)"<<setw(12)<<"开始时间"<<setw(14)<<"周转时间(分)"<<endl;

    current_hour
    =jobs[quantity-1].reach_hour;
    current_minute
    =jobs[quantity-1].reach_minite;
    for(i=0;i<quantity;i++){
    current_need_time
    =30000;
    for(j=0;j<quantity;j++){
    if((jobs[j].visited==0)&&(jobs[j].need_time<current_need_time)){
    p
    =j;
    current_need_time
    =jobs[j].need_time;
    }
    }

    jobs[p].start_time
    =current_hour*100+current_minute;
    jobs[p].wait_time
    =(current_hour-jobs[p].reach_hour)*60+(current_minute-jobs[p].reach_minite)+jobs[p
    ].need_time;

    cout
    <<setw(10)<<jobs[p].number<<setw(12)<<jobs[p].reach_time<<setw(14)<<jobs[p].need_time<<setw(12)<<jobs[p].start_
    time
    <<setw(14)<<jobs[p].wait_time<<endl;

    current_hour
    =current_hour+(jobs[p].need_time+current_minute)/60;
    current_minute
    =(jobs[p].need_time+current_minute)%60;

    jobs[p].visited
    =1;

    total_time
    +=jobs[p].wait_time;
    }
    cout
    <<endl<<"总周转时间:"<<total_time<<" 平均周转时间:"<<total_time/quantity<<endl;
    }

    //优先数调度算法
    void privilege()
    {
    int i,j,p;
    int current_hour;
    int current_minute;
    int current_privilege;

    int total_time=0;

    //输出作业流
    cout<<endl;
    cout
    <<endl<<"优先数调度算法作业流(开始调度时刻为最后一个作业到达系统的时间)"<<endl;
    cout
    <<"------------------------------------------------------------------------"<<endl;
    cout.setf(
    2);
    cout
    <<setw(10)<<"作业号"<<setw(12)<<"到达时间"<<setw(14)<<"优先级(0>1)"<<setw(12)<<"开始时间"<<setw(14)<<"周转时间(分)"<<endl;

    current_hour
    =jobs[quantity-1].reach_hour;
    current_minute
    =jobs[quantity-1].reach_minite;
    for(i=0;i<quantity;i++){
    current_privilege
    =30000;
    for(j=0;j<quantity;j++){
    if((jobs[j].visited==0)&&(jobs[j].privilege<current_privilege)){
    p
    =j;
    current_privilege
    =jobs[j].privilege;
    }
    }
    jobs[p].start_time
    =current_hour*100+current_minute;
    jobs[p].wait_time
    =(current_hour-jobs[p].reach_hour)*60+(current_minute-jobs[p].reach_minite)+jobs[p
    ].need_time;

    cout
    <<setw(10)<<jobs[p].number<<setw(12)<<jobs[p].reach_time<<setw(14)<<jobs[p].privilege<<setw(12)<<jobs[p].start_
    time
    <<setw(14)<<jobs[p].wait_time<<endl;

    current_hour
    =current_hour+(jobs[p].need_time+current_minute)/60;
    current_minute
    =(jobs[p].need_time+current_minute)%60;

    jobs[p].visited
    =1;

    total_time
    +=jobs[p].wait_time;
    }
    cout
    <<endl<<"总周转时间:"<<total_time<<" 平均周转时间:"<<total_time/quantity<<endl;
    }

    //响应比最高者优先调度算法
    void excellent()
    {
    int i,j,p;
    int current_hour;
    int current_minute;
    float current_excellent;

    int total_time=0;
    //输出作业流
    cout<<endl;
    cout
    <<endl<<"响应比高者优先调度算法作业流(开始调度时刻为最后一个作业到达系统的时间)"<<endl;
    cout
    <<"------------------------------------------------------------------------"<<endl;
    cout.setf(
    2);
    cout
    <<setw(10)<<"作业号"<<setw(12)<<"到达时间"<<setw(12)<<"开始时间"<<setw(14)<<"周转时间(分)"<<endl;

    current_hour
    =jobs[quantity-1].reach_hour;
    current_minute
    =jobs[quantity-1].reach_minite;
    for(i=0;i<quantity;i++){
    current_excellent
    =-1;
    for(j=0;j<quantity;j++){
    if(jobs[j].visited==0){
    jobs[j].wait_time
    =(current_hour-jobs[j].reach_hour)*60+(current_minute-jobs[j].reach_minite);
    jobs[j].excellent
    =(float)(jobs[j].wait_time/jobs[j].need_time);
    }
    }

    for(j=0;j<quantity;j++){
    if((jobs[j].visited==0)&&(jobs[j].excellent>current_excellent)){
    p
    =j;
    current_excellent
    =jobs[j].excellent;
    }
    }
    jobs[p].start_time
    =current_hour*100+current_minute;
    jobs[p].wait_time
    =(current_hour-jobs[p].reach_hour)*60+(current_minute-jobs[p].reach_minite)+jobs[p
    ].need_time;

    cout
    <<setw(10)<<jobs[p].number<<setw(12)<<jobs[p].reach_time<<setw(12)<<jobs[p].start_time<<setw(14)<<jobs[p].wait_
    time
    <<endl;

    current_hour
    =current_hour+(jobs[p].need_time+current_minute)/60;
    current_minute
    =(jobs[p].need_time+current_minute)%60;

    jobs[p].visited
    =1;

    total_time
    +=jobs[p].wait_time;
    }
    cout
    <<endl<<"总周转时间:"<<total_time<<" 平均周转时间:"<<total_time/quantity<<endl;

    }

    //显示版权信息函数
    void version()
    {
    cout
    <<endl<<endl;

    cout
    <<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
    cout
    <<" ┃     作业调度模拟系统        ┃"<<endl;
    cout
    <<" ┠───────────────────────┨"<<endl;
    cout
    <<" ┃   (c)All Right Reserved Neo       ┃"<<endl;
    cout
    <<" ┃      sony006@163.com          ┃"<<endl;
    cout
    <<" ┃     version 2004 build 1122      ┃"<<endl;
    cout
    <<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;

    cout
    <<endl<<endl;
    }

    void main()
    {
    version();
    initial();

    readData();

    FIFO();

    shorter();
    reset();

    privilege();
    reset();

    excellent();


    }
  • 相关阅读:
    模仿企业在宣传中的动画效果页面
    模仿头条导航的左右滚动效果
    Ubuntu 1210怎么获得root权限登录
    Linux嵌入式 -- 内核简介(x86)
    linux ioctl()函数
    BUTTON标签和INPUT标签的区别【转】
    如何删除列表中的空格
    python第一模块数据类型
    python第一模块基础语法
    最短路 dijkstra+优先队列+邻接表
  • 原文地址:https://www.cnblogs.com/FCWORLD/p/1896363.html
Copyright © 2011-2022 走看看