模擬在單處理器多程序作業系統的cpu排程。本實驗為模擬實驗,不要求實現真正的程序建立與程序排程。主要實現各種排程演算法。
程序pcb結構:識別符號、程序名稱、到達時間、服務時間、剩餘執行時間、已使用時間、程序狀態。其中程序狀態有三種:就緒r,執行e,結束f。
剩餘執行時間和已使用時間兩個屬性用於時間片輪轉演算法和多級反饋佇列演算法。程序每使用完乙個時間片,已使用時間就會增加乙個時間片的長度,剩餘執行時間=服務時間 – 已使用時間。
僅完成了先來先服務演算法的排程和短作業優先演算法:
在linux中因缺少conio包無法執行,可自行修改後 就能執行。我在vc++軟體中執行如下**:
#include "stdio.h"
#include#include#include#include#include #define getpch(type) (type*)malloc(sizeof(type))
typedef struct pcb pcb;
//定義程序控制塊的pdb
struct pcb;
//系統函式
//停頓幾秒
void _sleep(int n)
//按任意鍵繼續
char _keygo()
///使用者函式///
//資料設定區域
int time_unit = 2;//時間片長度
const maxnum = 10;//最大程序數量
int num = 5;//實際程序數量
pcb pcbdata[maxnum] = ,
, ,, ,
};//就緒佇列,存放程序的pcb
int ready[maxnum];
//記錄排序使用哪個數值作為排序物件
int order[maxnum];
//手工輸入資料
void input()
}///排程函式/
//先來先服務演算法
void fcfs()
//氣泡排序
for(i = 0; i< num; i++)
} } printf("--先來先服務演算法排程:非搶占,無時間片---\n");
printf("\n");
temp = pcbdata[ready[0]].time_start;
for(i = 0; i < num; i++)
printf("--------所有程序排程完畢------\n");
}//短作業優先演算法
void sjf()
//氣泡排序
for(i = 0; i< num; i++)
} } temp = pcbdata[ready[0]].time_start;
for(i=0;iname);
printf("識別符號--%d,狀態--%c,到達時間--%d\n",
pr->id,pr->state,pr->time_start);
printf("服務時間--%d,剩餘執行時間--%d,已用時間--%的\n",
pr->time_need,pr->time_left,pr->time_used);
printf("-------------------------\n");
}//像是所有程序pcb
void dis_pcb_all()
//顯示就緒佇列
void dis_ready()
先來先服務演算法執行結果如圖:
從執行結果可以看出,先到先服務演算法是按照到達時間來排程的,到達時間從早到晚分別為:a(0)->b(1)->c(2)->d(3)->e(4)。
短作業優先演算法執行結果如下:
短作業優先思想就是先按照到達時間排序,按照到達時間早晚獲得第乙個排程的程序,以及服務時間,完成時間=開始時間+服務時間。然後在後面幾個程序中尋找開始時間在完成時間之前的程序,在這些程序中再找服務時間最短的程序作為第二個排程的程序,依次類推。
根據演算法可以推出以下步驟:
首先第乙個排程 的程序為a程序,因為到達時間最快。
然後計算a程序的完成時間為0+4=4
然後在bcde程序中找到到達時間小於4的程序,分別為:b c d
然後在b c d程序中找到服務時間最小的:d程序,所以d程序為第二個排程程序。此時完成時間為4+2=6
繼續在b c e程序中找到達時間小於6的程序,分別為:b c e
然後在b c e程序中找到服務時間最小的:b程序,所以b程序為第三個排程程序。此時完成時間為6+3=9
繼續在c e程序中找到達時間小於9的程序,分別為c e
然後在c e程序中找到服務時間最小的 :e程序,所以e程序為第四個排程程序,c程序為最後乙個排程程序。
從**執行結果可看出演算法正確。
作業系統 單處理器排程
長程排程 決定哪乙個程式可以進入系統中處理,控制系統併發度。記憶體和外存之間的排程,頻率低。中程排程 交換功能的一部分,提高記憶體利用率和系統吞吐量,記憶體和外存之間的排程,頻率中等。為了合理處理計算機軟硬體資源,作業系統進行處理器排程。主要的排程演算法有六種,其中fcfs spn無法保證及時接收和...
單處理器程序排程演算法的模擬
include include include include include include using namespace std const int max process number 15 class process void set int id,int arrival,int cpu,...
作業系統模擬實驗 處理器排程 c 模擬
選擇乙個排程演算法,實現處理器排程。本實習模擬在單處理器環境下的處理器排程,加深了解處理器排程的工作。設計乙個按時間片輪轉法實現處理器排程的程式 提示 1 假定系統有5個程序,每個程序用乙個pcb來代表。pcb的結構為 程序名 如q1 q5。指標 把5個程序連成佇列,用指標指出下乙個程序pcb的首位...