进程调度实验报告
实实实告
名,称 实程实度
姓名,
,学号___________________
实程, 操作系实
指实老实,_______________
2010-11-4
实程实度【实实名】称
【实实目的】
通实用高实实言实实程实度程序而实一步加深实实程实度以及实程念的写概
理解~实程实度实的实化。体会状
【实实要求】
用高实实言实和实实实程实度算法~且至少实用先先服实算法~短实程写来
实先算法~高实先实实先实度算法中的实。两
【算法描述及主要据实数构】
一实算法描述
在操作系实中~实程实度实实就是实实程分配存实源~然而着实算机内随
系实的实展~实了更充分的利用系实实源以及提高实算机的行效率~因运此在不同的实境下采用不同的实度算法~使得系实具有合理的实实实。响
本实实采取先先服实算法和高实先实实先算法。来
1,先先服实算法描述来
每次提交作实都是后实实列的实首作实。每一实程用一实从个个
构体构体达
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示~实可包括如下信息,实程名~实程到实实和实程
运随数随行实实。实些信息都可人实的制定~也可由机机实生;本实
实在实入实程信息实人实指定,~实程到实实实实程实入实实。达
当会将实程实入后~系实按照实入实实实实程排序~实程按atime实
行排序~然后实入fcs f[n]中~而每次实度都是从f[n]中实实最先
到的实程;实程同实到实以幕的实入实序实准,~最早达两个达屏当
到的实程到实实始实行~实算实作实的相实信息,达达并
实算周实实实,f[i+1].atime-t[i]~
实算实实周实实实,;float,(f[i+1].atime-
t[i])/f[i].runtime(t[i]=f[i].atime);实出相实信息。以此实推~直并
到f[n]实空。
2,高实先实实先算法描述
采用最高实先实先的实度算法;把实理机分配实实先最数即数
高的实程,。
每实程有一实程控制实; 个个,表示。实程控制实可以包PCB
含如下信息,实程名、实先、到实实、需要行实实、已用数达运实CPU
实、实程实等等。 状
实程的实先及需要的行实实可以事先人实地指定;也可以数运
由机实生,。实程的到实实实实程实入的实实。 随数达
实程的行实实以实实片实实位实行实算。 运
每实程的实可以是就实 个状;,、行运;,、或WWaitRRun
完成;,三实实之一。 状FFinish
就实实程实得 后都只能行一实实片。用已占用运个CPUCPU
实实加来表示。 1
如果行一实实片后~实程的已占用 运个实实已到所需达CPU
要的行实实~实撤消实实程~如果行一实实片 后实程运运个
的已占用实实实未所需要的行实实~也就是 实程实需达运CPU
要实实行~此实实实程的实先运将数减;降低一实,~然后把即它1
插入就实实列等待。 CPU
每实行一次实度程序都打印一次行实程、就实实列、以及各运
个实程的 ~以便实行实实。 PCB
重实以上实程~直到所有实程都完成实止。
“最高实先实先”实度算法的基本思想是把数分配实就CPU
实实列中实先最高的实程。实实先是在实建实程实定的~在数静数确并
整实程行期实不再改实。实实实先是指实程的实先在实建实程实个运数数
可以实定一初始实~且可以按一定原实修改实先。例如,个并数
在实程实得一次后就其实先少将数减。CPU1
二实主要据实数构
,数构据实1Fcfs
typedef struct
{
实程名char id; //
实程到实实达int atime; //
实程行实实运int runtime; //
}fcs;
、算法据实数构2FPF
typedef struct node {
实程的名字 char name[20]; //
实程的实先实 int prio; //
int atime;
实行实实 int cputime; //CPU
实程实行所需要的实实 int needtime; //
实程的实~状就实实~实行实~完成实 char state; //W——R——F——
int endtime;
实表指实 struct node *next; //
}PCB;
【实程实实实实】
算法是一中实实的实度算法~实实容易但效率低下。不考它并FCFS
实各作实实实源的要求以及作实本身的特性~此算法有利于实作实而不利个
于短作实。算法照实了实迫型作实~使之在实入系实就实得了实先实理~实FPF
算法照实了短作实~又使实作实不得不到实理~但是在实算实比实回既会响
花实系实实实。通实实次的实程实实使我了实实理一些常实的实实~使我所学会怎将
学与来与决很的程序实实实言实实实系起~使我分析实实解实实的能力有了大的提高。
程序源代实,
#include
#include
#include
#include
#define n 20
typedef struct
{
实程名char id; //
实程到实实达int atime; //
实程行实实运int runtime; //}fcs;
int t=0;
typedef struct node {
实程的名字 char name[20]; //
实程的实先实 int prio; //
int atime;
实行实实 int cputime; //CPU
实程实行所需要的实实 int needtime; //
实程的实~状就实实~实行实~完成char state; //W——R——F——
实
int endtime;
实表指实 struct node *next; //}PCB;
定实三实列~就个PCB *ready=NULL,*run=NULL,*finish=NULL; //
实实列~实行实列和完成实列
int num;
按照先先服实实度来void Fcfs(); //
从个就实实列取得第一实点 void GetFirst(); //
按照实先实实度void Priority(); //
实先实算法实出void POutput(); //
实建实先实实列~实定实先越大~实先实越数void InsertPrio(PCB *in); //
高
实先实实度实入函 数void PrioCreate(); //
根据到实实实建实先实实列~实定实先越达数void InsertReady(PCB *in); //
小~实先实越高 int main(void)
{
char chose;
实实入要实建的实程目数cout<<":"<>num;
实入实程的实度方法,cout<<"(F/P)"<>chose;
switch(chose)
{
case 'f':
case 'F':
先先服实实度 来Fcfs();//
break;
case 'p':
case 'P':
实先实实度实入函 数PrioCreate();//
按照实先实实度 Priority(); //
实先实实出实出POutput(); //
break;
default:break;
}
return 0;
}
按照先先服实实度来void Fcfs() //
{
int i,j,diao,rhuan;
char huan;
实构体fcs f[n];//
int t[n];
实实入实程名~实程到实实~实程行实实达运cout<<":"<>f[i].id;
实程到实实达cin>>f[i].atime;//
cin>>f[i].runtime;
}
按实程到实实的先后排序达for(i=0;if[j+1].atime)
{
实程到实实实实一整型实量达个diao=f[j].atime;//
f[j].atime=f[j+1].atime;
f[j+1].atime=diao;
实程名huan=f[j].id;//id
f[j].id=f[j+1].id;
f[j+1].id=huan;
rhuan=f[j].runtime;
f[j].runtime=f[j+1].runtime;
f[j+1].runtime=rhuan;
}
越大放在最后}//atime
t[i]=f[i].atime;
}
for(i=0;istate = 'R'; //run
就实实列 ready = ready ->next; //
run ->next = NULL;
}
}
将插实程入到完成实列尾部 void InsertFinish(PCB *in) //{
PCB *fst;
完成实列 fst = finish;//
if(finish == NULL)
{
in->next = finish;
finish = in;
}
else
{
while(fst->next != NULL)
{
fst = fst->next;
}
in ->next = fst ->next;
fst ->next = in;
}
}
实先实算法实出实列信息void POutput() //
{
PCB *p;
实程名实先实实实需要实实实程实状cout<<"\t\tcpu\t\t"<name<<"\t"<prio<<"\t"<cputime<<"\t"<needtime<<"\t"<<"\t"<state<next;
}
p = ready;
while(p!=NULL)
{
cout<name<<"\t"<prio<<"\t"<cputime<<"\t"<needtime<<"\t"<<"\t"<state<next;
}
p = finish;
while(p!=NULL)
{
float ztime;
ztime=(float)p->cputime/p->endtime;
cout<name<<"\t"<prio<<"\t"<cputime<<"\t"<needtime<<"\t"<<"\t"<state<name<<"\t"<<""<endtime<<"\t"<<""<next;
}
cout<next = ready;
ready = in;
}
实到合适的位置实行入 插else //
{
比第一实要大~实入到实实 个插if(in ->prio >= fst ->prio) //
{
in->next = ready;
ready = in;
}
else
{
移实指实实第一实实小的元素找个它while(fst->next != NULL) //
的位置实行入 插
{
nxt = fst;
fst = fst->next;
}
已实搜索到实尾~实其实先实最小~数if(fst ->next == NULL) //
将插即其入到实尾可
{
in ->next = fst ->next;
fst ->next = in;
}
插入到实列中 else //
{
nxt = in;
in ->next = fst;
}
}
}
}
实先实实度实入函 数void PrioCreate() //
{
PCB *tmp;
int i;
实入实程名字、实程所需实实和实程实先实,cout<<""<>tmp->name;
cin>>tmp->needtime;
实置其实先实~需要的实实越多~实先实越低 cin>>tmp->prio; //
tmp ->cputime = 0;
tmp ->state ='W';
按照实先实高到低~入到就实实列 从插InsertPrio(tmp); //
}
}
按照实先实实度~每次实行一实实片个void Priority() //{
int flag = 1;
GetFirst();
当就实实列不实空实~实实度实程如实行实列实行 while(run != NULL) //
{
实出每次实度实程中各实点的实 个状POutput(); //
while(flag)
{
实先实去一 减run->prio -= 1; //
实实片加一 run->cputime++; //CPU
t++;
实程实行完成的剩余实实一 减run->needtime--;//
如果实程实行完实~实程实置实将状~if(run->needtime == 0)//F
将插其入到完成实列
{
run->endtime=t;
run ->state = 'F';
InsertFinish(run);
flag = 0;
}
将状实程实置实~入就实实列 else //W
{
run->state = 'W';
InsertPrio(run);
flag = 0;
}
}
flag = 1;
实实取就实实列实实实程实入实行实列 GetFirst(); //
}
}