wind核心排程預設使用基於優先順序搶占式排程,核心共有 256 個優先順序(任務的優先順序在其建立時指定,為0~255),優先數 0 對應著最高優先順序,優先數255 對應著最低優先順序。每一時刻,核心保證將資源分給處於就緒狀態的最高優先順序的任務執行。之所以說這種排程演算法是搶占的,是因為如果在某個時刻,乙個優先順序比當前正在執行的任務的優先順序高的任務變為就緒,那麼核心立即儲存當前任務的上下文,然後切換到這個最高優先順序任務的上下文。
相關函式:
vxworks使用taskpriorityset() 來設定任務優先順序
函式原型為:status taskpriority( int tid, int newpriority )
引數解釋: 例項
這是乙個核心態的程式,在這個程式中建立了三個任務用來列印自己的任務id,分別為taskidone,taskidtwo,taskidthree,對應著三個不同的優先順序,taskidone優先順序最低,taskidthree優先順序最高。#include "vxworks.h"
#include "tasklib.h"
#include "loglib.h"
#define iter1 100
#define iter2 1
#define long_time (1<<25)
#define high 100
#define mid 101
#define low 102
static
void taskone(void)
for(j=0; jstatic
void tasktwo(void)
for(j=0; jstatic
void taskthree(void)
for(j=0; jvoid hisched(void)
if(error == (taskidtwo = taskspawn("task2", mid, 0x100, 20000, (funcptr)taskone, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)))
if(error == (taskidthree = taskspawn("task3", low, 0x100, 20000, (funcptr)taskone, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)))
}
關於基於優先順序的搶占式排程
對於有一定作業系統基礎的朋友看到 搶占式 排程一定不會陌生吧。我參考了linux核心 ecos以及windows核心對於搶占式排程的處理,感覺雖然細節上有點差別,但都挺有意思。這裡,我想談談關於搶占式排程的一些看法。在很多作業系統書上基本上都這麼談基於優先順序的搶占式排程 1 每個任務賦予唯一的乙個...
非搶占式優先演算法例題 非搶占式高優先順序排程演算法
v1.0 可編輯可修改 非搶占式高優先順序排程演算法 優先數越大級別越高 演算法思想 在按程序達到時間由小到大的順序輸入程序資訊後,先對其優先數進行排列,將最先到達的程序的到達時間設為開始時間,計算結束時間,然後對後面到達的時間與該程序的結束時間進行比較,如若小於該程序的結束時 間,記錄程序的個數,...
非搶占式優先演算法例題 非搶占式優先順序
非搶占式優先順序 include define max 10 struct process char name 10 float at float st float rt float ft int priority 優先數int order 程序執行次序 int flag 標記程序狀態 p max ...