实验二作业调度模拟程序。
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 插入等待...