网络操作系统 实验2 作业优先调度算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机工程学院实验报告

课程名称:网络操作系统班级:实验成绩:

指导教师:姓名:

实验项目名称:短作业优先调度算法学号上机实践日期:

实验项目编号:2组号:上机实践时间:学时

一、目的(本次实验所涉及并要求掌握的知识点)

1实现短作业优先算法。

2了解作业控制块的作用,以及作业控制块的内容和组织方式。

二、实验内容与设计思想(设计思路、主要数据结构、主要代码结构、主要代码段分析、电路图)

实验内容:

1为每个进入系统的作业建立档案以记录和作业相关的信息,例如作业名(以自己的姓名拼音缩写编号,例如,张三同学编写程序所用的作业名是zs1,zs2…..),作业服务时间,作业进入系统的时间,作业开始执行时间,作业完成时间,作业周转时间,平均周转时间,作业信息在存储器中的位置,指向下一个作业控制块的指针等信息。

2将系统中等待作业调度的JCB组织成一个队列(后备队列)。当进行作业调度时,从后备队列中查找选择一个执行时间最短的作业将它调入内存运行。

3进行作业调度时,计算出每个作业的开始执行时间,完成时间,周转时间和平均周转时间,利用短作业优先算法进行作业调度,并按照完成时间由小到大的顺序显示出来。

三、实验使用环境(本次实验所使用的平台和相关软件)

Linux虚拟机VC++

四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)

实验代码:

#include

#include

#include

struct task{

char name[4];

float servicetime; //作业服务时间

float gosystemtime; //作业进入系统的时间

float starttime; //作业开始执行时间

float finishtime; //作业完成时间

float arounttime; //作业周转时间

struct task* next; //指向下一个作业控制块的指针

};

int r; //作业数

struct task *head,*p1,*p2;

struct task* createtask();

void taskschedule(struct task * s);

void main(){

struct task *t;

t=createtask();

taskschedule(t);

}

struct task* createtask(){ //创建作业链

int n=0;

p1=p2=(struct task *)malloc(sizeof(struct task)); /*开辟一个新单元*/ head=NULL;

printf("Please input the nuber of task:\n");

scanf("%d",&r); //输入作业数for(int i=0;i

printf(" Please input the name of task %d :\n",i+1 );

scanf("%s", p1->name); //输入作业名

printf(" Please input the service time :\n");

scanf("%f",&p1-> servicetime); //输入作业服务时间

printf(" Please input the time of task into system :\n");

scanf("%f",&p1->gosystemtime); //输入作业进入系统时间n=n+1; /*结点个数加1*/

if(n==1) head=p1; /*是第一个结点, 置头指针*/

else p2->next=p1; /*非首结点, 将新结点插入到链表尾*/

p2=p1; /*设置新的尾结点*/

p1=(struct task *)malloc(sizeof(struct task));

}

p2->next=NULL;

return(head);

}

void taskschedule(struct task * s){ //作业调度

float servicetim; //用于保存最小服务时间

float gosystemtim; //用于保存最小进入系统时间

float endtime=0; //用语标记作业开始的时间点

int flage; //标记时间点内是否有任务

float avaragetime=0;

struct task * head,* percur,* pres,*l,*t;

head=s;

struct task *p;

p=head;

float e=p->gosystemtime; //用于暂时保存最小进入系统时间

for(;p->next!=NULL;) //找出最小进入系统时间

{

if(p->gosystemtime<=e)

e=p->gosystemtime;

p=p->next;

}

endtime=e;

printf("============================================================================ ===\n");

printf(" 作业名运行时间进入系统时间开始时间完成时间周转时间\n");

int i=0;

for(i;i

{ t=l=head;

pres=percur=l;

servicetim=100000000;

flage=0;

int j=i;

int k=i;

for(j;j

{

if(l->gosystemtime<=endtime)

{ flage=1; //标记为该时间点内有作业任务

if(l->servicetime

{

servicetim=l->servicetime;

pres=l;

percur=t;

}

}

if(l!=head) //l是t的next

t=t->next;

l=l->next;

}

if(flage==0) //该时间点没有作业任务

{ t=l=head;

pres=percur=l;

相关文档
最新文档