實驗二 作業排程模擬程式

2022-08-19 23:18:17 字數 3276 閱讀 1229

專業:網路工程一班

姓名:顏超武  學號:201406114310

1. 實驗目的

(1)加深對作業排程演算法的理解;

(2)進行程式設計的訓練。

2.實驗要求

用高階語言編寫乙個或多個作業排程的模擬程式。

單道批處理系統的作業排程程式。作業一投入執行,它就占有計算機的一切資源直到作業完成為止,因此排程作業時不必考慮它所需要的資源是否得到滿足,它所執行的時間等因素。

作業排程演算法:

1) 採用先來先服務(fcfs

)排程演算法,即按作業到達的先後次序進行排程。總是首先排程在系統中等待時間最長的作業。

2) 短作業優先 (sjf)

排程演算法,優先排程要求執行時間最短的作業。

3) 響應比高者優先(hrrn)

排程演算法,為每個作業設定乙個優先權

(響應比

),排程之前先計算各作業的優先權,優先數高者優先排程。

rp (

響應比)

= 作業周轉時間

/ 作業執行時間

=1+作業等待時間

/作業執行時間

每個作業由乙個作業控制塊jcb

表示,jcb

可以包含以下資訊:作業名、提交(到達)時間、所需的執行時間、所需的資源、作業狀態、鏈指標等等。

作業的狀態可以是等待w(

wait

)、執行r(

run)和完成f(

finish

)三種之一。每個作業的最初狀態都是等待w。

一、模擬資料的生成

1.允許使用者指定作業的個數(

2-24

),預設值為5。

2.允許使用者選擇輸入每個作業的到達時間和所需執行時間。

3.(**

)從檔案中讀入以上資料。

4.(**

)也允許使用者選擇通過偽隨機數指定每個作業的到達時間(

0-30

)和所需執行時間(

1-8)。

二、模擬程式的功能

1.按照模擬資料的到達時間和所需執行時間,執行

fcfs, sjf

和hrrn

排程演算法,程式計算各作業的開始執行時間,各作業的完成時間,周轉時間和帶權周轉時間(周轉係數)。

2.動態演示每排程一次,更新現在系統時刻,處於執行狀態和等待各作業的相應資訊(作業名、到達時間、所需的執行時間等)對於

hrrn

演算法,能在每次排程時顯示各作業的響應比

r情況。

3.(**

)允許使用者在模擬過程中提交新作業。

4.(**

)編寫並排程乙個多道程式系統的作業排程模擬程式。 只要求作業排程演算法:採用基於先來先服務的排程演算法。 對於多道程式系統,要假定系統中具有的各種資源及數量、排程作業時必須考慮到每個作業的資源要求。

三、模擬資料結果分析

1.對同乙個模擬資料各演算法的平均周轉時間,周轉係數比較。

2.(**

)用曲線圖或柱形圖表示出以上資料,分析演算法的優點和缺點。

根據指定的實驗課題,完成設計、編碼和除錯工作,完成實驗報告。

可以採用tc

,也可以選用

windows

下的利用各種控制項較為方便的vb,

vc等視覺化環境。也可以自主選擇其他實驗環境。

#include

#include

#define getpch(type) (type*)malloc(sizeof(type))    //為程序建立乙個空間

struct worktime;

struct jcb *ready=null,*p;

typedef struct jcb jcb;

float t=0;

int n;

jcb *front,*rear;        //時間輪轉法變數

void sort()    

else

else

}if (insert==0) first->link=p;}}

void sjfget()

else

rear=rear->link;

}if (ipmove==1)

ready=mintime;

}void hrnget()

else

rear=rear->link;

if (ipmove==1)

ready=mintime;

}void creatjcb() //為每個作業建立乙個

jcb並初始化形成乙個迴圈鏈佇列

rear=l;rear->link=front;

}void output()//程序輸出函式

printf("\n");

}int judge(jcb *p) //判斷所有程序執行結束

p=p->link;

}return flag;

}void rrget()//時間片輪轉演算法

if(s->state=='e'&&s->flag==0)

s=s->link;

flag1=judge(s);

}printf("--------------------------------------------\n");

}void input()

}int space()

return(l);

}void disp(jcb* jr,int select)

printf("\n");

}int destroy()

void check(int select)

destroy();

}void running(jcb* jr)

int main()

else

printf("\n\n 作業已經完成

.\n");

%.2f\n",sumti/h);

%.2f\n",sumwi/h);

getchar();}}

總結

其實這個作業對我來說真的很難,編這個程式的想法我覺得我是沒有問題的,我知道乙個思想,這個演算法真比上乙個作業難,但是在程式設計序的時候我無從下手。比如輸入作業數,乙個作業乙個作業的要錄入,採用資料結構的方法還是指標?這會擾亂思路。想好了,開始程式設計了,要從哪一步開始?不過,各種演算法的程式設計就真的不會,先來先服務理解起來還可以,其他就相對複雜,很難理解。ps:

**不是自己的,起先還有自己的,演算法都是別人的,先來先服務演算法還可以理解,其他很難理解。

實驗二 作業排程模擬程式

實驗二作業排程模擬程式 1.實驗目的 1 加深對作業排程演算法的理解 2 進行程式設計的訓練。2 實驗要求 用高階語言編寫乙個或多個作業排程的模擬程式。單道批處理系統的作業排程程式。作業一投入執行,它就占有計算機的一切資源直到作業完成為止,因此排程作業時不必考慮它所需要的資源是否得到滿足,它所執行的...

實驗二 作業排程模擬程式

include includetypedef struct process fcfsfcfs fcfs p,q,head null struct process fcfs a 100 fcfs inital struct process fcfs a,int n void print struct ...

實驗二 作業排程模擬程式

實驗二 作業排程模擬程式 施振成 201306104124 一 目的和要求 1.實驗目的 1 加深對作業排程演算法的理解 2 進行程式設計的訓練。2 實驗要求 用高階語言編寫乙個或多個作業排程的模擬程式。單道批處理系統的作業排程程式。作業一投入執行,它就占有計算機的一切資源直到作業完成為止,因此排程...