1.實驗目的
在多道程式或多工系統中,系統回時處於就緒態的程序有若干個,為使系統中
的各程序能有條不素地執行,必須選擇某種排程策略,以選擇一程序占用處理機。
要求學生設計乙個模擬單處理機排程演算法,以鞏固和加探對進念和程序排程演算法的理解。
2.實驗內容
編寫程式完成單處理機系統中的程序排程,要求採用最高優先順序優先排程演算法。具體內容包括
3.實驗指導
程序排程演算法:
採用最高優先順序優先排程演算法(即把處理機分配給優先順序最高的程序)和先來先服務排程演算法,每個程序用乙個程序控制塊(pcb)表示,程序控制塊可以包含以下資訊:程序名、優先數、到達時間、需要執行時間、已用cpu時間,程序狀態等。程序的優先數(表示優先級別)及需要的執行時間可以事先人為描定(也可以隨機數產生),程序的到達時間為程序輸入的時間。程序的執行時間以時間片為單位。
每個程序的狀態可以是就緒w(wait),執行r(run)或完成f( finish)三種狀態之就緒程序獲得cpu後都只能執行乙個時間片,用已占用cpu時間加1來表示,如果執行乙個時間片後,程序的已占用cpu時間已達到所需要的執行時間,則激銷該程序,如果執行乙個時間片後程序的已占用cpu時間還未達到所需要的執行時間,也就是程序還需要繼續執行,此時應將程序的優先數減1(即降低一級),然後把它插入就緒佇列等待cpu。
每進行一次,排程程式都列印一次執行程序,就緒佇列以及各個程序的pcb,以假進
行檢查。重複以上過程,直到所有程序都完成為止。
4.程式例項
#include
"stdio.h"
#include
#include
#define getpch(type)(type *)malloc(sizeof(type))
struct pcb //定義程序控制塊
*ready=
null
,*p;
typedef
struct pcb pcb;
intsort()
//建立對程序進行優先順序排列的函式
else
//程序比較優先順序,插入適當的位置中
else
//插入程序優先級數最低,則插入到隊尾}if
(insert==
0) first->link=p;}}
/* 說明:上述程式首先定義程序控制塊結構,然後對每個程序的優先順序賦初值,完成
優先順序的排序過程,把優先順序大的程序插入就緒隊首,等待cup排程,該實驗完成了
優先順序大者優先排程的原則,從而對程序排程過程加深理解和掌握
*/int
input()
//建立程序控制塊函式
}int
space()
return
(l);
}int
disp
(pcb *pr)
intcheck()
//程序檢視函式
}int
destroy()
//建立程序撤銷函式(程序執行結束,撤銷程序)
已完成.\n"
,p->name )
;free
(p);
}int
running()
//建立程序就緒函式(程序執行時間到,置就緒狀態)
}int
main()
printf
("\n\n程序已經完成.\n");
ch=getchar()
;}
作業系統單處理機排程演算法
在沒有進行程序排程之前,乙個程序始終允許以最大化cpu利用率執行。這種想法比較簡單。也存在時間浪費的問題。比如乙個程序如果要等待i o請求,那麼此時的cpu資源處於空閒狀態,如果沒有搶占或者排程,其他程式就算是計算密集型也要一直等待這個程序請求i o完成並執行結束才可以占用cpu資源。因此,程序排程...
作業系統 處理機管理
計算機的核心是cpu,首先作業系統講的就是對處理器的管理。在處理器管理當中都講了些什麼呢?當然是需要操作需要管理的東西。處理器是用來處理程序的,程序通俗的講就是要幹的活兒。並且處理器屬於獨佔型資源,同一時刻只能處理一件事情。為了能夠讓處理器的利用率發揮到最高,就出現了處理器管理,貌似有點像個人管理,...
作業系統 處理機排程概念
乙個作業被提交後,必須經過處理機排程,才能獲得處理機執行,通常經過三個排程 高階排程 高階排程,長程排程 中級排程 中程排程 低階排程 短程排程 根據某種演算法,把外村上處於後備佇列中的那些作業調入記憶體,排程物件是作業 就是一些程式,資料,還有一些作業說明書。作業需要執行哪些步驟執行完。每乙個步驟...