作業系統程序排程實驗報告

2021-08-13 13:23:47 字數 5055 閱讀 9874

哈爾濱工業大學電腦科學與技術學院

實驗報告

課程名稱: 作業系統

課程型別:必修

實驗專案名稱: 程序排程

實驗題目: 先來先服務和優先順序排程的實現

班級:學號:

姓名:一、實驗目的

二、實驗要求及實驗環境

由於在多道程式或多個任務系統中,系統同時處於就緒狀態的程序有若干個,即能執行的程序數遠大於處理機個數,為了使系統中的個程序能有條不紊的進行,必須選用某種排程策略,以選擇程序占用處理機。通過設計模擬單處理機的排程演算法,以鞏固和加深處理機的排程的概念。

三、設計思想(本程式中的用到的所有資料型別的定義,主程式的流程圖及各程式模組之間的呼叫關係)

1.邏輯設計

(1)先來先服務

<1>初始化:使用者輸入程序數目,到達時間,執行時間,把它按照到達時間插入就緒佇列。

<2>排程:如果程序的到達時間比當前的系統時間早,而且他處於就緒佇列的第乙個,那麼它就是最早到達的程序,他獲得處理機,並且一直占用,直到執行結束。當所有程序執行結束的時候排程完成。

2)優先順序:

〈1〉初始化:使用者輸入程序數目,到達時間,執行時間,把它按照優先順序插入就緒佇列。

〈2〉排程:如果有就緒程序。首先取出當前就緒佇列的第乙個程序,它的優先順序最高,把它從就緒佇列裡面取出,插入執行佇列,允許他執行乙個時間片,這時系統時間加一,該程序的優先順序也加一,表示優先順序下降,如果現在他執行完成,那麼把它插入完成佇列,否則插入就緒佇列。

繼續排程,直至所有程序全部完成。

2.物理設計

(1)pcb表:

struct pcb;

(2)在pcb上面進行的操作:

//按照優先順序初始化

void init();

//是否存在就緒的程序

bool exist(pcb* ready);

//按優先順序把程序插入佇列的函式

void insert(pcb* temp,pcb* temp1);

//按先來先服務把程序插入佇列的函式

void insert1(pcb* temp,pcb* temp1);

//按照優先排程函式

void scheduler();

//列印這個佇列的函式

void print(pcb* temp);

//判斷是否有改變

bool changed(int a,int b);

//按照先來先服務初始化

void init1();

//先來先服務排程

void scheduler1();

四、測試結果

(1)先來先服務:

fcfs input 1,fpfs input 2:1

how many process? 3

process 1:

input id: 1

input arrivetime: 1

input runtime: 5

process 2:

input id: 2

input arrivetime: 4

input runtime: 7

process 3:

input id: 3

input arrivetime: 3

input runtime: 5

current time is 1

process 1 starts.

ready processs are:process 3, process 2,

current time is 6

process 1 is done.

ready processs are:process 3, process 2,

current time is 6

process 3 starts.

ready processs are:process 2,

current time is 11

process 3 is done.

ready processs are:process 2,

current time is 11

process 2 starts.

current time is 18

process 2 is done.

press any key to continue

(2)優先順序:

fcfs input 1,fpfs input 2:2

how many process? 3

process 1:

input id: 1

input priority: 2

input runtime: 5

process 2:

input id: 2

input priority: 1

input runtime: 6

process 3:

input id: 3

input priority: 5

input runtime: 4

current time is 1

process 2 starts.

ready processs are:process 1, process 3,

current time is 2

process 1 starts.

ready processs are:process 2, process 3,

current time is 3

process 2 starts.

ready processs are:process 1, process 3,

current time is 4

process 1 starts.

ready processs are:process 2, process 3,

current time is 5

process 2 starts.

ready processs are:process 1, process 3,

current time is 6

process 1 starts.

ready processs are:process 2, process 3,

current time is 7

process 2 starts.

ready processs are:process 3, process 1,

current time is 8

process 3 starts.

ready processs are:process 1, process 2,

current time is 9

process 1 starts.

ready processs are:process 2, process 3,

current time is 10

process 2 starts.

ready processs are:process 3, process 1,

current time is 11

process 3 starts.

ready processs are:process 1, process 2,

current time is 12

process 1 is done.

ready processs are:process 2, process 3,

current time is 13

process 2 is done.

ready processs are:process 3,

current time is 15

process 3 is done.

press any key to continue

五、系統不足與經驗體會

系統不足:

(1)沒有從檔案讀入和輸出,輸入比較複雜。

體會:(1)深刻理解了優先順序演算法和先來先服務演算法。

(2)理解了系統排程的基本流程。

六、附錄:源**(帶注釋)

#include

using namespace std;

//定義pcb結構

struct pcb;

int current=0;

int num;

pcb* ready;

pcb* running;

pcb* done;

//按照優先順序初始化

void init();

//是否存在就緒的程序

bool exist(pcb* ready);

//按優先順序把程序插入佇列的函式

void insert(pcb* temp,pcb* temp1);

//按先來先服務把程序插入佇列的函式

void insert1(pcb* temp,pcb* temp1);

//按照優先排程函式

void scheduler();

//列印這個佇列的函式

void print(pcb* temp);

//判斷是否有改變

bool changed(int a,int b);

//按照先來先服務初始化

void init1();

//先來先服務排程

void scheduler1();

int main()

return 0;

}void init(){

//就緒佇列置空

ready= new pcb;

ready->next=null;

ready->priority=0;

//執行佇列置空

running = new pcb;

running->next=null;

//完成佇列置空

done= new pcb;

done->next=null;

//temp用來儲存輸入的程序

pcb* temp;

//輸入程序數

cout<<"how many process? ";

cin>>num;

int cnt;

//輸入程序資訊,並將其插入就緒佇列

for(cnt=1;cnt<=num;cnt++){

作業系統程序排程實驗報告

實驗一程序排程實驗 專業 xx 學號 xx 姓名 實驗日期 20xx年xx月xx日 一 實驗目的 通過對程序排程演算法的模擬加深對程序概念和程序排程演算法的理解。二 實驗要求 編寫程式實現對5個程序的排程模擬,要求至少採用兩種不同的排程演算法分別進行模擬排程。三 實驗方法內容 1.演算法設計思路 將...

作業系統實驗報告 程序排程 作業排程等

作業系統實驗報告 1 程序排程 2 作業排程 3 主存空間的分配和 4 檔案系統 學生學院 計算機學院 專業班級 網路工程 3 班 學號 3107007062 學生姓名 張菲 指導教師 胡欣如 2009 年 12 月 20 日 計算機學院網路工程專業 3 班 組 學號 3107007062 姓名張菲...

作業系統實驗報告 單處理機系統的程序排程

實驗二單處理機系統的程序排程 一 實驗目的 1 加深對程序概念的理解,明確程序與程式的區別。2 深入了解系統如何組織程序 建立程序。3 進一步認識如何實現處理機排程。二 實驗內容 編寫程式完成單處理機系統中的程序排程,要求採用時間片輪轉排程演算法。三 實驗原理 在早期的時間片輪轉法中,系統將所有的就...