- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2006年暑期工作安排-Read.doc
一、目的要求
用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。
二、例题:为单道批处理系统设计一个作业调度程序。
由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。
作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。
每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。
作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。
各个等待的作业按照提交时刻的先后次序排队,总是首先调度等待队列中队首的作业。
每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。
三、调度算法的流程图
四、进程调度源程序
#define N 20
#define M 1000000
#define NULL 0
#includestdio.h
typedef struct qNode
{ int name;
float arrive;
float runtime;
float response;
struct qNode *next;
}qNode,*linkPtr;
typedef struct linkQueue /*定义队列*/
{ linkPtr front;
linkPtr rear;
}linkQueue;
initQueue(linkQueue *q)
{ (*q).front=(*q).rear=(linkPtr)malloc(sizeof(qNode));
if(!(*q).front)
{ printf(creat fail!\n);
exit();
}
(*q).rear-next=NULL;
}
createWork(linkQueue *work) /*按输入创建工作队列*/
{ qNode p;
qNode *ptr;
int i,n;
char get=1;
ptr=(*work).rear;
printf(how many work do you want to do:\n);
scanf(%d,n);
printf(input the work as:name arrive-time runtime,as: 6 8.9 3.1\n);
/*printf(Press Twice when input the works name,q to quit input\n);*/
for(i=0;in;i++)
{ ptr=(linkPtr)malloc(sizeof(qNode));
scanf(%d %f %f,p.name,p.arrive,p.runtime);
p.next=NULL;
*ptr=p;
(*work).rear-next=ptr;
(*work).rear=ptr;
}
return n;
}
prinInf()
{ printf(input your choice\n);
printf(\t1 first come first server\t\t2 shortest job first\n);
printf(\t3 shortest surplus_time first\t\t4 high response_ratio next\n);
printf(\t0 to quit\n);
printf(: );
}
printJob(linkPtr ptr) /*打印输入作业*/
{ ptr=ptr-next;
printf(input work were:\n);
while(ptr)
{ printf(%d %10.3f %10.3f\n,ptr-name,ptr-arrive,ptr-runtime);
ptr=ptr-next;
}
}
fcfs(int n,linkPtr avp) /*先来先服务*/
{ linkQueue fcfs;
linkPtr ptr,tmp;
int i;
float t,T,Tw,Tt[N][2];
T=Tw=0.0;
i=0;
initQueue(fcfs);
avp=avp-next;
while(avp) /*按到达时间排序*/
{ pt
文档评论(0)