毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

作业调度算法实验 第2页

更新时间:2009-7-6:  来源:毕业论文
作业调度算法源代码
#include "stdio.h"
#include <stdlib.h>
#include <conio.h>
#define getpch(type) (type*)malloc(sizeof(type))
//#define NULL 0

struct worktime{
    float Tb;             //作业运行时刻
    float Tc;             //作业完成时刻
    float Ti;             //周转时间
    float Wi;            //带权周转时间
};

struct jcb { /*定义作业控制块JCB */
    char name[10];        //作业名
    float subtime;        //作业提交时间
    float runtime;        //作业所需的运行时间
    char resource;      //所需资源
    float Rp;              //后备作业响应比
    char state;            //作业状态
    struct worktime wt;
    struct jcb* link;     //链指针
}
 *jcb_ready=NULL,*j;

typedef struct jcb JCB;
float T=0;

void sort() /* 建立对作业进行提交时间排列函数*/
{
    JCB *first, *second;
    int insert=0;
    if((jcb_ready==NULL)||((j->subtime)<(jcb_ready->subtime))) /*作业提交时间最短的,插入队首*/
    {
        j->link=jcb_ready;
        jcb_ready=j;
        T=j->subtime;
        j->Rp=1;
    }
www.751com.cn
            else /* 插入作业优先数最低,则插入到队尾*/
            {
                first=first->link;
                second=second->link;
            }
        }
        if (insert==0) first->link=j;
    }
}

void SJFget()/* 获取队列中的最短作业 */
{
    JCB *front,*mintime,*rear;
    int ipmove=0;
    mintime=jcb_ready;
    rear=mintime->link;
    while(rear!=NULL)

        if ((rear!=NULL)&&(T>=rear->subtime)&&(mintime->runtime)>(rear->runtime))
        {
            front=mintime;
            mintime=rear;
            rear=rear->link;
            ipmove=1;
        }
        else
            rear=rear->link;
    if (ipmove==1){
        front->link=mintime->link;
        mintime->link=jcb_ready;
    }
    jcb_ready=mintime;
}

void HRNget() /* 获取队列中的最高响应作业 */
{
    JCB *front,*mintime,*rear;
    int ipmove=0;
    mintime=jcb_ready;
    rear=mintime->link;
    while(rear!=NULL)
        if ((rear!=NULL)&&(T>=rear->subtime)&&(mintime->Rp)<(rear->Rp))
        {
            front=mintime;
            mintime=rear;
            rear=rear->link;
            ipmove=1;
        }
        else
            rear=rear->link;
    if (ipmove==1){
        front->link=mintime->link;
        mintime->link=jcb_ready;
    }
    jcb_ready=mintime;
}

void input() /* 建立作业控制块函数*/
{
    int i,num;
    printf("\n 请输入作业数:?");
    scanf("%d",&num);
    for(i=0;i<num;i++)
    {
        printf("\n 作业号No.%d:\n",i);
        j=getpch(JCB);
        printf("\n 输入作业名:");
        scanf("%s",j->name);
        printf("\n 输入作业提交时刻:");
        scanf("%f",&j->subtime);
        printf("\n 输入作业运行时间:");
        scanf("%f",&j->runtime);
        printf("\n");
        j->state='w';
        j->link=NULL;
        sort(); /* 调用sort函数*/
    }
}

int space()
{
    int l=0; JCB* jr=jcb_ready;
    while(jr!=NULL)
    {
        l++;
        jr=jr->link;
    }
    return(l);
}

void disp(JCB* jr,int select) /*建立作业显示函数,用于显示当前作业*/
{
    if (select==3) printf("\n 作业   服务时间   响应比   运行时刻   完成时刻   周转时间   带权周转时间 \n");
    else printf("\n 作业   服务时间   运行时刻   完成时刻   周转时间   带权周转时间 \n");
    printf(" %s\t",jr->name);
    printf(" %.2f\t ",jr->runtime);
    if (select==3) printf(" |%.2f    ",jr->Rp);
    if (j==jr){
        printf(" %.2f\t        ",jr->wt.Tb);
        printf(" %.2f         ",jr->wt.Tc);
        printf(" %.2f \t      ",jr->wt.Ti);
        printf(" %.2f         ",jr->wt.Wi);
    }
    printf("\n");
}

void check(int select) /* 建立作业查看函数 */
{
    JCB* jr;
    printf("\n **** 当前正在运行的作业是:%s",j->name); /*显示当前运行作业*/
    disp(j,select);
    jr=jcb_ready;
    printf("\n ****当前就绪队列状态为:\n"); /*显示就绪队列状态*/
    while(jr!=NULL)
    {
        jr->Rp=(T-jr->subtime)/jr->runtime;
        disp(jr,select);
        jr=jr->link;
    }
    printf("\n 作业 [%s] 已完成.\n",j->name);
    free(j);
}
   void running(JCB* jr) /* 建立作业就绪函数(作业运行时间到,置就绪状态*/
{
    if (T>=jr->subtime) jr->wt.Tb=T; else jr->wt.Tb=jr->subtime;
    jr->wt.Tc=jr->wt.Tb+jr->runtime;
    jr->wt.Ti=jr->wt.Tc-jr->subtime;
    jr->wt.Wi=jr->wt.Ti/jr->runtime;
    T=jr->wt.Tc;
}

int main() /*主函数*/
{
    int select=0,len,h=0;
    float sumTi=0,sumWi=0;
    input();
    len=space();
    printf("\n\t1.FCFS 2.SJF 3.HRN\n\n请选择作业调度算法:?");
    scanf("%d",&select);
    while((len!=0)&&(jcb_ready!=NULL))
    {
        h++;
        printf("\n 执行第%d个作业 \n",h);
        j=jcb_ready;
        jcb_ready=j->link;
        j->link=NULL;
        j->state='R';
        running(j);
        sumTi+=j->wt.Ti;
        sumWi+=j->wt.Wi;
        check(select);
        if (select==2&&h<len-1) SJFget();
        if (select==3&&h<len-1) HRNget();
        printf("\n 按任一键继续......\n");
        getchar();
        getchar();
    }
    printf("\n\n 作业已经完成.\n");
    printf("\t 此组作业的平均周转时间:%.2f\n",sumTi/h);
    printf("\t 此组作业的带权平均周转时间:%.2f\n",sumWi/h);
    getchar();
}

上一页  [1] [2] 

作业调度算法实验 第2页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。