實驗說明:FZU的操作系統(tǒng)課程的實驗一
創(chuàng)新互聯(lián)主營蘇州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件定制開發(fā),蘇州h5成都微信小程序搭建,蘇州網(wǎng)站營銷推廣歡迎蘇州等地區(qū)企業(yè)咨詢
實驗?zāi)康?/p>
實驗內(nèi)容
實驗要求
流程圖
下面是C語言代碼(個人所做,不保證完美無漏洞,僅供參考,杜絕無腦照搬)【粉絲專享注釋代碼】
#include#includetypedef struct process{int need;//需要時間 (1+)
int priority;//優(yōu)先級(0-99)
char name[20];//名字(20以內(nèi))
int run;//已運(yùn)行
}Process;
typedef struct PCB * Link;
typedef struct PCB{Link next;
Process * pro;
}PCB;
int main(){int N;//進(jìn)程數(shù)
int NEEDS;//總需要的時間片
Link l;//鏈表頭指針
printf("\n請輸入進(jìn)程總個數(shù)?");
scanf("%d",&N);
Process p[N];//創(chuàng)建進(jìn)程
Link pcbhead =(Link)malloc (sizeof (PCB));
pcbhead->next = NULL;
pcbhead->pro = NULL;
printf("\n已創(chuàng)建進(jìn)程數(shù)為%d信息的空間",N);
int i=0;//循環(huán)變量
int j;//循環(huán)變量
//輸入信息
while(i++printf("\n\n進(jìn)程號No.%d:\n\n輸入進(jìn)程名(長度為20的字符內(nèi)):",i-1);
scanf("%s",&p[i-1].name);
printf("\n輸入進(jìn)程優(yōu)先數(shù)(0~99):");
scanf("%d",&p[i-1].priority);
printf("\n輸入進(jìn)程運(yùn)行時間(自然數(shù)):");
scanf("%d",&p[i-1].need);
p[i-1].run = 0;
NEEDS+=p[i-1].need;
//創(chuàng)建鏈表
Link t = (Link)malloc (sizeof (PCB));//新增節(jié)點(diǎn)
l = pcbhead;
t->next = NULL;
t->pro = &p[i-1];
if(l->pro == NULL){ l->next = t->next;
l->pro = t->pro;
// printf("賦值表頭");
}
else{ Link ht = NULL;
int isinsert = 0;
for(l= pcbhead;l;ht=l,l = l->next){ if(l->pro->priority >= p[i-1].priority)continue;
if(ht == NULL){t->next=pcbhead;
pcbhead=t;
// printf("\n插入表頭前");
}
else{t->next = ht->next;
// printf("\n插入表中");
ht->next=t;
}
isinsert = 1;
break;
}
if(isinsert == 0){ t->next = ht->next;
// printf("\n插入表后");
ht->next=t;
}
}
}
printf("\n");
// printf("\n序列目前如下\n");
// //處理編排就緒隊列
// for(l= pcbhead;l;l = l->next){// printf("%s\n",l->pro->name);
// }
//過程
i = 0;
l=pcbhead;
while(i++printf("\n輸入任意按鍵繼續(xù)...");
getch();
printf("\n *-*-*-*-*-*-*-* The execute number: %d *-*-*-*-*-*-*-\n",i);
printf("\n *-*-*-*-* 當(dāng)前正在運(yùn)行的進(jìn)程是: %s *-*-*-*-*\n",l->pro->name);
printf("p_name\tstate\tsuper\tndtime\truntime\n");
printf("%s\t%s\t%d\t%d\t%d\n",l->pro->name,"R",l->pro->priority,l->pro->need,l->pro->run);
//就緒隊列
Link lt = l;
printf("\n *-*-*-*-* 當(dāng)前就緒隊列狀態(tài)為: *-*-*-*-*\n");
for(lt=lt->next;lt;lt=lt->next){ printf("\np_name\tstate\tsuper\tndtime\truntime\n");
printf("%s\t%s\t%d\t%d\t%d\n",lt->pro->name,"w",lt->pro->priority,lt->pro->need,lt->pro->run);
}
//更新PCB
if(l->pro->priority>0)l->pro->priority--;
l->pro->run++;
//刷新隊列
if(l->pro->run == l->pro->need){ //運(yùn)行完畢釋放
printf("\n時間片到期,此時進(jìn)程 [%s] 已完成.",l->pro->name);
lt=l;
l=l->next;
free(lt);
}
else{ //若不為最后一個則取出插入
if(l->next){ lt=l;
Link ht = NULL;
l=l->next;
Link ll;//循環(huán)指針
int isinsert = 0;//是否在循環(huán)中插入
for(ll=l;ll;ht=ll,ll = ll->next){if(ll->pro->priority >= lt->pro->priority)continue;
if(ht == NULL){lt->next=l;
l=lt;
// printf("\n插入表頭前");
}
else{lt->next = ht->next;
// printf("\n插入表中");
ht->next=lt;
}
isinsert = 1;
break;
}
if(isinsert == 0){lt->next = ht->next;
// printf("\n插入表后");
ht->next=lt;
}
}
}
}
if(N>0){printf("\n\n\n進(jìn)程已全部完成.\n");
getch();
}
return 0;
}
程序流程圖
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
文章名稱:操作系統(tǒng)實驗一內(nèi)容2——用C語言編寫進(jìn)程調(diào)度程序-創(chuàng)新互聯(lián)
URL標(biāo)題:http://muchs.cn/article38/cddisp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、建站公司、面包屑導(dǎo)航、全網(wǎng)營銷推廣、網(wǎng)站內(nèi)鏈、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容