多级反馈队列调度算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; }