最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

实验六 进程调度算法模拟实现

来源:动视网 责编:小OO 时间:2025-10-06 09:57:10
文档

实验六 进程调度算法模拟实现

实验六进程调度算法模拟1、实验类型本实验为设计性实验。2、实验目的与任务1)通过对进程调度算法的设计,加深对进程调度原理的理解,进一步掌握各种调度算法的特征;2)针对你所选择的算法的模拟情况进行对算法进行评价(通过比较计算平均周转时间和平均带权周转时间)。3、预习要求1)理解各调度算法原理;2)理解平均周转时间和平均带权周转时间4、实验基本原理(1)设计程序模拟先来先服务(FCFS)进程调度、短进程优先调度(SJF)、高响应比优先调度(HRN)、最高优先权优先调度、时间片轮转调度等算法,要求比
推荐度:
导读实验六进程调度算法模拟1、实验类型本实验为设计性实验。2、实验目的与任务1)通过对进程调度算法的设计,加深对进程调度原理的理解,进一步掌握各种调度算法的特征;2)针对你所选择的算法的模拟情况进行对算法进行评价(通过比较计算平均周转时间和平均带权周转时间)。3、预习要求1)理解各调度算法原理;2)理解平均周转时间和平均带权周转时间4、实验基本原理(1)设计程序模拟先来先服务(FCFS)进程调度、短进程优先调度(SJF)、高响应比优先调度(HRN)、最高优先权优先调度、时间片轮转调度等算法,要求比
实验六 进程调度算法模拟

1、实验类型

    本实验为设计性实验。

2、实验目的与任务

1) 通过对进程调度算法的设计,加深对进程调度原理的理解,进一步掌握各种调度算法的特征;

2) 针对你所选择的算法的模拟情况进行对算法进行评价(通过比较计算平均周转时间和平均带权周转时间)。

3、预习要求

1)理解各调度算法原理;

2)理解平均周转时间和平均带权周转时间

4、实验基本原理

(1) 设计程序模拟先来先服务(FCFS)进程调度、短进程优先调度(SJF)、高响应比优先调度(HRN)、最高优先权优先调度、时间片轮转调度等算法,要求比较所选算法的平均周转时间和平均带权周转时间,可选用C 、C++或Java 等编程语言中任一种语言。

(2)自设模拟的情景,但要求至少包括四个进程调度。注意,问题情境最好允许用户设定。即当程序启动时,应允许用户可以选择不同的调度算法;然后用户从控制台输入各个进程的信息,进程信息输入完毕后,就开始了进程调度。

参考代码如下:

(3) 认真完成实验报告,同时要求说明模拟的情境、数据结构的使用,程序流程图或步骤,并给出实验结果分析和实验小结;

5、实验仪器与设备(或工具软件)

实验设备:计算机一台;

6、实验内容  

[参考代码如下] 

#include"stdio.h"

#include"stdlib.h"

void dayin();

typedef struct PCB      //定义进程控制块

{

    char num[2];       //进程号

    char state;        //运行状态

    int  tijiaotime;   //提交进程时间

    int  starttime;    //进程开始时间

    int  finishtime;   //结束时间

    int  needtime;           //运行需要时间

    float  roundtime;        //周转时间

    float  weightroundtime;  //带权周转时间

    struct PCB *next;        //指向下个进程

}pcb;

int time=10000,n;       //计时器 (假设当前时间)

float sumroundtime=0,sumweightroundtime=0,avgroundtime,avgweightroundtime; //定义全局平均变量。

pcb *head=NULL,*p,*q; // 进程全局指针。

void run_fcfs(pcb *p1) //进程执行过程

{

time = p1->tijiaotime > time? p1->tijiaotime:time; // 获得真正的当前时间。

p1->starttime=time;

//printf("\\n现在时间是%d,开始运行进程%s\\n",time,p1->num);

time+=p1->needtime;

p1->state='F';

p1->finishtime=time;

p1->roundtime=p1->finishtime-p1->tijiaotime;

p1->weightroundtime=(float)(p1->finishtime-p1->tijiaotime)/(float)p1->needtime;

sumroundtime+=p1->roundtime;

sumweightroundtime+=p1->weightroundtime;

}

void run_spf(pcb *p1,int t) //模拟进程执行过程

{

    

p1->starttime=t;

p1->state='W';

p1->finishtime=t+p1->needtime;

p1->roundtime=p1->finishtime-p1->tijiaotime;

p1->weightroundtime=(p1->finishtime-p1->tijiaotime)/(float)p1->needtime;

sumroundtime+=p1->roundtime;

sumweightroundtime+=p1->weightroundtime;

}

void fcfs() //从队首分别取出进程(找到满足条件的进程,并执行。)

