資源簡介
按剝奪式優先數法對三個進程P1,p2,p3進行模擬調度,各進程的優先數靜態設置,其中P1的優先數最高,P3的優先數最低。每個進程都處于執行E(execute),就緒R(ready)和等待W(wait)三種狀態之一,并假定初始狀態均為R.。
代碼片段和文件信息
#include?“stdio.h“
#include?“stdlib.h“
#include?“string.h“
#include?“malloc.h“
#include?“time.h“
#define?getpch(type)?(type*)malloc(sizeof(type))?//控制輸入流
#define?NULL?0?
struct?pcb{?/*?定義進程控制塊PCB?*/?
char?name[10];?//進程名
char?state;?//進程狀態
int?super;?//進程優先級
struct?pcb*?next;?
}*ready=NULL?*p;//ready表示就緒隊列,p表示當前要插入的隊列
typedef?struct?pcb?PCB;?
void?sort();
void?create()??/*手動輸入進程*/
{????
???int?inum;?
???system(“CLS“);?//清屏?
???printf(“\n?請輸入進程數:“);?
???scanf(“%d“&num);?
???for(i=0;i ?{?
??p=getpch(PCB);?
??printf(“\n?輸入進程名:“);?
??scanf(“%s“p->name);?
??printf(“\n輸入進程優先數:“);?
??scanf(“%d“&p->super);?
??printf(“\n進程狀態:?R“);
??printf(“\n“);?
??p->state=‘W‘;?//當前要插入就緒隊列的進程控制塊處于等待狀態
??p->next=NULL;?
??sort();?//調用sort函數
}????
}?
void?sort()?/*?建立對進程進行優先級排列函數*/?
{?
PCB?*first?*second;?
int?flag=0;?//flag標志,flag=0表示將進程插入到就緒隊列首后面
if((ready==NULL)||((p->super)>(ready->super)))?/*優先級最大者插入隊首*/?
{?
p->next=ready;?
ready=p;?
}?
else?/*?進程比較優先級插入適當的位置中*/?
{?
first=ready;?
second=first->next?;
while(second!=NULL)?
{?
if((p->super)>(second->super))?/*若插入進程比當前進程優先數大插入到當前進程前面*/
{??
p-
- 上一篇:最好用的MFC改名工具
- 下一篇:圖像處理算法源代碼,用C語言完成
評論
共有 條評論