c语言链表最高响应比优先,操作系统--最高响应比优先调度算法实验报告..doc
操作系統--最高響應比優先調度算法實驗報告.
進程調度一、實驗題目與要求
編寫程序完成批處理系統中的作業調度,要求采用響應比高者優先的作業調度算法。實現具體包括:首先確定作業控制塊的內容和組成方式;然后完成作業調度;最后編寫主函數,對所做工作進行測試。二、總的設計思想及語言環境、工具總的設計思想HRRN)是對FCFS方式和SJF 方式的一種綜合平衡。HRRN調度策略同時考慮每個作業的等待時間長短和估計需要的執行時間長短,從中選出響應比最高的作業投入執行。
響應比R定義如下: R=(W+T)/T=1+W/T
其中T為該作業估計需要的執行時間,W為作業在后備狀態隊列中的等待時間。
每當要進行作業調度時,系統計算每個作業的響應比,選擇其中R最大者投入執行。這樣,即使是長作業,隨著它等待時間的增加,W/T也就隨著增加,也就有機會獲得調度執行。這種算法是介于FCFS和SJF 之間的一種折中算法。由于長作業也有機會投入運行,在同一時間內處理的作業數顯然要少于SJF 法,從而采用HRRN 方式時其吞吐量將小于采用SJF 法時的吞吐量。另外,由于每次調度前要計算響應比,系統開銷也要相應增加。
2、語言環境主存64KB(Memory)(以KB為單位分配)工具三、數據結構與模塊說明(功能與框圖)作業調度的實現主要有兩個問題:一個是如何將系統中的作業組織起來;另一個是如何進行作業調度。
為了將系統中的作業組織起來,需要為每個進入系統的作業建立檔案以記錄和作業相關的信息,例如,作業名、作業所需資源、作業執行時間、作業進入系統的時間、作業信息在存儲器中的位置、指向下一個作業控制塊的指針等信息。這個記錄作業相關信息的數據塊稱為作業控制塊(JCB ),并將系統中等待作業調度的作業控制塊組織成一個隊列,這個隊列稱為后備隊列。當進行作業調度時,從后備隊列中查找選擇作業。
由于實驗中沒有實際作業,作業控制塊中的信息內容只使用了實驗中需要的數據。作業控制塊中首先應該包括作業名;其次是作業所需資源(內存大小、打印機的數量和磁帶機的數量);采用響應比高者優先作業調度算法,為了計算響應比,還需要有作業的估計執行時間、作業在系統中的等待時間;另外,指向下一個作業控制塊的指針必不可少。實驗中,作業控制塊及隊列的數據結構定義如下:
struct task {
}JCB[10];
存放作業控制塊的區域:
#define n 10
JCB jobtable[10];
int jobcount; 將作業控制塊組織成一個隊列,實驗中采用靜態鏈表的方式模擬作業的后備隊列,作業隊列頭指針定義為:int *head;實驗中,內存采用可移動的動態分區管理方法,即只要內存空閑區總和比作業大就可以滿足作業對內存的需求;對打印機和磁帶機這兩種獨占設備采用靜態分配法,即作業執行前必須獲得所需資源,并且執行完才歸還。
采用響應比高者優先調度算法進行調度時,必須計算出系統中所有滿足必要條件作業的響應比,從中選擇響應比最高的一個作業裝入主存儲器分配資源。由于是實驗,所以就將作業控制塊出隊,并輸出作業名代替裝入處存儲器,同時修改系統的資源數量。
四、源程序#include
#include
#include
#include
#include
#include
typedef char string[10]; /* //定義string為含有10個字符元素的字符數組類型*/
struct task {
string name; /*作業號*/
int arrTime; /* 作業到達時間*/
int serTime; /*作業要求服務時間*/
int waiTime; /*等待時間*/
int begTime; /*開始運行時間*/
int finTime; /*結束運行時間*/
int turTime; /*周轉時間*/
int wTuTime; /*帶權周轉時間*/
int priority;/*優先權*/
int finish;/*是否已經完成*/
}JCB[10];
int num;
void input()
{
int i;
system("cls");
printf("\n請輸入作業數量: ");
scanf("%d", &num);
for(i=0;i
{
printf("\n請輸入作業 NO.%d:\n",i);
printf(" 作業名稱: ");
scanf("%s",JCB[i].name);
printf(" 到達時間: ");
scanf("%d",&JCB[i].arrTime);
總結
以上是生活随笔為你收集整理的c语言链表最高响应比优先,操作系统--最高响应比优先调度算法实验报告..doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重庆到泸州有多少公里,重庆到泸州,有火车
- 下一篇: centos6.5离线安装gcc gcc