视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
实验5操作系统作业调度模拟实验
2025-10-05 18:32:21 责编:小OO
文档
作业调度试验

一、实验目的和内容

1、实验目的

用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。

2、实验内容

编写并调试一个单道处理系统的作业等待模拟程序。 

作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 

对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。

二、实验方案

1、先来先服务算法

原理:每次调度是从就绪队列中,选择一个最先进入就绪队列的进程,把处理器分配给该进程,使之得到执行。该进程一旦占有了处理器,它就一直运行下去,直到该进程完成或因发生事件而阻塞,才退出处理器。

特点:利于长进程,而不利于短进程。

2、短作业优先服务算法

原理:它是从就绪队列中选择一个估计运行时间最短的进程,将处理器分配给该进程,使之占有处理器并执行,直到该进程完成或因发生事件而阻塞,然后退出处理器,再重新调度。

3、最高响应比优先算法

原理:它是从就绪队列中选择一个响应比最高的进程,让其获得处理器执行,直到该进程完成或因等待事件而退出处理器为止。

特点:既照顾了短进程,又考虑了进程到达的先后次序,也不会使长进程长期得不到服务,因此是一个比较全面考虑的算法,但每次进行调度时,都需要对各个进程计算响应比。所以系统开销很大,比较复杂。

4、源代码

#include

#include

#include

typedef struct JCB   //定义作业控制块JCB结构体

{

    int ID;            //作业标识数ID

    float requesttime;   //作业运行所需要时间requesttime

    int runtime;        //作业实际运行时间runtime

    int arrivetime;      //作业到达时间arrivetime

    int starttime;       //作业开始时间starttime

    int finishtime;       //作业完成时间finishtime

    float zhuantime;   //作业周转时间zhuantime

}JCB;

#define N 100        //宏定义

JCB jcb[N];          //定义作业块数组

int jcbnum;          //定义作业块个数

void init();         //初始化函数

void FCFS();         //先来先服务算法

void SJF();          //短作业优先算法

void HRN();          //高响应比算法

void init()          //初始化作业调度块

    int j=0;

    int req;

while(j<=0||j>2000) //实现作业的输入

    {

     cout<<"请输入作业个数:(1--2000)";

     cin>>j;    

    }

    jcbnum=j;              

for(j=0;j    {

     cout<<"请输入第"<     cin>>req;

        jcb[j].ID=j+1;         

        jcb[j].requesttime=req;

        jcb[j].arrivetime=j;   

        jcb[j].starttime=0;    

        jcb[j].finishtime=0;   

        jcb[j].zhuantime=0; 

    }

}

void FCFS() //先到先服务算法的实现

{

    int i;float a,b;b=a=0;

cout<<"你选择用先到先服务算法进行作业调度,结果如下:"< cout<<"作业 到达时间 运行时间 开始时间 完成时间 周转时间 带权周转时间"< for(i=0;i    {   

        int runtime=0;  

        jcb[i].finishtime=jcb[i].starttime+jcb[i].requesttime; 

        jcb[i].zhuantime=jcb[i].finishtime-jcb[i].arrivetime;

     cout<<" "< cout<        jcb[i+1].starttime=jcb[i].finishtime; 

        a+=jcb[i].zhuantime;

        b+=jcb[i].zhuantime/jcb[i].requesttime;

    }

cout<<"平均周转时间:"< cout<<"平均带权周转时间:"<}

void SJF()//短作业优先算法

{

    int i,j,r,c,fin=0;  float a,b;a=b=0;c=jcbnum;

cout<<"你选择用短作业优先算法进行作业调度,结果如下"< cout<<"作业 到达时间 运行时间 开始时间 完成时间 周转时间 带权周转时间"< while(jcbnum>0)

    {

        r=0;

     for(i=0;i         if(jcb[r].requesttime>jcb[i].requesttime)

                r=i;

        jcb[r].starttime=fin;

        jcb[r].finishtime=fin+jcb[r].requesttime;

        jcb[r].zhuantime=jcb[r].finishtime-jcb[r].arrivetime;

        a+=jcb[r].zhuantime;

        b+=jcb[r].zhuantime/jcb[r].requesttime;

     cout<<" "<     cout<        fin+=jcb[r].requesttime;

     for(j=r;j        {

            jcb[j].ID=jcb[j+1].ID;

            jcb[j].requesttime=jcb[j+1].requesttime;

            jcb[j].arrivetime=jcb[j+1].arrivetime;  

        

    }

        

    jcbnum--;    

}cout<<"平均周转时间:"< cout<<"平均带权周转时间:"< cout<}

void HRN()//高响应比算法

{

    int i,j,r,c;

    float a,b;

    a=b=0;

    c=jcbnum;

    int waittime=0;     //进程等待处理机所用时间

cout<<"你选择高响应比优先算法进行作业调度,结果如下:"< cout<<"作业 到达时间 运行时间 开始时间 完成时间 周转时间 带权周转时间"< while(jcbnum>0)

    {

        r=0;

     for(i=0;i         if((waittime+0.0)/jcb[r].requesttime>((waittime+0.0)/jcb[i].requesttime))

                r=i;

        jcb[r].starttime=waittime;

        jcb[r].finishtime=waittime+jcb[r].requesttime;

        jcb[r].zhuantime=jcb[r].finishtime-jcb[r].arrivetime;

        a+=jcb[r].zhuantime;

        b+=jcb[r].zhuantime/jcb[r].requesttime;

     cout<<" "<     cout<        waittime+=jcb[r].requesttime;

     for(j=r;j        {

            jcb[j].ID=jcb[j+1].ID;

            jcb[j].requesttime=jcb[j+1].requesttime;

            jcb[j].arrivetime=jcb[j+1].arrivetime;

        }

        jcbnum--;    

    }

cout<}

//主函数

void main()

{   bool flog=1;

    int i=0;

    char ch;

    cout<<"********************************"< cout<<" | 1:先来先服务 |"< cout<<" | 2:短作业优先 |"< cout<<" | 3:最高响应比优先 |"< cout<<"********************************"<    while(flog){                    

        init();    

    a1: cout<<"请选择你要做的选项(1--3):";

     cin>>i;    

     if(i>=0&&i<=3){

        switch(i)             

        {

            case 1:FCFS();break;   //选择"1"的时候调用的是FCFS算法

            case 2:SJF();break;    //选择"2"的时候调用的是SJF算法

            case 3:HRN();break;    //选择"3"的时候调用的是HRN算法

        }

     cout<     else{ cout<<"输入错误,请重新输入!"<     cout<<"是否想要继续(N/Y)?:"; //是否继续执行

     cin>>ch;

        if(ch=='y'||ch=='Y') flog=1; 

        else flog=0;

    }

}    

三、实验数据、结果分析

运行结果

四、总结下载本文

显示全文
专题