作業系統程序優先順序排程實驗

2021-07-24 10:53:25 字數 1404 閱讀 2946

[目的要求]

用高階語言編寫和除錯乙個程序排程程式,以加深對程序的概念及程序排程演算法的理解. [

準備知識]

一、基本概念 1

、程序的概念; 2

、程序的狀態和程序控制塊;

3、程序排程演算法

[

試驗內容

]

設計乙個有

n個程序共行的程序排程程式。

程序排程演算法:採用最高優先數優先的排程演算法(即把處理機分配給優先數最高的程序)和先來先服務演算法。每個程序有乙個程序控制塊(

pcb)表示。程序控制塊可以包含如下資訊:程序名、優先數、到達時間、需要執行時間、已用

cpu時間、程序狀態等等。

程序的優先數及需要的執行時間可以事先人為地指定(也可以由隨機數產生)。程序的到達時間為程序輸入的時間。程序的執行時間以時間片為單位進行計算。每個程序的狀態可以是就緒w(

wait

)、執行r(

run)、或完成f(

finish

)三種狀態之一。就緒程序獲得

cpu後都只能執行乙個時間片。用已占用

cpu時間加

1來表示。如果執行乙個時間片後,程序的已占用

cpu時間已達到所需要的執行時間,則撤消該程序,如果執行乙個時間片後程序的已占用

cpu時間還未達所需要的執行時間,也就是程序還需要繼續執行,此時應將程序的優先數減

1(即降低一級),然後把它插入就緒佇列等待

cpu。每進行一次排程程式都列印一次執行程序、就緒佇列、以及各個程序的

pcb,以便進行檢查。

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

#include#includestruct list

;struct list * creat()

p=(struct list *)malloc((sizeof(struct list)));

p->next=p1;

p1=p;

return p1;

};void run(struct list *p)

p1=p;

while(1)

}p1=p;

while(1)

p1->cpt++;

p1->p--;

printf("正在執行程序: %s\n",p1->name);

if(p1->cpt==p1->runt)

p4=p;

while(1)

p4=p;

while(1)

p3=p->next;

if(p3==null)

break;

printf("就緒佇列:\n");

while(1)

}}int main()

作業系統實驗 程序排程(不可搶占式動態優先順序)

include include include using namespace std 不可搶占式動態優先順序 若正在執行的程序時間片用完就轉為就緒狀態,占用一次cpu優先順序 1 就緒佇列中等待的佇列,每等待cpu執行完乙個時間片,優先順序 1 列舉程序的狀態 就緒 執行 阻塞 完成 enum s...

作業系統 優先順序反轉 優先順序繼承

優先順序反 準確來說,指的是一種現象,並非一項任務排程技術,即高優先順序任務被低優先順序任務阻塞推遲的行為被稱為 優先順序反轉 這是一種不合理的行為方式,如果把這種行為再進一步放大,當高優先順序任務正等待訊號量 此訊號量被乙個低優先順序任務擁有著 的時候,乙個介於兩個任務優先之間的中等優先順序任務開...

nachos作業系統 基於優先順序的執行緒排程

基於優先順序的執行緒排程 1.實驗目的 熟悉nachos作業系統,掌握執行緒優先順序的排程,深入理解作業系統核心,了解使用者程式的載入過程以及多使用者程序的記憶體分配機制。2.實驗內容 nachos 的執行緒管理模組公升級源 及實現執行緒的優先順序排程 3.實驗方法 實驗步驟 thread.h 檔案...