实验2作业调度

发布 2022-07-02 02:30:28 阅读 7319

实验二作业调度模拟程序。

1. 实验目的。

1)加深对作业调度算法的理解;

2)进行程序设计的训练。

2.实验要求。

用高级语言编写一个或多个作业调度的模拟程序。

单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。

作业调度算法:

1) 采用先来先服务(fcfs)调度算法,即按作业到达的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。

2) 短作业优先 (sjf) 调度算法,优先调度要求运行时间最短的作业。

3) 响应比高者优先(hrrn)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高者优先调度。rp (响应比)= 作业周转时间 / 作业运行时间。

每个作业由一个作业控制块jcb表示,jcb可以包含以下信息:作业名、提交(到达)时间、所需的运行时间、所需的资源、作业状态、链指针等等。

作业的状态可以是等待w(wait)、运行r(run)和完成f(finish)三种之一。每个作业的最初状态都是等待w。

一、 模拟数据的生成。

1. 允许用户指定作业的个数(2-24),默认值为5。

2. 允许用户选择输入每个作业的到达时间和所需运行时间。

3. (从文件中读入以上数据。

4. (也允许用户选择通过伪随机数指定每个作业的到达时间(0-30)和所需运行时间(1-8)。

二、 模拟程序的功能。

1. 按照模拟数据的到达时间和所需运行时间,执行fcfs, sjf和hrrn调度算法,程序计算各作业的开始执行时间,各作业的完成时间,周转时间和带权周转时间。

2. 动态演示每调度一次,更新现在系统时刻,处于运行状态和等待各作业的相应信息(作业名、到达时间、所需的运行时间等)对于hrrn算法,能在每次调度时显示各作业的响应比r情况。

三、 模拟数据结果分析。

对同一个模拟数据各算法的平均周转时间,周转系数比较。

四、 其他要求。

1. 完成报告书,内容完整,规格规范。

2. 实验须检查,回答实验相关问题。

根据指定的实验课题,完成设计、编码和调试工作,完成实验报告。

可以采用tc,也可以选用windows下的利用各种控件较为方便的vb,vc等可视化环境。也可以自主选择其他实验环境。

先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被执行。流程图如图所示。

最短作业优先算法:是以进入系统的作业所要求的服务时间为标准,总是优先选取执行时间最短的作业。流程图如图3-2所示。

响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。流程图如图3-3所示。

#include <>

#include <>

#include <>

#define getpch(type) (type*)malloc(sizeof(type))

#define null 0

int n;

float t1=0,t2=0;

int times=0;

struct jcb //作业控制块。

char name[10作业名。

int reachtime作业到达时间。

int starttime作业开始时间。

int needtime作业需要运行的时间。

float super作业的响应比。

int finishtime作业完成时间。

float cycletime作业周转时间。

float cltime作业带权周转时间。

char state作业状态。

struct jcb *next结构体指针。

*ready=null,*p,*q;

typedef struct jcb jcb;

void inital建立作业控制块队列,先将其排成先来先服务的模式队列。

int i;

printf("输入作业数:")

scanf("%d",&n);

for(i=0;i

void disp(jcb* q,int m) /显示作业运行后的周转时间及带权周转时间等。

if(m==3显示高响应比算法调度作业后的运**况。

else显示先来先服务,最短作业优先算法调度后作业的运**况。

void running(jcb *p,int m运行作业。

if(p==ready先将要运行的作业从队列中分离出来。

ready=p->next;

p->next=null;

elseq=ready;

while(q->next!=p) q=q->next;

q->next=p->next;

p->starttime=times; /计算作业运行后的完成时间,周转时间等等。

p->state='r';

p->finishtime=p->starttime+p->needtime;

p->cycletime=(float)(p->finishtime-p->reachtime);

p->cltime=(float)(p->cycletime/p->needtime);

t1+=p->cycletime;

t2+=p->cltime;

disp(p,m调用disp()函数,显示作业运**况。

times+=p->needtime;

p->state='f';

printf("%s has been finished!press any key to continue...n",p->name);

free(p释放运行后的作业。

getch();

void super计算队列中作业的高响应比。

jcb *padv;

padv=ready;

dowhile(padv!=null);

void final最后打印作业的平均周转时间,平均带权周转时间。

float s,t;

t=t1/n;

s=t2/n;

getch();

printf("作业已经全部完成!")

实验二作业调度实验

一。实验目的要求 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。二。实验要求 1 编写并调试一个单道处理系统的作业等待模拟程序。作业等待算法 分别采用先来先服务 fcfs 最短作业优先 sjf 响应比高者优先 hrn 的调度算法。对每种调度算法都要求打印每个作业开始运...

实验二作业调度实验

西北农林科技大学信息工程学院实习报告。课程操作系统学院信息工程专业年级软件151 学号 2015012893 姓名张鑫 周次第八周交报告时间 2017.5.5成绩 一。目的要求 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。二 实验内容 1 编写并调试一个单道处理系统...

操作系统作业调度实验

实验一进程。2011210549 崔晶。1.本实验实现的功能有 创建一个进程,撤销一个进程,挂起一个进程。2.本实验初始化的进程块状态如图所示 自定义 p表示正在运行,r表示就绪,w表示等待。3.程序如下 include include 进程块的数据结构。struct pcb struct 插入等待...