實驗一程序排程實驗
專業:***xx
學號:***xx
姓名:***
實驗日期:20xx年xx月xx日
一、實驗目的
通過對程序排程演算法的模擬加深對程序概念和程序排程演算法的理解。
二、實驗要求
編寫程式實現對5個程序的排程模擬,要求至少採用兩種不同的排程演算法分別進行模擬排程。
三、實驗方法內容
1. 演算法設計思路
將每個程序抽象成乙個控制塊pcb, pcb用乙個結構體描述。
構建乙個程序排程類。將程序排程的各種演算法分裝在乙個類中。類中存在三個容器,乙個儲存正在或未進入就緒佇列的程序,乙個儲存就緒的程序,另乙個儲存已完成的程序。
還有乙個pcb例項。主要儲存正在執行的程序。類中其他方法都是圍繞這三個容器可以這個執行中的pcb展開。
主要用到的技術是stl中的vector以維護和儲存程序容器、就緒容器、完成容器。
當程式啟動時,使用者可以選擇不同的排程演算法。然後使用者從控制台輸入各個程序的資訊,這些資訊儲存到程序容器中。程序資訊輸入完畢後,就開始了程序排程,每排程一次判斷就緒佇列是否為空,若為空則系統時間加乙個時間片。
判斷程序容器中是否有新的程序可以加入就緒佇列。
2. 演算法流程圖
主程式的框架:
程序排程過程:
3. 演算法中用到的資料結構
struct fcfs; //定義乙個結構體,裡面包含的有乙個程序相關的資訊
4. 主要的常量變數
vectorm_processqueue;//程序輸入佇列
vectorm_waitqueue;//程序就緒佇列
vectorm_finishqueue;//完成佇列
vector::iterator m_iter;//迭代器
pcb m_runprocess;//執行中的程序
int m_processcount;//程序數
float m_runtime;//執行時間
int m_tagisrun;//是否在執行標誌。表示正在執行,表示沒有
float m_timeslice;//時間片大小
int m_timeslicecount;//指時間片輪轉中一次分到的時間片個數
char m_scheduleralgorithm;//排程演算法
5. 主要模組
void pcbinput();//輸入程序資訊
void pcbsort();//對程序控制塊按照優先順序排序(採用氣泡排序)
void processselect();//若當前就緒佇列不為空則根據選擇的排程演算法開始排程。否則,系統時間加.以等待新的程序到來
void pcbdisplay();//列印當前狀況下。就緒佇列、完成佇列、執行中的程序資訊
void processrun();//程序執行一次。執行時間加個時間片。並判斷程序是否達到完成條件。若是則processstatus='f'.否則為'w';
void processqueueprocess();//檢視當前時間下,有無程序加入。若有則把該程序調入就緒佇列
void processdispatch();//程序分派,程序執行完成後決定程序該進入哪個佇列(就緒、完成)
void timepast()//當前系統時間加個時間片,並檢查是否有新的程序加入
void schedulerstatistics();//排程統計,計算周轉時間等
void fcfs();//先來先服務
void sjf();//最短程序優先排程
void rr();//簡單時間片輪轉
void pd();//最高優先數優先
四、實驗**
#include
#include
#include
using namespace std;
struct fcfs; //定義乙個結構體,裡面包含的有乙個程序相關的資訊
fcfs a[100];
void input(fcfs *p,int n)
}void print(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int n)
cout< printf("\n 具體程序排程資訊:\n");
printf("\t程序名到達時間服務時間開始時間結束時間周轉時間帶權周轉時間\n");
for(k=0;k<=n-1;k++)
void sort(fcfs *p,int n) //排序
void deal(fcfs *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int n) //執行階段
else
p[k].starttime=p[k-1].finishtime;
p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}
for(k=0;k<=n-1;k++)
p[k].zztime=p[k].finishtime-p[k].arrivetime;
p[k].dqzztime=p[k].zztime/p[k].servicetime;
}void fcfs(fcfs *p,int n)
//先來先服務演算法到此結束
作業系統程序排程實驗報告
哈爾濱工業大學電腦科學與技術學院 實驗報告 課程名稱 作業系統 課程型別 必修 實驗專案名稱 程序排程 實驗題目 先來先服務和優先順序排程的實現 班級 學號 姓名 一 實驗目的 二 實驗要求及實驗環境 由於在多道程式或多個任務系統中,系統同時處於就緒狀態的程序有若干個,即能執行的程序數遠大於處理機個...
作業系統實驗報告 程序排程 作業排程等
作業系統實驗報告 1 程序排程 2 作業排程 3 主存空間的分配和 4 檔案系統 學生學院 計算機學院 專業班級 網路工程 3 班 學號 3107007062 學生姓名 張菲 指導教師 胡欣如 2009 年 12 月 20 日 計算機學院網路工程專業 3 班 組 學號 3107007062 姓名張菲...
作業系統實驗報告 單處理機系統的程序排程
實驗二單處理機系統的程序排程 一 實驗目的 1 加深對程序概念的理解,明確程序與程式的區別。2 深入了解系統如何組織程序 建立程序。3 進一步認識如何實現處理機排程。二 實驗內容 編寫程式完成單處理機系統中的程序排程,要求採用時間片輪轉排程演算法。三 實驗原理 在早期的時間片輪轉法中,系統將所有的就...