[目的要求]
用高階語言編寫和除錯乙個程序排程程式,以加深對程序的概念及程序排程演算法的理解. [
準備知識]
一、基本概念 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 檔案...