处理器优先级调度模拟算法

来源:互联网 发布:js find class 编辑:程序博客网 时间:2024/05/22 01:36

</pre><pre name="code" class="cpp">#include "stdio.h"#include<stdlib.h>#include<conio.h>#define getpch(type)(type*)malloc(sizeof(type))#define NULL 0struct pcb{char name[10];char state;  //状态   w为等待,r是准备状态int super;   // 优先级,数字越大优先级越小int ntime;   //所需时间struct pcb *link;   //指向下一个进程的指针}*ready=NULL,*p;   //p是当前进程typedef struct pcb PCB;//进程显示函数,显示当前函数void disp(PCB *pr){printf("\nqname\tstate\tsuper\tntime\n");printf("|%s\t",pr->name);printf("|%c\t",pr->state);printf("|%d\t",pr->super);printf("|%d\t",pr->ntime);printf("\n");} //进程优先级排列函数void sort(){PCB *first,*second;int insert=0;    //插入标记if((ready==NULL)||((p->super)<=(ready->super)))   //p的优先级高{p->link=ready;      //ready插在p后面ready=p;  }else                                            //p的优先级小于ready{first=ready;second=first->link;while(second!=NULL)           //循环比较p和second的优先级,遇到比p低的,p插到它前面{if((p->super)<(second->super))     //p优先级比second高,插到second前{p->link=second;first->link=p;second=NULL;                 //为了跳出循环insert=1;}else                 //p优先级不高于second ,first和second向后移{first=first->link;      second=second->link; }}if(insert==0)    //循环后还没插入过(insert=0时),证明p优先级最低,插到队尾{first->link=p;   //此时first是队尾p->link=NULL;}}}//进程控制块函数void input(){int i;int num=5;    //5个进程for(i=0;i<num;i++){printf("\n进程号No.%d",i+1);p=getpch(PCB);printf("\n输入进程名:");scanf("%s",p->name);printf("输入优先级数:");scanf("%d",&p->super);printf("输入运行时间:");scanf("%d",&p->ntime);printf("\n");p->state='w';p->link=NULL;sort();}}//进程撤销函数void destroy(){p->state='e';printf("\n进程[%s]已完成,\n",p->name);free(p);}//进程就绪函数void running(){p->ntime--;p->super++;}//进程查看函数void check(){PCB *pr,*e;printf("\n***********当前正运行的进程是:%s",p->name);disp(p);pr=ready;printf("\n***********当前就绪的队列为:\n");while(pr!=NULL){pr->state='w';disp(pr);pr=pr->link;}running();if(p->ntime==0){destroy();}else{sort();}}void main(){int h=0;char ch;input();while(ready!=NULL){p=ready;ready=p->link;ch=getchar();h++;  //运行次数printf("\nThe excute number:%d\n",h);p->state='r';check();printf("\n按任意键继续。。。。。");ch=getchar();}printf("\n\n进程已经完成。\n");ch=getchar();}


说实话,真不知道操作系统这课上的是神马,这个实验作业(优先级进程调度算法)真没想法,网上找不到实验要求一模一样的,狠了狠心,去了图书馆找,找来的根本有些问题也不是那么符合实验要求。。。。然后又狠了狠心,改了成了我想要的,其实还可以有些改进些地方,比如可以加个结束进程的队列什么的,,原谅我是个又笨又懒惰的人。

0 0
原创粉丝点击