程序排程 模擬程序排程的過程

2021-06-21 22:40:06 字數 2462 閱讀 9765

通過這次實驗,理解程序排程的過程,進一步掌握程序狀態的轉變、程序排程的策略,進一步體會多道程式併發執行的特點,並分析具體的排程演算法的特點,掌握對系統效能的評價方法。

編寫程式模擬實現程序的輪轉法排程過程,模擬程式只對pcb進行相應的排程模擬操作,不需要實際程式。假設初始狀態為:有n個程序處於就緒狀態,有m個程序處於阻塞狀態。採用輪轉法程序排程演算法進行排程(排程過程中,假設處於執行狀態的程序不會阻塞),且每過t個時間片系統釋放資源,喚醒處於阻塞佇列隊首的程序。

程式要求如下:

1)輸出系統中程序的排程次序;

2)計算cpu利用率。

windows作業系統、vc++6.0

c語言1)  程式中程序可用pcb表示,其型別描述如下:

struct  pcb_type

2)  設定兩個佇列,將處於「就緒」狀態的程序pcb掛在佇列ready中;將處於「阻塞」狀態的程序pcb掛在佇列blocked中。佇列型別描述如下:

struct  queuenode

並設全程量:

struct  queuenode  *ready_head=null,       //ready佇列隊首指標

*ready_tail=null ,       //ready佇列隊尾指標

*blocked_head=null,    //blocked佇列隊首指標

*blocked_tail=null;     //blocked佇列隊尾指標

3)設計子程式

start_state();//讀入假設的資料,設定系統初始狀態

dispath();//模擬排程

calculate();//計算cpu利用率

這個實驗花了我兩次課的時間,新手程式寫出來倒是很快,但是中途出現各種bug,但是經過堅持不懈的努力最後還是解決了,yeah

廢話不多說,直接上**

/*

* 功能:程序排程

*/#include#include#include#includeusing namespace std;

struct pcb_type

;typedef struct queuenode //佇列鍊錶

*queuelink;

//設定全程變數

struct queuenode *ready_head=null, //ready佇列隊首指標

*ready_tail=null , //ready佇列隊尾指標

*blocked_head=null, //blocked佇列隊首指標

*blocked_tail=null; //blocked佇列隊尾指標

int t; //定義乙個全域性變數個時間片系統釋放資源,喚醒處於阻塞佇列隊首的程序

//設定相應的子程式

void start_state() //讀入假設的資料,設定系統初始狀態

//初始化阻塞佇列的全程變數

blocked_head=blocked_tail=p2;

//吧blocked佇列鍊錶建立好

for(i=0 ; inext=null;

p->pcb.state=0; //程序狀態 2--表示"執行"狀態 1--表示"就緒"狀態 0--表示"阻塞"狀態

scanf("%d,%d",&p->pcb.pid,&p->pcb.cpu_time);

// cout<

blocked_tail=p; //吧表尾指標指向新的表尾 }}

float use_cpu=0,unuse_cpu=0; //use_cpu記錄cpu執行時間,unuse_cpu記錄cpu空閒時間,x用來計數是否該喚醒阻塞佇列了

void dispath( ) //模擬排程

else

}else}}

else //程序狀態 2--表示"執行"狀態 1--表示"就緒"狀態 0--表示"阻塞"狀態

x++; //執行過後吧用掉的時間加上,這裡每次為一

if(x==t && blocked_head != blocked_tail) //到時候向就緒佇列送節點,且阻塞佇列不為空

else //如果是只剩下最後乙個節點

}printf("\n");

}}void calculate() //計算cpu利用率

void main()

{ start_state();

// cout

經過這次學習,我懂得了,鍊錶設定頭指標的好處,以及尾指標的特殊情況要考慮的地方。

程序排程模擬

實驗平台 windows 7,vs2010 實驗目標 模擬短作業優先演算法,時間片輪轉演算法,和優先數演算法,並動態畫出grant圖,計算每個程序的響應時間和周轉時間 資料結構 class process fin.close void sjf void void preemptive sjf int...

程序排程模擬

程序排程模擬程式 本程式來自一位,她寫了大部分 可是錯誤太多,漏洞百出,不盡人意,下面是我修改後的。希望用到的人可以多多參考,看了的人給些意見!include include include include include define true 1 define false 0 define re...

程序排程模擬演算法

1.先進先出排程。程序按申請進入記憶體的時間執行。2.優先順序排程。程序按作業系統分配的優先順序,執行。3.時間輪轉排程。程序按申請進入記憶體的時間依次執行乙個時間片。4.分級排程。時間輪轉排程 優先順序排程。先執行優先順序較高的按時間輪轉排程的方法執行,在執行優先順序較低的。a.設計程序控制塊pc...