当前位置:文档之家› 作业调度

作业调度

作业调度实验报告
1、实验目的
作业管理是用户与操作系统的接口。

作业调度的主要功能是检查系统是否能满足用户作业的资源要求以及按照一定的算法选取作业。

本实验的目的是通过模拟作业调度算法的设计加深对作业管理基本原理的理解。

2 实验用具
个人电脑
3、实验内容
⑴在后备作业队列中,输入5个作业的名称、状态、就绪时间、服务时间及存储空间。

①按先来先服务的原则进行调度,输出作业调度的顺序及等待的时间。

②按最短作业(即运行时间最短)优先的原则进行调度,输出作业调度的顺序及等待时间。

4 实习步骤
第一步:首先对整个题目进行分析,包括对作业、主存的定义类型。

第二步:对流程图进行分析,分析一些细节代码。

第三步:根据程序流程图写代码并调节一些细节错误。

第四步:运行看结果,这里主要看内存根据作业的要求对分配情况。

4.1 需求分析
本次实验是在预输入五道作业的基础上初始化,并通过作业的需求更改主存的输出显示情况,首先是输入5道作业,分别使用先来先服务算法和最短时间优先算法分配内存,最后进行内存的回收。

4.2 数据结构设计与说明
定义作业中的变量-资源需求:
typedef struct source
{
int size; //资源要求大小
int tape_count; //资源要求磁带数
}src;
定义作业:
typedef struct jobwork
{
char username[10]; //用户名
char jobname[10]; //作业名
char state[5]; //运行状态
int runtime; //运行时间
src source; //资源需求(结构体类型见上)
struct jobwork *next; //下一个指针
}job;
定义内存:
typedef struct memory
{
int size; //内存大小
int tape_count; //内存磁带数
char jobname[10]; //内存中存在的作业名(首次为空)
char username[10]; //内存中作业的用户名char state[5]; //内存中作业的状态 int job_count; //内存中作业个数struct memory *next; //内存下一个指针}mem;
4.3 算法设计
第一部分:初始化作业表
while(i<=2)
{
p=(job*)malloc(sizeof(struct jobwork));
//分配内存空间scanf("%s\t%s\t%s\t%d\t%d\t%d",p->username,p->jobn
ame,p->state,&(p->runtime),&(p->source.size),&(p->
source.tape_count));
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
i++;
}
第二部分:统计合适的作业的个数
while(p!=NULL&&strcmp("",p->state)==0&&p->source.si ze<=mem1.size&&p->source.tape_count<=mem1.tape_count) {
mem1.job_count++;
p=p->next;
}
第三部分:执行先来先服务算法,为作业分配内存;最短作业优先算法采用的是一样的原理,链表指针由头往后指下去,只不过先前部分运用了冒泡方法,把时间由短到长拍了下顺序。

while(p!=NULL&&strcmp("",p->state)==0&&p->source.size <=mem1.size&&p->source.tape_count<=mem1.tape_count) {
mem1.size=mem1.size-p->source.size; //分配主存空间
mem1.tape_count=mem1.tape_count-p->source.tape_count;
//分配磁带数
printf("%d\t%d\n",mem1.size,mem1.tape_count);
strcpy(p->state,"执行"); //将选到的作业状态改为执行
printf("%s\t%s\n\n",p->jobname,p->username);
第四部分:回收内存
while(p1!=NULL&&p!=NULL&&strcmp(p->state,"完成"))
{
mem1.size=mem1.size+p->source.size;
mem1.tape_count=mem1.tape_count+p->source.tape_count;
printf("%d\t%d\t\n",mem1.size,mem1.tape_count);
mem1.job_count--;
p=p->next;
p1=p1->next;
}
5 实习总结
1、本次实验过程中,通过此次题目,掌握了了作业调度内存分配的一些基本原理。

对先来先服务、最短时间优先算法灵活的进行运用。

是此次作业调度实验顺利完成。

2、实验中出现的问题:对单链表操作、malloc动态分配内存空间运用出现了问题,有好几次输出指针,产生错误,认识到了,指针是地址,不能以字符串的形式输入,真正应该输出的是指针里边的内容,指针只是个地址。

经常出现内存溢出问题。

遇到的最棘手的问题是,malloc函数为单链表分配内存,指针的指向问题。

不过,自己积极思考,在老师的帮助下,解决了这个问题。

按照流程图的步骤,一步一步的往下写完了程序。

最后,第二个程序,在第一个程序的基础上运用了冒泡法,对链表按运行时间进行了排序,实现了最短时间优先算法程序。

相关主题