一、目的和要求
程序排程是處理機管理的核心內容。本實驗要求用高階語言編寫模擬程序排程程式,以便加深理解有關程序控制快、程序佇列等概念,並體會和了解優先數演算法和時間片輪轉演算法的具體實施辦法。
二、實驗內容
1.設計程序控制塊pcb的結構,通常應包括如下資訊:
程序名、程序優先數(或輪轉時間片數)、程序已占用的cpu時間、程序到完成還需要的時間、程序的狀態、當前佇列指標等。
2.編寫兩種排程演算法程式:
優先數排程演算法程式
迴圈輪轉排程演算法程式
3.按要求輸出結果。
三、提示和說明
分別用兩種排程演算法對伍個程序進行排程。每個程序可有三種狀態;執行狀態(run)、就緒狀態(ready,包括等待狀態)和完成狀態(finish),並假定初始狀態為就緒狀態。
(一)程序控制塊結構如下:
name——程序標示符
prio/round——程序優先數/程序每次輪轉的時間片數(設為常數2)
cputime——程序累計占用cpu的時間片數
needtime——程序到完成還需要的時間片數
state——程序狀態
next——鏈指標
注:1.為了便於處理,程式中程序的的執行時間以時間片為單位進行計算;
2.各程序的優先數或輪轉時間片數,以及程序執行時間片數的初值,均由使用者在程式執行時給定。
(二)程序的就緒態和等待態均為鍊錶結構,共有四個指標如下:
run——當前執行程序指標
ready——就需佇列頭指標
tail——就需佇列尾指標
finish——完成佇列頭指標
(三)程式說明
1. 在優先數演算法中,程序優先數的初值設為:
50-needtime
每執行一次,優先數減1,cpu時間片數加1,程序還需要的時間片數減1。
在輪轉法中,採用固定時間片單位(兩個時間片為乙個單位),程序每輪轉一次,cpu時間片數加2,程序還需要的時間片數減2,並退出cpu,排到就緒佇列尾,等待下一次排程。
2. 程式的模組結構提示如下:
整個程式可由主程式和如下7個過程組成:
(1)insert1——在優先數演算法中,將尚未完成的pcb按優先數順序插入到就緒佇列中;
(2)insert2——在輪轉法中,將執行了乙個時間片單位(為2),但尚未完成的程序的pcb,插到就緒佇列的隊尾;
(3)firstin——排程就緒佇列的第乙個程序投入執行;
(4)print——顯示每執行一次後所有程序的狀態及有關資訊。
(5)create——建立新程序,並將它的pcb插入就緒佇列;
(6)prisch——按優先數演算法排程程序;
(7)roundsch——按時間片輪轉法排程程序。
主程式定義pcb結構和其他有關變數。
(四)執行和顯示
每次顯示結果均為如下5個字段:
name cputime needtime priority state
注:1.在state欄位中,"r"代表執行態,"w"代表就緒(等待)態,"f"代表完成態。
2.應先顯示"r"態的,再顯示"w"態的,再顯示"f"態的。
3.在"w"態中,以優先數高低或輪轉順序排隊;在"f"態中,以完成先後順序排隊。
排程演算法(時間片輪轉 優先順序排程 多級反饋佇列)
排程演算法 1 時間片輪轉排程演算法 rr 2 優先順序排程演算法 3 多級反饋佇列排程演算法 tips 各種排程演算法的學習思路 1.演算法思想 2.演算法規則 3.這種排程演算法是用於作業排程還是程序排程?4.搶占式?非搶占式?5.優點和缺點 6.是否會導致飢餓 1 演算法思想 公平地 輪流地為...
cpu優先順序排程演算法和時間片演算法模擬程式
system shedule algorithm include the priority first algorithm and the time slice algorithm version 2.0 author chillycreator include include include us...
時間片輪轉排程演算法
include define max 10 struct task struct tasks max int counter 實際程序個數 int time counter 0 int poutput 排程結果輸出 int time int charge 判斷是否所有的程序都被執行過 int tim...