资源描述
摘 要
作业调度是对成批进入系统顾客作业,依照作业控制块信息,按一定方略选用若干个作业使它们可以去获得解决器运营一项工作。而对每个顾客来说总但愿自己作业周转时间是最小,短作业优先(SJF)便是其中一种调度办法。
本设计是为了加深对作业概念理解,掌握短作业优先(SJF)算法,进一步理解批解决系统如何组织作业、管理作业和调度作业,理解作业控制块作用,以及作业控制块内容和组织方式。
为了将系统中作业组织起来,需要为每个进入系统作业建立档案以记录和作业有关信息,例如作业名、作业所需资源、作业执行时间、作业进入系统时间、作业信息在存储器中位置、指向下一种作业控制块指针等信息。这个记录作业有关信息数据块称为作业控制块(JCB),并将系统中档待作业调度作业控制块组织成一种队列,这个队列称为后备队列。一种作业所有信息进入系统后,就为其建立作业控制块,并挂入后备队列。当进行作业调度时,从后备队列中查找选取作业。
在从后备队列中查找选取作业是,先依照作业控制块中信息,选中一种短作业,也就是执行时间最短作业,将它们调入内存运营。
核心词 :作业; 调度; 短作业优先; SJF; JCB
Abstract
Batch job scheduling problem is to enter the system according to the user,the job control block of information,according to certain strategy selection several assignments that they can go to obtain a processor runs. For each user is always hope their job cycle time is the smallest,short j (SJF) which is the preferred method of a kind of scheduling.
This design is to deepen the understanding of the concept of job assignments,short job first (SJF) algorithm is,in-depth understanding of how the system of batch management and organization,scheduling,understand the job assignments,as well as the job control blocks of content and organization.
In order to organize the assignment system for everyone to enter the system to establish archives of job assignments and related information recorded,for example,job assignments,resources,work into execution time of time,information system in memory of job assignments,pointing to a position job control block etc. The record of the information data block job assignments job control blocks (called),and the system JCB waiting in the job assignments scheduling job control block into a queue,the queue as backup queue. A full information into a system for its establishment,operation job control block,and hung the backup queue. When scheduling problem,from the backlog queue for choice.
From the backlog queue for job first choice,according to the information and job control block a short assignment,and select the shortest time is executed,they would run into memory.
Keywords : Job; Scheduling; Short job first; SJF; JCB
目 录
第一章 课题概述………………………………………………….………………………..1
1.1 设计背景..……...……………………………………………………………………..1
1.2 目及规定……...……………………………………………………………………..1
1.3 基本理论根据……………………………………………..………………………...…1
第二章 设计简介及设计方案阐述 ……………………………………………………….. 2
2.1 设计简介 ………………………………………………..………………………….…2
2.2 设计内容………..………………………………………..………………………….…2
第三章 详细设计…………………………………………………………..……………….. 3
3.1 设计流程图 ……………………………………………..………………………….…3
3.2 重要程序代码 ………………………………………………..…………………….…4
第四章 设计成果及分析…………………………………………………..……………….. 7
4.1 运营成果截图 ………………………………….………………………………..…... 7
4.2 运营成果分析 …………………………………………..…………………………… 8
总 结 …….……………………………………………………..…………………………... 9
致 谢 …….……………………………………………………..…………………………..10
参照文献 …….………………..………………………………..…………………………..11
附录 程序代码 ………...………………………………..……………………………..…12
第一章 课题概述
1.1设计背景
在多道程序环境下,主存中有着各种进程,其数目往往多于解决机数目。这就规定系统能按某种算法,动态地把解决机分派给就绪队列中一种进程,使之执行。分派解决机任务是由解决机调度程序完毕。由于解决机是最重要计算机资源,提高解决机运用率及改进系统性能(吞吐量、响应时间),在很大限度上取决于解决机调度性能好坏,因而,解决机调度便成为操作系统设计中心问题之一。
在多道程序系统中,一种作业被提交后必要通过解决机调度后,方能获得解决机执行。对于批量型作业而言,普通需要经历作业调度和进程调度两个过程后方能获得解决机。本次设计就是模仿作业调度和短作业优先设计。
1.2目及规定
1.2.1目
加深对作业概念理解;
进一步理解批解决系统如何组织作业、管理作业和调度作业;
1.2.2设计规定
1.加深对作业概念地理解。
2.掌握短作业优先调度算法。
3.进一步理解批解决系统如何组织作业、管理作业和调度作业。
4.理解作业控制块作用,以及作业控制块内容和组织方式。
1.3基本理论根据
依照作业控制块中信息,审查系统能否满足顾客作业资源需求,以及按照一定算法,从外存后备队列中选用某些作业调入内存,并为它们创立进程、分派必要资源。
短作业优先调度算法,从后备队列中选取一种或若干个预计运营时间最短作业,将它们调入内存运营。
第二章 设计简介及设计方案阐述
2.1 设计简介
在多道程序环境下,将系统中作业组织起来,为每个进入系统作业建立档案以记录和作业有关信息,按规定输入作业名、到达时间和服务时间,并为其建立作业控制块(JCB)挂入后备队列。进行作业调度时,在其后计算出各个作业开始执行时间、完毕时间、周转时间和平均周转时间,运用短作业优先算法进行作业调度,并按照由小到大顺序显示出来。
2.2 设计内容
编写程序完毕批解决系统中作业调度,规定采用短作业优先作业调度算法。实验详细涉及:一方面拟定作业控制块内容,作业控制块构成方式;然后完毕作业调度;最后编写主函数对所作工作进程测试。
2.2.1 创立JCB作业控制块
创立作业控制块JCB,定义为构造体,为进入系统作业建立档案,其中定义了作业名,作业到达时间,作业服务时间,作业开始执行时间,作业完毕时间,作业周转时间,作业平均周转时间。
2.2.2 控制显示信息
输出文字提示顾客操作环节;设定输入数据格式及数量;运营完程序后显示输出实验成果。
2.2.3 实现短作业优先选取
一方面按各个作业完毕时间由小到大排序。再用输入到达时间与服务时间按一定算法算出各个作业开始执行时间、完毕时间、周转时间和作业平均周转时间。
第三章 详细设计
开始
定义最多能管理作业数目,建立作业控制块定义作业各个数据
输出提示,让顾客输入需要解决作业数目,并输入各作业作业名、作业到达时间和作业服务时间
计算各个作业作业开始执行时间,作业完毕时间,作业周转时间,作业平均周转时间
进入作业比较
后备队列与否为空
作业i完毕时间<作业i+1完毕时间
按完毕时间由小到大输出成果,并由小到大输出作业名,作业到达时间,作业服务时间,作业开始执行时间,作业完毕时间,作业周转时间,作业平均周转时间
结束
3.1 设计流程图
是
否
否
是
图3-1
3.2 重要程序代码
3.2.1 采用数据构造定义作业控制块
struct jcb
{
char name[10]; //作业名
float arrivetime;//作业到达时间
float servicetime;//作业服务时间
float starttime; //作业开始执行时间
float finishtime;//作业完毕时间
float zztime; //作业周转时间
float avezztime; //作业平均周转时间
};
3.2.2 jcb调度算法
void jcbf(jcb *p,int N)
{
float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,
avezztime=0;
sort(p,N);//以到达时间从小到大排序
for(int m=0;m<N-1;m++)
{
if(m==0)
p[m].finishtime=p[m].arrivetime+p[m].servicetime;
else
p[m].finishtime=p[m-1].finishtime+p[m].servicetime;
int i=0;
for(int n=m+1;n<=N-1;n++)
{
if(p[n].arrivetime<=p[m].finishtime) //查找下标m+1后来作业中:服务时间<=p[m].finishtime作业个数
i++;
}
float min=p[m+1].servicetime;
int next=m+1;//m+1=n
for(int k=m+1;k<m+i;k++) //循环查找服务时间最小作业
{
if(p[k+1].servicetime<min)
{
min=p[k+1].servicetime;
next=k+1;
}
}
jcb temp;
temp=p[m+1];
p[m+1]=p[next];
p[next]=temp;
}
3.2.3 主函数
int main()
{
while(1){
system("CLS");
int N;
printf("\t\t\t------短作业优先调度算法------\n");
printf("请输入作业数目:");
scanf("%d",&N);
char ch;
if(N>MAX){
printf("\t!!输入作业数目太大,请输入不不不大于%d整数\n",MAX);
printf("按Q或者q退出程序,按其她任意键继续测试...");
ch = getch();
if(ch=='Q'||ch=='q'){
break;
}
else continue;
}
input(a,N);
jcb *b=a;
jcbf(b,N);
printf("按Q或者q退出程序,按其她任意键继续测试...");
ch = getch();
if(ch=='Q'||ch=='q'){
break;
}
}
return 0;
}
第四章 设计成果及分析
4.1 运营成果截图
4.1.1 初始化界面
图4-1 初始化
4.1.2 输入要调度作业数目
图4-2 输入作业数目
4.1.3 输入作业名、到达时间、服务时间
图4-3 输入各作业信息
4.1.4 运营出成果
图4-4 运营成果
4.2 运营成果分析
调度顺序为:A-->D-->B-->E-->C
运营成果如表所示:
Name
作业名
Arrive
到达时间
Service
服务时间
Start
开始时间
Finish
完毕时间
Zz
周转时间
Avezz
平均周转时间
A
0.00
4.00
0.00
4.00
4.00
1.00
D
3.00
2.00
4.00
6.00
3.00
1.50
B
1.00
3.00
6.00
9.00
8.00
2.67
E
4.00
4.00
9.00
13.00
9.00
2.25
C
2.00
5.00
13.00
18.00
16.00
3.20
表4-2 成果
分析可知:短作业优先法先由到达时间排序,执行作业,然后对日后进入系统作业和系统中档待执行作业进行计算、比较,以服务时间有小到大排序,并按此顺序进行调度。
总 结
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力重要环节,是对咱们实际工作能力详细训练和考察过程。
我做是作业调度模仿,一开始拿到题目时,实在不懂得操作系统和c++如何联系在一起,通过翻阅资料、网上查询、讨论,最后终于完毕了本次课程设计。
短作业优先调度算法易于实现,并且效率很高,但是短作业只考虑到短作业利益,而不顾长作业,这样就也许会使得长作业始终处在等待状态而不能运营。因此,短作业优先算法合用于系统中短作业较多状况。
通过这次课程设计,我对操作系统中作业调度模仿和短作业优先算法有了更深结识。并且发现,只看课本上知识远远不够,只一味学习也主线没用,必要要动手亲自实践,才干真正掌握所学东西。
致 谢
本次课程设计能顺利完毕,是在教师精心指引和同窗互相协助下完毕,无论从学习上还是实践上都使我受益匪浅。感谢院系为咱们提供实练机会,感谢教师细心指引,也感谢成员们互相协助互相探讨。
在本次设计中,自己动手,亲身经历了从学习、探讨、编写、调试过程。不但使对课本上知识点和理论有了更深一层理解,使我学会如何运用所学知识,把理论结合于实践,更重要是让我发散思路,提高实践动手能力。本次课程设计收获诸多,虽然过程磕磕绊绊,但是最后还是完毕了。但是,单单完毕还远远不够,尚有许许多多问题,自己依然不懂,是在教师、同窗协助下完毕,在这里再次对她们协助表达衷心感谢。
参照文献
[1] 汤小丹 梁红兵 哲凤屏等.计算机操作系统(第三版)[M].西安电子科技大学出版社,出版.91-95页.
[2]任爱华 李鹏 刘方毅 编著. 操作系统实验指引[M] . 清华大学出版社,出版.134-157页.
[3]吕凤翥 编著.C++语言基本教程[M] .清华大学出版社,出版.
[4] 谭浩强著.C程序设计(第三版)[M] .清华大学出版社,出版.
附录 程序代码
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define MAX 100 //最多能管理作业数目
struct jcb //作业控制块JCB,定义为构造体
{
char name[10]; //作业名
float arrivetime;//作业到达时间
float servicetime;//作业服务时间
float starttime; //作业开始执行时间
float finishtime;//作业完毕时间
float zztime; //作业周转时间
float avezztime; //作业平均周转时间
};
jcb a[MAX];
void input(jcb *p,int N)
{
int i;
printf("请分别输入:\n\t作业名,到达时间,服务时间(如:JOB1 5 10)\n\n");
for(i=0;i<=N-1;i++)
{
printf("请输入第%d个作业信息:",i+1);
scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);
printf("\n");
}
}
void Print(jcb *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float avezztime,int N)
{
int k;
printf("调度顺序:");
printf("%s",p[0].name);
for(k=1;k<N;k++)
{
printf("-->%s",p[k].name);
}
printf("\n\n");
printf("\t\t\t作业信息:\n");
printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tavezz\n");
for(k=0;k<=N-1;k++)
{
printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].avezztime);
}
}
void sort(jcb *p,int N)
{
for(int i=0;i<=N-1;i++)
for(int j=0;j<=i;j++)
if(p[i].arrivetime<p[j].arrivetime)
{
jcb temp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
void deal(jcb *p,float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &avezztime,int N)
{
int k;
for(k=0;k<=N-1;k++)
{
if(k==0)
{
p[k].starttime=p[k].arrivetime; p[k].finishtime=p[k].arrivetime+p[k].servicetime; }
else
{
p[k].starttime=p[k-1].finishtime; p[k].finishtime=p[k-1].finishtime+p[k].servicetime;
}
}
for(k=0;k<=N-1;k++)
{
p[k].zztime=p[k].finishtime-p[k].arrivetime; p[k].avezztime=p[k].zztime/p[k].servicetime;
}
}
void jcbf(jcb *p,int N)
{
float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,avezztime=0;
sort(p,N);
for(int m=0;m<N-1;m++)
{
if(m==0)
p[m].finishtime=p[m].arrivetime+p[m].servicetime;
else
p[m].finishtime=p[m-1].finishtime+p[m].servicetime;
int i=0;
for(int n=m+1;n<=N-1;n++)
{
if(p[n].arrivetime<=p[m].finishtime)
i++;
}
float min=p[m+1].servicetime;
int next=m+1;//m+1=n
for(int k=m+1;k<m+i;k++)
{
if(p[k+1].servicetime<min)
{
min=p[k+1].servicetime;
next=k+1;
}
}
jcb temp;
temp=p[m+1];
p[m+1]=p[next];
p[next]=temp;
}
deal(p,arrivetime,servicetime,starttime,finishtime,zztime,avezztime,N);
Print(p,arrivetime,servicetime,starttime,finishtime,zztime,avezztime,N);
}
int main()
{
while(1){
system("CLS");
int N;
printf("\t\t\t------短作业优先调度算法------\n");
printf("请输入作业数目:");
scanf("%d",&N);
char ch;
if(N>MAX){
printf("\t!!输入作业数目太大,请输入不不不大于%d整数\n",MAX);
printf("按Q或者q退出程序,按其她任意键继续测试...");
ch = getch();
if(ch=='Q'||ch=='q'){
break;
}
else continue;
}
input(a,N);
jcb *b=a;
jcbf(b,N);
printf("按Q或者q退出程序,按其她任意键继续测试...");
ch = getch();
if(ch=='Q'||ch=='q'){
break;
}
}
return 0;
}
展开阅读全文