操作系统实验C语言编写作业调度讲课稿.docx

上传人:b****2 文档编号:2322552 上传时间:2022-10-28 格式:DOCX 页数:8 大小:102.32KB
下载 相关 举报
操作系统实验C语言编写作业调度讲课稿.docx_第1页
第1页 / 共8页
操作系统实验C语言编写作业调度讲课稿.docx_第2页
第2页 / 共8页
操作系统实验C语言编写作业调度讲课稿.docx_第3页
第3页 / 共8页
操作系统实验C语言编写作业调度讲课稿.docx_第4页
第4页 / 共8页
操作系统实验C语言编写作业调度讲课稿.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

操作系统实验C语言编写作业调度讲课稿.docx

《操作系统实验C语言编写作业调度讲课稿.docx》由会员分享,可在线阅读,更多相关《操作系统实验C语言编写作业调度讲课稿.docx(8页珍藏版)》请在冰豆网上搜索。

操作系统实验C语言编写作业调度讲课稿.docx

操作系统实验C语言编写作业调度讲课稿

石家庄经济学院

 

实习报告

 

(学院)系:

信息工程学院

专业:

计算机科学与技术

姓名:

江丹

班级:

专接本2班

学号:

1

指导教师:

张有华

2012年6月22日

操作系统课程实习报告

学号:

1

姓名:

江丹

起迄日期:

2012/6/11~2012/6/16

指导教师:

张有华

实习地点:

206室

实习题目:

采用先来先服务算法和运行时间最短者优先算法模拟设计作业调度程序。

1实习内容

模拟批处理多道操作系统的作业调度

2实习目的

每个用户请求计算机计算的一个计算任务叫做一个作业。

一个作业从输入初始数据到得到计算结果,要经过若干个步骤的相继执行。

例如,编辑、编译、运行等,其中每一个步骤称作一个作业步。

用户向系统提出作业加工步骤的方式称作业控制方式,作业控制方式有两种:

终端控制方式(又称直接控制方式或联机控制方式)和批处理控制方式(又称自动控制方式或脱机控制方式)。

在批处理控制方式下,用户采用系统提供的作业控制语言(JCL)写好作业说明书,说明作业加工的步骤。

操作员把一批作业组织成输入流,通过“预输入”手段使每个作业的信息(包括作业说明书、源程序、初始数据等)暂存在辅助存储器的“输入井”中。

批处理多道操作系统的作业管理有两个任务:

作业调度和作业控制。

采用多道程序设计方法的操作系统,在系统中要经常保留多个运行的作业,以提高系统效率。

作业调度从系统已接纳的暂存在输入井中的一批作业中挑选出若干个可运行的作业,并为这些被选中的作业分配所需的系统资源。

对被选中运行的作业必须按照它们各自的作业说明书规定的步骤进行控制。

本实习要求学生模拟作业调度的实现,了解作业调度在操作系统中的作用。

3实习步骤

第一步:

首先对整个题目进行分析,包括对作业、主存的定义类型。

第二步:

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

第三步:

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

第四步:

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

3.1需求分析

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

3.2数据结构设计与说明

定义作业中的变量-资源需求:

typedefstructsource

{

intsize;//资源要求大小

inttape_count;//资源要求磁带数

}src;

定义作业:

typedefstructjobwork

{

charusername[10];//用户名

charjobname[10];//作业名

charstate[5];//运行状态

intruntime;//运行时间

srcsource;//资源需求(结构体类型见上)

structjobwork*next;//下一个指针

}job;

定义内存:

typedefstructmemory

{

intsize;//内存大小

inttape_count;//内存磁带数

charjobname[10];//内存中存在的作业名(首次为空)

charusername[10];//内存中作业的用户名

charstate[5];//内存中作业的状态

intjob_count;//内存中作业个数

structmemory*next;//内存下一个指针

}mem;

3.3算法设计

第一部分:

初始化作业表

while(i<=2)

{

p=(job*)malloc(sizeof(structjobwork));//分配内存空间scanf("%s\t%s\t%s\t%d\t%d\t%d",p->username,p->jobname,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.size<=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;

}

本程序主要用C语言实现,中间只调用了一次冒泡函数,其余均在主函数中利用if和else以及循环语句实现。

每次循环都把p指针指向头指针head,依次循环下去。

每次函数传进去的值也都是jobwork类型的头指针head或p。

下面是本程序流程图:

 

 

错误!

链接无效。

 

 

程序流程图

 

在此给各模块的功能、入口参数、出口参数及模块之间的调用关系;算法如果使用程序流程图描述,图要求用VISIO画,图中的文字用5号(以下同样要求)。

4程序实现及运行结果分析

先来先服务算法调度作业:

本程序暂时采用了三道作业,运行结果如下:

先来先调度算法结果图

 

结果分析:

✧起初程序输入3道作业(用户名、作业名、状态、运行时间、资源需求(主存,磁带数))

✧输入大于0.5的数,让程序首先进行作业查找。

查找到合适的作业,然后对其中的两道作业分配内存空间,这里截取的是先来先服务算法程序的结果图。

可以看到,100内存空间,磁带数为5的主存储器中,先对第一道作业分配了空间,后又对第二道作业分配了空间,并显示主存分配空间后的大小以及每道作业运行的情况。

本实验题目—先来先服务算法调度作业,采用了链表的方式,先输入的作业即为先来到的作业的方法。

✧下面开始查找内存表:

输入一个小于0.5的数,查找处于执行状态的作业,并输入该作业的作业名和用户名,手动结束该作业的进程,置为完成态,回收该道作业的内存大小和磁带数。

最短时间优先算法调度作业:

最短时间优先调度结果图

结果分析:

✧起初程序输入3道作业(用户名、作业名、状态、运行时间、资源需求(主存,磁带数))

✧输入大于0.5的数,让程序首先进行作业查找。

查找到合适的作业,然后对其中的两道作业分配内存空间,这里截取的是先来先服务算法程序的结果图。

可以看到,100内存空间,磁带数为5的主存储器中,首先对时间最短的作业分配内存,执行调度,然后一次按时间长短进行分配。

✧下面开始查找内存表:

输入一个小于0.5的数,查找处于执行状态的作业,并输入该作业的作业名和用户名,手动结束该作业的进程,置为完成态,回收该道作业的内存大小和磁带数。

4.1程序源代码

先来先服务调度-代码:

参见文件夹LAB01_1(源代码所在的文件夹链接)

最短时间优先调度-代码:

参见文件夹LAB01_1(源代码所在的文件夹链接)

4.2程序运行结果

程序运行结果见图(一、二、三)

这里先来先服务算法输入的测试用例为三道作业:

分别为:

aare收容43321

nndr收容32212

ookj收容65321

最短时间优先算法的测试用例:

88rr收容43272

ttww收容32241

yyqq收容40331

5实习总结

1、本次实验过程中,通过此次题目,掌握了了作业调度内存分配的一些基本原理。

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

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

2、实验中出现的问题:

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

经常出现内存溢出问题。

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

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

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

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

3、在机房用的vc++6.0与自己机子上的dev-c++对程序的解释是不同的,自己的机子上的dev-c++等一些编译软件读程序比较严格,缺点:

报错信息不明确。

使得自己每天不得不窝在实验室做程序,辛苦呀~~唉~~。

下次一定要换XP的操作系统,这个系统一般来说是兼容多个软件而不会出问题的。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1