先來先服務調度算法模擬實驗程序源代碼C語言 - 下載本文

《操作系統》課程綜合性實驗報告

開課實驗室: 2011 年 05 月 17 日 實驗題目 一、實驗目的 進程調度算法程序設計 通過對進程調度算法的模擬,進一步理解進程的基本概念,加深對進程運行狀 態和進程調度過程、調度算法的理解。 二、設備與環境 1. 硬件設備:PC機一臺 2. 軟件環境:安裝Windows操作系統或者Linux操作系統,并安裝相關的程序開發 環境,如C \\C++\\Java 等編程語言環境。 三、實驗內容 (1)用C語言(或其它語言,如Java)實現對N個進程采用某種進程調度算法(如 動態優先權調度)的調度。 (2)每個用來標識進程的進程控制塊PCB可用結構來描述,包括以下字段: ? 進程標識數ID。 ? 進程優先數PRIORITY,并規定優先數越大的進程,其優先權越高。 ? 進程已占用CPU時間CPUTIME。 ? 進程還需占用的CPU時間ALLTIME。當進程運行完畢時,ALLTIME變為0。 ? 進程的阻塞時間STARTBLOCK,表示當進程再運行STARTBLOCK個時間片 后,進程將進入阻塞狀態。 ? 進程被阻塞的時間BLOCKTIME,表示已阻塞的進程再等待BLOCKTIME個 時間片后,將轉換成就緒狀態。 ? 進程狀態STATE。 ? 隊列指針NEXT,用來將PCB排成隊列。 (3)優先數改變的原則: ? 進程在就緒隊列中呆一個時間片,優先數增加1。 ? 進程每運行一個時間片,優先數減3。 (4)為了清楚地觀察每個進程的調度過程,程序應將每個時間片內的進程的情況顯 示出來,包括正在運行的進程,處于就緒隊列中的進程和處于阻塞隊列中的進程。 (5)分析程序運行的結果,談一下自己的認識。 四、實驗結果及分析 1.實驗設計說明 本次實驗采用C語言模擬對N個進程采用先來先服務進程調度算法調度。每個用來標識進程的進程控制塊PCB用結構來描述,包括以下字段: 進程標識數ID[3]、進程名name[10]、進程狀態state、進程到達時間arrivetime、進程開始執行時間starttime、進程執行結束時間finishtime、服務時間servicetime、周轉時間turnaroundtime、帶權周轉時間weightedturnaroundtime、隊列指針next用來將PCB排成隊列。 主要程序流程圖(進程的執行過程): 開始 P=HEAD ; i=0 Y P->STATE==’F’? P=Q;P=P->NEXT; N P=P->NEXT; Y Q->ARRIVETIME > TIME? N Q->STARTTIME=ARRIVETIME Q->STATE=’T’ … … Q->STARTTIME=TIME Q->STATE=’T’ … … i++;輸出執行進程信息 Y i < n ? N 結束

2.實驗代碼 #include\#include\ typedef struct PCB //定義進程控制塊 { char ID[3]; //進程號 char name[10]; //進程名 char state; //運行狀態 int arrivetime; //到達時間 int starttime; //進程開始時間 int finishtime; //進程結束時間 int servicetime; //服務時間 float turnaroundtime;//周轉時間 float weightedturnaroundtime;//帶權周轉時間 struct PCB *next; //指向下個進程 }pcb; int time; //計時器 int n; //進程個數 pcb *head=NULL,*p,*q; //進程鏈表指針 void run_fcfs(pcb *p1) //運行未完成的進程 { time = p1->arrivetime > time? p1->arrivetime:time; p1->starttime=time; printf(\現在時間是%d,開始運行作業%s\\n\ time+=p1->servicetime; p1->state='T'; p1->finishtime=time; p1->turnaroundtime=p1->finishtime-p1->arrivetime; p1->weightedturnaroundtime=p1->turnaroundtime/p1->servicetime; printf(\ 到達時間 開始時間 服務時間 完成時間 周轉時間 帶權周轉時間 \\n\ printf(\ p1->ID,p1->arrivetime,p1->starttime,p1->servicetime,p1->finishtime, p1->turnaroundtime,p1->weightedturnaroundtime); } void fcfs() //找到當前未完成的進程 { int i,j; p=head; for(i=0;istate=='F') { q=p; //標記當前未完成的進程 run_fcfs(q); } p=p->next; } } void getInfo() //獲得進程信息并創建進程 { int num; printf(\作業個數:\ scanf(\ for(num=0;numarrivetime;} if(p->arrivetime < time) time=p->arrivetime; q->next=p; p->starttime=0; p->finishtime=0; p->turnaroundtime=0; p->weightedturnaroundtime=0; p->next=NULL; p->state='F'; q=p; } } void main() { printf(\先來先服務算法模擬\ getInfo(); p=head; fcfs(); } 3.實驗結果 測試用例 進程名 A B C 到達時間 0 1 2 服務時間 1 100 1





海南麻将怎么玩图解 金种子酒股票论坛 金属行情软件哪里下载 大全新能源股票 2019股权重股排名 融资融券股票一览表 股市最新行情 新手玩股票怎么开户 如何炒股票新手入门 股票数据api 创新医疗股票