急求c++处理机调度算法的实现1. 设定系统中有五个进程,每一个进程用一个进程控制块表示。2. 输入每个进程的“优先数”

急求c++处理机调度算法的实现
1. 设定系统中有五个进程,每一个进程用一个进程控制块表示。
2. 输入每个进程的“优先数”和“要求运行时间”,
3. 为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。
4. 处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。
5. 若要求运行时间为零,则将其状态置为“结束”,且退出队列。
6. 运行所设计程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。
lnry 1年前 已收到1个回答 举报

MmmM 幼苗

共回答了11个问题采纳率:63.6% 举报

#include "stdio.h"
#include
#include
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
struct pcb { /* 定义进程控制块PCB */
char name[10];
char state;
int super;
int ntime;
int rtime;
struct pcb* link;
}*ready=NULL,*p;
typedef struct pcb PCB;
void sort() /* 建立对进程进行优先级排列函数*/
{
PCB *first, *second;
int insert=0;
if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/
{
p->link=ready;
ready=p;
}
else /* 进程比较优先级,插入适当的位置中*/
{
first=ready;
second=first->link;
while(second!=NULL)
{
if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/
{ /*插入到当前进程前面*/
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else /* 插入进程优先数最低,则插入到队尾*/
{
first=first->link;
second=second->link;
}
}
if(insert==0) first->link=p;
}
}
void input() /* 建立进程控制块函数*/
{
int i,num;
system("cls"); /*清屏*/
printf("n 请输入进程数: ");
scanf("%d",&num);
for(i=1;iname);
printf("n 输入进程优先数:");
scanf("%d",&p->super);
printf("n 输入进程运行时间:");
scanf("%d",&p->ntime);
printf("n");
p->rtime=0;p->state='W';
p->link=NULL;
sort(); /* 调用sort函数*/
}
}
int space()
{
int l=0;
PCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}
void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/
{
printf("n 进程名t 状态t 优先数t 需要运行时间t 已经运行时间n");
printf("|%st",pr->name);
printf("|%ct",pr->state);
printf("|%dt",pr->super);
printf("|%dtt",pr->ntime);
printf("|%dt",pr->rtime);
printf("n");
}
void check() /* 建立进程查看函数 */
{
PCB* pr;
printf("n **** 当前正在运行的进程是:n"); /*显示当前运行进程*/
disp(p);
pr=ready;
printf("n **** 当前就绪队列状态为:n"); /*显示就绪队列状态*/
while(pr!=NULL)
{
disp(pr);
pr=pr->link;
}
}
void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/
{
printf("n 进程 [%s] 已完成.n",p->name);
free(p);
}
void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/
{
(p->rtime)++;
if(p->rtime==p->ntime)
destroy(); /* 调用destroy函数*/
else
{
(p->super)--;
p->state='W';
sort(); /*调用sort函数*/
}
}
void main() /*主函数*/
{
int len,h=0;
char ch;
input();
len=space();
while((len!=0)&&(ready!=NULL))
{
ch=getchar();
h++;
printf("-----------------------------------------------------");
printf("n 现在是第%d次运行: n",h);
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
check();
running();
printf("n 按任意键继续......n");
}
printf("nn 进程已经完成.n");
}

1年前

6
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.021 s. - webmaster@yulucn.com