操作系統(tǒng)實驗一內(nèi)容2——用C語言編寫進(jìn)程調(diào)度程序-創(chuàng)新互聯(lián)

實驗說明: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)

商城網(wǎng)站建設(shè)