多级反馈队列调度算法

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

#include

#include <>

#include<>

#define NULL 0

#define MAL(type) (type *)malloc(sizeof(type))

using namespace std;

typedef struct LNode

{char name[5];

char state;

int runtime;

int needtime;

struct LNode *next;

}LNode;

LNode *H;

int T,D,J;

void print()

{LNode *p=H;

printf("\n进程名需执行时间已执行时间状态\n");

for(int i=0;i

{printf("%s %10d %10d %c\n",p->name,p->needtime,p->runtime,p->state);

p=p->next;

}

system("PAUSE");

void input()

{int i;

printf("请输入进程数:");

scanf("%d",&J);

for(i=0;i

{LNode *p,*q;

q=MAL(LNode);

printf("\n请输入第%d个进程的进程名:",i+1);

scanf("%s",&q->name);

printf("请输入第%d个进程需要的执行时间:",i+1);

scanf("%d",&q->needtime);

if(q->needtime<=0)

{printf("所需时间要大于0\n 请重新输入——\n");i--;}

else

{q->runtime=0;

q->state='N';

q->next=NULL;

}

if(i==0)

H=p=q;

else

{p->next=q;p=q;}

}

printf("\n进程初始化态为:");

print();

void run()

{int i,time=0,l=1;

printf("\n请输入队列个数:");

scanf("%d",&D);

printf("请输入第一个队列的时间片长度:");

scanf("%d",&T);

for(i=0;i<=J;i++)

{int k=1;

LNode *p,*q;

if(i

else i--;

p=H;

while(p!=NULL)

{if(p->state=='Y'){p=p->next;continue;}

p->runtime=p->runtime+time;

if(p->needtime<=p->runtime)

{if(p->needtime==p->runtime)

{p->state='Y';printf("进程%s已运行完毕!",p->name);}

else

{p->runtime=p->needtime;p->state='Y';}

}

p=p->next;

}

for(q=H;q!=NULL;q=q->next)

{if(q->state=='N'){k=0;break;}

}

if(k==1)break;

else print();

}

}

int main()

{input();

run();

print();

printf("所有进程执行完成!\n");

system("PAUSE");

return 0;

}

相关文档
最新文档