作業系統實驗報告

2022-09-18 03:21:10 字數 2656 閱讀 6820

深圳大學實驗報告

課程名稱作業系統

實驗專案名稱程序排程

學院軟體學院

專業軟體工程

指導教師梁正平

報告人: 文成學號: 2011150259 班級: 2

實驗時間2013. 04. 27

實驗報告提交時間: 2013. 04. 30

教務處制

一. 實驗目的

模擬在單處理器多程序情況下的處理器排程,幫助學生加深了解處理器排程的工作。該實驗為模擬實驗,不要求建立真正的程序排程。主要目的是編寫程式模擬排程即可。

1、 編寫並除錯乙個模擬的程序排程程式,採用「最高優先數優先」排程演算法對程序進行排程。 「最高優先數優先排程演算法的基本思想是把cpu分配給就緒佇列中優先數最高的程序。嘗試靜態優先數與動態優先數兩種方法:

a) 靜態優先數是指優先數在整個程序執行期間不再改變。優先數可以在資料輸入時指定,也可以根據到達順序、執行時間確定。

b) 動態優先數是指程序的優先數在建立程序時可以給定乙個初始值,並且可以按一定原則修改優先數。例如程序獲得一次cpu後就將其優先數減少1。或者程序等待的時間超過某一時限時增加其優先數的值。

2、 編寫並除錯乙個模擬的程序排程程式,模擬實現多級反饋佇列排程演算法。

3、 編寫並除錯乙個模擬的程序排程程式,模擬實現最低鬆弛度優先演算法。

二. 實驗要求

程式與報告要求:

a) 對上述要求1、2、3,至少要完成一項,鼓勵嘗試多種演算法。

b) 輸出結果要盡量詳細清晰,能夠反映排程後佇列變化,pcb內部變化。

c) 可以選擇在windows或linux環境下編寫、執行程式

d) 鼓勵使用不同的開發工具在不同平台環境上進行開發比較。

在實驗報告中,一方面可以對實驗結果進行分析,一方面可以對各種演算法進行比較,分析它們的優劣,說明各種演算法適用於哪些情況下的排程。

三. 方法、步驟

實驗方法:

統一利用例程中程式的功能和實現過程,進行修改並調式。

實驗步驟:

1. 按照實驗指導的例程,在windows下執行virsual c++6.0。

2. 按照實驗要求編寫程式,內容在下面會有提及。

3. 執行並除錯編寫好的程式,測試其運作過程及結果。

得出實驗結論。

四. 實驗過程及內容

1、 設計乙個有 n個程序共行的程序排程程式。

2、 每個程序有乙個程序控制塊pcb來表示,程序控制塊的格式為:

a) 程序優先數、需要執行時間、到達時間可以事先人為地指定,也可以隨機產生,注意初始化上述數值時要盡量使程序併發執行,而不是按到達時間順序排程。

b) 程序的執行時間以時間片為單位進行計算。

c) 程序狀態分為就緒、執行、完成三種狀態之,分別用w、r、f表示。

3、 程序排程規則如下:

a) 就緒程序獲得 cpu後都只能執行乙個時間片。用已占用cpu時間加1來表示。

b) 如果執行乙個時間片後,程序已占用 cpu時間達到所需要執行時間,則程序完成,撤銷該程序。

c) 如果執行乙個時間片後,程序已占用cpu時間還未達到所需要執行時間,即程序需要繼續執行,將它插入就緒佇列,佇列重新排序,等待cpu。

d) 重複以上過程,直到所要程序都完成為止。

4、演算法流程圖如下:

五. 源程式清單

選擇實現先來先服務和短作業優先演算法

#include<>

#include<>

#define number 5

void main()

cout<<"請依次輸入各個程序的服務時間,並以空格間隔:";

for(i=0;i

cout<<"請輸入n=1選擇fcfs或者n=2選擇sjf或者n=3同時呼叫fcfs和sjf,n=";

cin>>n;

while(n<1||n>3)

struct statedd //宣告結構

;statedd process[number];

int timeflyf=0,timeflys=0;//定義兩個類似於秒錶的變數

int j,k,l,nextprof,nextpros;

// 獲取資料

for(i=0;i

// 獲取最先到達的程序下標first

int first=0;

l=first;

for(i=1;i

process[first].donef=true;

process[first].dones=true;

process[first].wancheng = process[first].fuwu + process[first].daoda;

process[first].wan = process[first].fuwu + process[first].daoda;

timeflyf += process[first].daoda+process[first].fuwu;

timeflys += process[first].daoda+process[first].fuwu;

// 接下去到達的程序

// fcfs

for(j=1;j // circle2

// sjf

for(j=1;j // circle2

float fz=0,fdq=0,sz=0,sdq=0;//

for(i=0;i

作業系統實驗報告

電腦科學與應用系 課程設計報告 作業系統原理 目錄1 題目簡述 2 2 需求分析 2 2.1設計思想 2 2.2要求 2 2.3任務 3 2.4執行環境 3 2.5開發工具 3 3 概要設計與詳細設計 3 3.1系統流程圖 3 3.2演算法流程圖 5 4 編碼與實現 10 4.1資料結構和演算法設計...

作業系統實驗報告

2014 2015 學年第 2 學期 系別計算機學院 專業電腦科學與技術 班級 2014級專公升本 姓名蔡圓圓 學號 1410211014 授課老師趙群禮 實驗一 熟悉linux基本命令及程式設計環境 實驗總結 編寫程式 gedit編輯器 編寫程式 c 存放 gcc linux c程式編譯工具 當前...

作業系統實驗報告

實驗名稱 哲學家就餐問題 班級 通訊1202班 學號 u201213584 姓名 趙越 指導老師 許毅平 一 實驗目的 1.熟練使用vc 6.0編譯環境,除錯並正確執行程式,更加熟練地利用c語言解決問題 2.了解哲學家就餐的基本原理,掌握死鎖的必要條件。3.理解源程式中產生和防止的演算法,及相關視窗...