?? fpf.c
字號:
////////////////////////進程"最高優先數優先"調度算法
//文檔中有更詳細的注釋
#include "stdio.h"
#include <stdlib.h>
#include <conio.h>
# define getpcb(type) (type*)malloc(sizeof(type))
struct pcb{//進程的結構體
char state;//狀態
char name[10];//名字
int super;//優先權
int total_time;//服務時間
int run_time;//已運行時間
struct pcb *next;
}*p,*ready=NULL;
typedef struct pcb PCB;
sort()//進程按優先級排隊
{
int flag=1;
PCB *tm1,*tm2;
if(ready==NULL)
{
ready=p;
ready->next=NULL;
}
else if(p->super>ready->super)
{
p->next=ready;
ready=p;
}
else
{
tm1=ready;
tm2=ready->next;
while(tm2)
{
if(p->super>tm2->super)
{
p->next=tm2;
tm1->next=p;
flag=0;
break;
}
tm2=tm2->next;
tm1=tm1->next;
}
if(flag)
{
tm1->next=p;
p->next=NULL;
}
}
}
input()//輸入進程信息
{
int i,num;
printf("\n 請輸入進程數:");
scanf("%d",&num);
for (i=0;i<num;i++)
{
printf("\n 進程號:No.%d:\n",i+1);
p=getpcb(PCB);
printf("\n 輸入進程名:");
scanf("%s",p->name);
printf("\n 輸入進程優先級:");
scanf("%d",&p->super);
printf("\n 輸入進程運行時間:");
scanf("%d",&p->total_time);
p->run_time=0;
p->state='w';
p->next=NULL;
sort();
}
}
display(PCB *q)//顯示進程的狀態
{
printf("\n name\t state\t super\t total_time\t run_time\n");
printf(" %s\t %c\t %d\t\t %d\t\t %d\n",
q->name,q->state,q->super,q->total_time,q->run_time);
}
destroy()//取消進程
{
printf("\n 進程[%s]已完成.\n",p->name);
free(p);
p=NULL;
}
running()//進程運行
{
p->run_time++;
if(p->run_time==p->total_time)
destroy();
else
{
p->super--;
p->state='w';
}
if(p)sort();
}
check()//查看進程的狀態
{
PCB *pr;
printf("\n 當前正在運行的進程是:%s",p->name);
display(p);
pr=ready;
printf("\n當前就緒隊列狀態為:\n");
while(pr)
{
display(pr);
pr=pr->next;
}
}
main()//主函數
{
int h=0;
system("cls");
printf("\n模擬進程調度系統——最高優先數優先調度算法\n");
input();
while(ready)
{
getchar();
h++;
printf("\n The execute number:%d \n",h);
p=ready;
ready=ready->next;
p->next=NULL;
p->state='R';
check();
running();
printf("\n 按任鍵繼續......");
getchar();
}
printf("\n\n 所有進程已經完成.\n");
getchar();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -