当前位置:   article > 正文

c语言编程实现rm调度算法,用C语言编程模拟处理机调度(实现一种算法)

c语言 系统rm

共回答了17个问题采纳率:88.2%

#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年前

4

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/867207
推荐阅读