基於優先順序的搶占式排程

2021-08-04 13:23:44 字數 1174 閱讀 2012

wind核心排程預設使用基於優先順序搶占式排程,核心共有 256 個優先順序(任務的優先順序在其建立時指定,為0~255),優先數 0 對應著最高優先順序,優先數255 對應著最低優先順序。每一時刻,核心保證將資源分給處於就緒狀態的最高優先順序的任務執行。之所以說這種排程演算法是搶占的,是因為如果在某個時刻,乙個優先順序比當前正在執行的任務的優先順序高的任務變為就緒,那麼核心立即儲存當前任務的上下文,然後切換到這個最高優先順序任務的上下文。

相關函式:

vxworks使用taskpriorityset() 來設定任務優先順序

函式原型為:status taskpriority( int tid, int newpriority )

引數解釋: 例項

#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)))

}

這是乙個核心態的程式,在這個程式中建立了三個任務用來列印自己的任務id,分別為taskidone,taskidtwo,taskidthree,對應著三個不同的優先順序,taskidone優先順序最低,taskidthree優先順序最高。

關於基於優先順序的搶占式排程

對於有一定作業系統基礎的朋友看到 搶占式 排程一定不會陌生吧。我參考了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 ...