{

    int i,j,t;

for(j=0;j    {

        p=head;

        t=10000;

     for(i=0;i        {

         if(p->tijiaotimestate=='W')

            {

             t=p->tijiaotime;

                q=p;    //标记当前未完成的进程

            }

         p=p->next;

        }

        run_fcfs(q);

    }

    avgroundtime=sumroundtime/n;

    avgweightroundtime=sumweightroundtime/n;

}

/////////////////////////////////////////////////////////////////

void spf() //从队首分别取出进程(找到满足条件的最短进程,并执行。)

{

    int i,j,t,k,futmin,flag;

    t=10000;///

    p=head;

for(i=0;i    {

     if(p->tijiaotimestate=='F')

t=p->tijiaotime;//记录范围内。最早完成时间。

          p=p->next;

    } ///   

    k=0;

while(k    {

        flag=0;

        futmin=10000;//最小的一个服务时间。(在范围内总是可以找到最小的一个服务时间。)

        p=head;

     for(i=0;i        {

         if(p->tijiaotime<=t &&p->state=='F'&& p->needtime<=futmin)

            {

             futmin=p->needtime;// 每一次都要修改当前最早时间。

                q=p;    //标记当前未完成的进程

                flag=1;

            } 

            

         p=p->next;

        }

        if(flag==1)

        {

            k++;

            run_spf(q,t);

         t=t+q->needtime; //t为当前时间。用于筛选进程 下一个进程的当前时间。

        }

        else

        {

            t=10000;///

            p=head;

         for(i=0;i            {            

             if(p->tijiaotimestate=='F')

                {

                 t=p->tijiaotime;//记录范围内。最早完成时间。

                }

             p=p->next;

            }

        }

    }

    avgroundtime=sumroundtime/n;

    avgweightroundtime=sumweightroundtime/n;

///////////////////////////////////////////////////////

void getInfo()          //创建进程

{

    int num;

    printf("\\n请输入进程个数:");

    scanf("%d",&n);

    

    printf("\\n依次输入%d个进程:\\n",n);

    dayin();

    printf("进程名 到达时间 运行时间\\n");

    

for(num=0;num    {

        p=(pcb *)malloc(sizeof(pcb));

        if(head==NULL) {head=p;q=p;}

        dayin();

     scanf("%s\%d\%d",&p->num,&p->tijiaotime,&p->needtime);

     if(p->tijiaotime < time) time=p->tijiaotime; //记录最早时间。

     q->next=p;

     p->starttime=0;

     p->finishtime=0;

     p->roundtime=0;

     p->weightroundtime=0;

     p->next=NULL;

     p->state='W';

        q=p;

    }

}

void display()

{

    printf("\\n\\n进程名\\");

    p=head;

    while(p!=NULL)

    {

     printf("%s\",p->num);

        

     p=p->next;

    }

    printf("平均");

    printf("\\n到达时间\");

    p=head;

    while(p!=NULL)

    {

     printf("%d\",p->tijiaotime);

        

     p=p->next;

    }

    printf("\\n运行时间\");

    p=head;

    while(p!=NULL)

    {

     printf("%d\",p->needtime);

        

     p=p->next;

    }

    printf("\\n开始运行时间\");

    p=head;

    while(p!=NULL)

    {

     printf("%d\",p->starttime);

        

     p=p->next;

    }

    p=head;

    printf("\\n完成时间\");

    while(p!=NULL)

    {

     printf("%d\",p->finishtime);

        

     p=p->next;

    }

    p=head;

    printf("\\n周转时间\");

    while(p!=NULL)

    {

     printf("%0.1f\",p->roundtime);

        

     p=p->next;

    }

    printf("%0.1f\\n",avgroundtime);

    p=head;

    printf("带权周转时间\");

    while(p!=NULL)

    {

    // printf("%0.1f\",p->roundtime);

     printf("%0.1f\",p->weightroundtime);

     p=p->next;

    }

    printf("%0.1f\\n",avgweightroundtime);

    dayin();

    printf("平均周转时间为%0.1f\\n",avgroundtime);

    printf("平均带权周转时间为%0.1f\\n",avgweightroundtime);

    dayin();

}

void dayin()

{

    printf("---------------------------------------------------------------------------\\n");

}

void main()    //mian函数

{

    dayin();

    printf("\\先来先服务优先调度算法和短进程优先调度模拟实现\\n\\n");

    dayin();

    getInfo();

    printf(" \\先来先服务进程优先调度模拟\\n");

    fcfs();

    dayin();

    //将总时间置为零

sumroundtime=0,sumweightroundtime=0;

    display();

    printf(" \\短进程优先调度模拟\\n");

    spf();

    display();

}

实验要求:

1、运行程序并分析结果。

2、理解实验源程序,增加其他调度算法实现,改进实验源程序。

文档

实验六 进程调度算法模拟实现

实验六进程调度算法模拟1、实验类型本实验为设计性实验。2、实验目的与任务1)通过对进程调度算法的设计,加深对进程调度原理的理解,进一步掌握各种调度算法的特征;2)针对你所选择的算法的模拟情况进行对算法进行评价(通过比较计算平均周转时间和平均带权周转时间)。3、预习要求1)理解各调度算法原理;2)理解平均周转时间和平均带权周转时间4、实验基本原理(1)设计程序模拟先来先服务(FCFS)进程调度、短进程优先调度(SJF)、高响应比优先调度(HRN)、最高优先权优先调度、时间片轮转调度等算法,要求比
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top