實驗三 程序排程
一、實驗目的
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...