用C语言编写进程调度算法
用C语言编写进程调度算法
#include
#include
typedef int Status;
#define ERROR 0
#define OK 1
typedef struct PCB{
char NAME[10]; //进程名字
int PRIO; //进程优先数
int ROUNT; //轮转时间片
int COUNT; //计数器
int NEEDTIME; //需要的CPU时间
int CPUTIME; //占用cpu时间
char *STATE; //进程状态
}ElemPCB;
typedef struct QNode{
ElemPCB pcb;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct{ //就绪队列
QueuePtr RUN; //当前运行进程指针
QueuePtr READY; //头指针
QueuePtr TAIL; //尾指针
}READYQueue;
typedef struct{ //完成队列
QueuePtr FINISH; //头指针
QueuePtr TAIL; //尾指针
}FINISHQueue;
Status Create(READYQueue &ready);
Status Print(READYQueue ready,FINISHQueue finish);
Status Printr(READYQueue ready,FINISHQueue finish);
Status Fisrt(READYQueue &ready);
Status Insert1(READYQueue &ready);
Status Insert2(READYQueue &ready);
Status Prisch(READYQueue &ready,FINISHQueue &finish);
Status Roundsch(READYQueue &ready,FINISHQueue &finish);
void main(){
char ch;
READYQueue ready;
FINISHQueue finish;
ready.READY=ready.TAIL=(QueuePtr)malloc(sizeof(QNode)); //存储分配
ready.RUN=(QueuePtr)malloc(sizeof(QNode));
ready.RUN->next=NULL;
finish.FINISH=finish.TAIL=(QueuePtr)malloc(sizeof(QNode));
Create(ready);
//创建后就绪对列中
printf("\n就绪对列中初始值:\n");
Print(ready,finish);
Fisrt(ready);
printf("请输入要选择调度的算法(p--优先数调度,r--时间片轮转法):\n");
while(1){
do{
ch=getchar();
scanf("%c",&ch);
}while(ch!='p' && ch!='r');
switch(ch){
case 'p':
//优先数调度
Prisch(ready,finish);
break;
case 'r':
//时间片轮转法
Roundsch(ready,finish);
break;
}
}
}
Status Print(READYQueue ready,FINISHQueue finish){ //打印就绪队列中的进程状态
QueuePtr p,q;
p=ready.READY;
q=finish.FINISH;
//运行中的进程
if(ready.RUN->next!=NULL)
{
printf("%s",ready.RUN->next->pcb.NAME);
printf(":%s\t",ready.RUN->next->pcb.STATE);
printf("优先数:%d\n",ready.RUN->next->pcb.PRIO);
}
//就绪队列的进程
while(p!=ready.TAIL){
printf("%s",p->next->pc