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();


    }
  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/FCWORLD/p/1896363.html
Copyright © 2011-2022 走看看