作業系統程序排程演算法實現2

2021-08-31 16:00:45 字數 4378 閱讀 6391

實驗三 程序排程

一、實驗目的

1、 理解有關程序控制塊、程序佇列的概念。

2、 掌握程序優先權排程演算法和時間片輪轉排程演算法的處理邏輯。

二、實驗內容與基本要求

1、 設計程序控制塊pcb的結構,分別適用於優先權排程演算法和時間片輪轉排程演算法。

2、 建立程序就緒佇列。

3、 編制兩種程序排程演算法:優先權排程演算法和時間片輪轉排程演算法。

三、實驗報告要求

1、 優先權排程演算法和時間片輪轉排程演算法原理。

2、 程式流程圖。

3、 程式及注釋。

4、 執行結果以及結論。

四、實驗報告

1.時間片輪轉排程演算法(round robin)

a.在時間片演算法中,無法對程序的緊急程度加以區分。而優先順序演算法正好可以解決這一問題。

b.程序優先順序的確定同樣重要。程序優先順序可以分為靜態優先順序和動態優先順序。靜態優先順序是在程序建立初期就被確定的值,此後不再更改。動態優先順序指程序在建立時被賦予乙個初值,此後其值會所程序的推進或等待時間的增加而改變。

c.用c語言模擬排程程式時,可用run->prio -= 3; /*優先順序減去三,若設為0則優先順序不變*/ 這條語句控制靜態動態優先順序的切換。

3.程式流程圖 

4.程式**及注釋

#include

#include

#include

typedef struct node    

pcb;    

pcb *ready=null,*run=null,*finish=null; /*定義三個佇列,就緒佇列,執行佇列和完成佇列*/    

int num;    

void getfirst();    /*從就緒佇列取得第乙個節點*/    

void output();     /*輸出佇列資訊*/    

void insertprio(pcb *in);  /*建立優先順序佇列,規定優先數越小,優先順序越高*/    

void inserttime(pcb *in);  /*時間片佇列*/    

void insertfinish(pcb *in);  /*時間片佇列*/    

void priocreate();    /*優先順序輸入函式*/    

void timecreate();    /*時間片輸入函式*/    

void priority();    /*按照優先順序排程*/    

void roundrun();    /*時間片輪轉排程*/    

int main(void)    

output();    

return 0;    

}    

void getfirst()  /*取得第乙個就緒佇列節點*/    

}    

void output()    /*輸出佇列資訊*/    

p = finish;    

while(p!=null)    

p = run;    

while(p!=null)    

}    

void insertprio(pcb *in) /*建立優先順序佇列,規定優先數越小,優先順序越低*/    

else     /*查到合適的位置進行插入*/    

else    

if(fst ->next == null) /*已經搜尋到隊尾,則其優先級數最小,將其插入到隊尾即可*/    

else     /*插入到佇列中*/    

}    

}    

}    

void inserttime(pcb *in)  /*將程序插入到就緒佇列尾部*/    

else    

in ->next = fst ->next;    

fst ->next = in;    

}    

}    

void insertfinish(pcb *in)  /*將程序插入到完成佇列尾部*/    

else    

in ->next = fst ->next;    

fst ->next = in;    

}    

}    

void priocreate() /*優先順序排程輸入函式*/    

else   /*將程序狀態置為w,入就緒佇列*/    

}    

flag = 1;    

getfirst();    /*繼續取就緒佇列隊頭程序進入執行佇列*/    

}    

}    

void roundrun()    /*時間片輪轉排程演算法*/    

else if(run->count == run->round)/*時間片用完*/    

}    

flag = 1;    

getfirst();    

}    

}12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

2930

3132

3334

3536

3738

3940

4142

4344

4546

4748

4950

5152

5354

5556

5758

5960

6162

6364

6566

6768

6970

7172

7374

7576

7778

7980

8182

8384

8586

8788

8990

9192

9394

9596

9798

99100

101102

103104

105106

107108

109110

111112

113114

115116

117118

119120

121122

123124

125126

127128

129130

131132

133134

135136

137138

139140

141142

143144

145146

147148

149150

151152

153154

155156

157158

159160

161162

163164

165166

167168

169170

171172

173174

175176

177178

179180

181182

183184

185186

187188

189190

191192

193194

195196

197198

199200

201202

203204

205206

207208

209210

211212

213214

215216

217218

219220

221222

223224

225226

227228

229230

231232

233234

235236

237238

239240

241242

243244

245246

247248

249250

251252

253254

255256

257258

259260

261262

263264

265266

267268

269270

271272

273274

275276

五.程式執行驗證

1.rr演算法 

2.動態優先順序演算法 

作業系統程序排程演算法實現

bug好多,待完善 include include include enum state define max size 100 typedef struct process pcb pcb typedef struct sqqueue sqqueue initqueue return q int ...

作業系統 程序排程演算法

cpu利用率 cpu忙碌的時間佔總時間的比例 利 用率 忙碌的 時間總時 間利用率 frac 利用率 總時 間忙碌的 時間 系統吞吐量 單位時間完成作業或程序的數量 吞 吐量 完成的 作業數量 總時 間吞吐量 frac 吞吐量 總時 間完成的 作業數量 周轉時間 完成作業需要花費的總時間 周 轉時 ...

作業系統 程序管理2 程序排程

1.評價排程演算法的主要指標 2.常見的排程演算法 fifo 先來先服務演算法 基本思想按照作業進入就緒佇列的順序,選擇先到的作業被cpu排程。假如作業的長度比較平均,效果不錯,但是 如果長作業比較多先到就緒佇列就會導致響應時間 周轉時間比較長。屬於非搶占策略 優點 實現簡單 缺點 效果不怎樣好。s...