论文百事通 设为主页 会员登录 |  免费注册
代写论文 代发表论文 定制论文 毕业设计定制 期刊目录 黄金会员  
加入收藏 设为首页 |  收藏本站
首页 | 计算机 | 建筑工程 | 医药学 | 经济类 | 文学 | 英语 | 其它类别论文 | 计算机毕业设计 | 课程设计 | 毕业系统演示 | 投稿中心 | 下载中心 | 留言板
  查找论文

单道批处理系统的作业调度(续1)

作者:论文百事通  来源:lwbst.com    【2006-09-28】    编辑:Admin

2.排队模块:Void TForm1::sort()//根据优先数对后备队列进行排队
{

pcb *fir,*sec;
int ins=0;
if((ready==NULL)||((p->super1)>(ready->super1)))
{
p->link=ready;
ready=p;
}
else
{
fir=ready;
sec=fir->link;
while(sec!=NULL)
{
if((p->super1)>(sec->super1))
{
p->link=sec;
fir->link=p;
sec=NULL;
ins=1;
}
else
{
fir=fir->link;
sec=sec->link;
}

}
if(ins==0) fir->link=p;
}
}

3.计算队列长度的模块:int TForm1::space()//计算后备队列的长度
{
int l=0;pcb *pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}

4.检查作业的调度情况模块:void TForm1::check(int x)
{

pcb *pr;
String s;
s="现在执行的进程是:"+p->name1;
if(p->rtime1==0) p->btime1=x;
Memo2->Lines->Add(s);

disp(p);
pr=ready;
Memo2->Lines->Add("就绪队列是:");
while(pr!=NULL)
{
disp(pr);
pr=pr->link;
}

}

5.作业的运行模块:void TForm1::running(int x)
{

(p->rtime1)++;

if(p->rtime1==p->ntime1)
{
p->ftime1=x;
destroy( );

}
else
{

(p->super1)--;
p->state1='w';
sort();
}
}

6.打印模块:void TForm1::disp(pcb *pr)

{
Memo2->Lines->Add("作业名\t状态\t优先数\t所需时间\t执行时间");
Memo2->Lines->Add(pr->name1+"\t"+pr->state1+"\t"+IntToStr(pr->super1)+

"\t"+IntToStr(pr->ntime1)+"\t"+"\t"+IntToStr(pr->rtime1));
}

7.撤销作业控制块模块:void TForm1::destroy()
{
float aveturn;
String s;
s="作业 "+p->name1+" 已经完成。";
Memo2->Lines->Add(s);

p->totime1=p->ftime1-p->stime1;//周转时间等于完成时间-到达时间
aveturn=(float)p->totime1/p->ntime1;//带权周转时间等于周转时间/服务时间
turn1=turn1+p->totime1;
ave1=ave1+aveturn;
String q;
q.sprintf("%4.2f",aveturn) ;
s="作业名 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间";
Memo2->Lines->Add(s);
Memo2->Lines->Add(p->name1+"\t "+IntToStr(p->stime1)+
"\t "+IntToStr(p->ntime1)+"\t "+IntToStr(p->btime1)+
"\t "+IntToStr(p->ftime1)+"\t "+IntToStr(p->totime1)+
"\t "+q );

free(p);
}

8.主函数模块:void __fastcall TForm1::Button2Click(TObject *Sender)
{
int len,t=0,h=0;
//float wholeto,wholeave;
String s;
len=space();
while((len!=0)&&(ready!=NULL))
{

h++;
s="执行次数:"+IntToStr(h);
Memo2->Lines->Add(s);
p=ready;
ready=p->link;
p->link=NULL;
p->state1='R';

check(t);
running(t);
Sleep(500);
t++;

}

Memo2->Lines->Add("所有作业已执行完毕。");

turn1=turn1/countsup;
ave1=ave1/countsup;

String r;
r.sprintf("%4.2f",turn1);
s="这组作业的平均周转时间为:"+r;
Memo2->Lines->Add(s);
String p;
p.sprintf("%4.2f",ave1);
s="这组作业的平均带权周转时间为:"+p;
Memo2->Lines->Add(s);

}
//---------------------------------------------------------------------------
以下是各种调度算法的排序模块:
1.void TForm1::sortsr()//简单轮转法,先来先服务后备队列排序
{
if(readysr==NULL)
{
psr->link=readysr;
readysr=psr;
rearsr=readysr;

}
else
{
rearsr->link=psr;
psr->link=NULL;
rearsr=psr;

}
}
2. void TForm1::sort1()//多级反馈队列后备第一队列的排序
{
if(ready1==NULL)
{
pmul->link=ready1;
ready1=pmul;
rear1=ready1;

}
else
{
rear1->link=pmul;
pmul->link=NULL;
rear1=pmul;

}
}

void TForm1::sort2()//多级反馈队列后备第二队列的排序
{
if(ready2==NULL)
{
pmul->link=ready2;
ready2=pmul;
rear2=ready2;

}
else
{
rear2->link=pmul;
pmul->link=NULL;
rear2=pmul;

}
}

void TForm1::sort3()//多级反馈队列后备第三队列的排序
{
if(ready3==NULL)
{
pmul->link=ready3;
ready3=pmul;
rear3=ready3;

}
else
{
rear3->link=pmul;
pmul->link=NULL;
rear3=pmul;

}
}

void TForm1::sort4()//多级反馈队列后备第四队列的排序
{
if(ready4==NULL)
{
pmul->link=ready4;
ready4=pmul;
rear4=ready4;

}
else
{
rear4->link=pmul;
pmul->link=NULL;
rear4=pmul;

}
}

void TForm1::sort5()//多级反馈队列后备第五队列的排序
{
if(ready5==NULL)
{
pmul->link=ready5;
ready5=pmul;
rear5=ready5;

}
else
{
rear5->link=pmul;
pmul->link=NULL;
rear5=pmul;

}
}
3. void TForm1::sortsf1()//短作业优先后备队列的排序
{
pcbsf *fir,*sec;
int ins=0;
if((readysf1==NULL)||((psf->ntime)<(readysf1->ntime)))
{
psf->link=readysf1;
readysf1=psf;
}
else
{
fir=readysf1;
sec=fir->link;
while(sec!=NULL)
{
if((psf->ntime)<(sec->ntime))
{
psf->link=sec;
fir->link=psf;
sec=NULL;
ins=1;
}
else
{
fir=fir->link;
sec=sec->link;
}

}
if(ins==0) fir->link=psf;
}
}

void TForm1::sortsf2()//短作业优先后备队列的排序
{
pcbsf *fir,*sec;
int ins=0;
if((readysf2==NULL)||((psf->ntime)<(readysf2->ntime)))
{psf->link=readysf2;
readysf2=psf;
}
else
{fir=readysf2;
sec=fir->link;
while(sec!=NULL)
{ if((psf->ntime)<(sec->ntime))
{,psf->link=sec;
fir->link=psf;
sec=NULL;
ins=1;
}
else
{ fir=fir->link;
sec=sec->link;
}
}
if(ins==0) fir->link=psf;
}
}

未完!   

  本课程设计包含完整源程序、可执行程序、设计文档。

 上一篇:单道批处理系统的作业调度(1)-操作系统课程设计
 下一篇:单道批处理系统的作业调度(续2)-操作系统课程设计
本文版权归本站所有,欢迎转载。转载该文章时,请注明“来源:论文百事通 Http://www.lwbst.com”。
 
Copyright (C) 2008 Lwbst.com, All Rights Reserved 版权所有 论文百事通