1 0.2
處理器 任務
0.8 處理器
圖 3.3: 處理器可使用率
由於處理器個數為 M − CBS 算法所算出,故每個任務至少存在一個以上的處理 器,使得任務分配到該處理器上時不會有超載的情況發生。但是 M− CBS 演算法本身 是個高估型的演算法,所以在此處將處理器數量慢慢下降作測試,直到下降後任務無 法完全分配為止。由於此方法通用於一般型處理器以及數位訊號處理器,因此演算法 中將處理器通稱為 pj,演算法 2為演算法之描述。演算法一開始定義了 T U 用來存放 各個任務的使用率,RU 則存放各處理器的可使用率,RUmax 為 RU 中可使用率最大 者,然後定義 T empAssign 用來暫存任務對應至處理器的情形,定義 F inalAssign 存 放最後要輸出的任務與處理器的對應關係。運算開始時,利用 while 迴圈作處理器個 數下降的動作,然後內部則利用 f or 迴圈對每個任務都做分配給處理器的動作,利用 由大至小排序過的任務使用率,依序分配給處理器可使用率最大者,直到所有任務都 能在各處理器使用率不超過一的情況下分配給處理器即視為一次分配流程,每通過一 次分配流程,就將暫存分配情形的 T empAssign 存給 F inalAssign,然後再利用 while 迴圈下降一個處理器,直到無法再下降為止。此演算法主要花費的時間在於 while 迴 圈以及其內部的 f or 迴圈,因為 while 迴圈至多下降層數為 M − CBS 演算法所估算 出的處理器個數 m,而 f or 迴圈則是對所有任務都做處理,故處理次數為任務個數 n,
因此可推出時間複雜度為 O(m∗ n)。
為了能夠更具體描述演算法 2的運作,在此,我們利用一個實例來說明,圖 3.4到圖 3.8 依序為演算法實作流程。圖 3.4為第一個 while 迴圈中,系統的初始狀態,4 個可 使用率為 1 的處理器 (p0, ..., p3),及 6 個使用率由大至小排序的任務 (τ0, τ1, ..., τ5)。圖 3.5(a)4 個任務已分別分配給 4 個處理器,圖 3.5(b) 分配任務 τ4 給處理器可使用率最 大的 p3,最後圖 3.5(c) 為演算法 2中的第一次 while 迴圈完成時的狀態,由於成功的 完成此 while 迴圈,代表在處理器個數 4 的情況可確實找到所有任務對應至處理器的 狀態,因此會下降處理器個數來做測試。接下來在圖 3.6中,進入了第二次的 while 迴 圈,演算法將系統的狀態回復,並下降處理器個數至 3。圖 3.7(a) 前 3 個任務已分別 分配給 3 個處理器圖 3.7(b) 將任務 τ3 分配可使用率最大處理器 p2,並將可使用率下 降至 0.2,圖 3.7(c) 將任務 τ4 分配可使用率最大處理器 p1,並將可使用率下降至 0.1,
圖 3.7(d) 完成了第二次 while 迴圈,表示在處理器個數為 3 的情況下,找出適當的任 務與處理器的分配情形,因此選擇繼續下降處理器個數來做測試。圖 3.8(a) 是進入第 三次 while 迴圈中,系統的初始狀態,處理器個數降為 2,圖 3.8(b) 中前 2 個任務已 分配給 2 個處理器,但由於第 3 個任務 τ2 的使用率,已經超出所有處理器之可使用率 故於此脫離 while 迴圈。
處理器 任務
可使用率
1 1 1 1
任務所需使用率
0.7 0.6 0.5 0.3 0.3 0.2
p0 p1 p2 p3 τ0
τ1
τ2
τ3 τ4 τ5
圖 3.4: 系統初始化,處理器個數為 4
3.2 線上省電機制
在上一節中已經解決了任務分配的問題以及處理器個數縮減,此章節裡將要探討 的是如何透過動態速度調整,以達成系統執行時將消耗電能降低。本篇論文主要採用
演算法 2 Fix-Worst-Fit
Input: ({τ0, τ1, .., τn−1}, {p0, p1, ..., pm−1}
Output: 處理器數量、任務分配至處理器的對應關係 1: 定義 T U ={T U0, T U1, ...T Un−1} 儲存各任務使用率 2: 定義 RU ={RU0, RU1, ...RUm−1} 儲存各處理器可使用率
3: 定義 RUmax 為 RU 中可使用率最大者,若有相同的最大可使用率,則取序號小者 4: 定義 T empAssign 暫存處理器與任務分派之關係
5: 定義 F inalAssign 儲存處理器與任務分派之關係 6: 定義未成功下降旗標 =0
7: 將 T U 依照使用率由大至小做排序 8: while m > 0 do
9: for i = 0 to n− 1 do
10: if (任務的使用率 T Ui>RU 中的最大者 RUmax) then 11: 未成功下降旗標 =1;
12: m = m + 1;
13: break;
14: else
15: 令 Px 為當前有 RUmax 的處理器 16: RUmax = RUmax - T Ui;
17: 將處理器 Px 與任務 τi 的關聯性存入 T empAssign 中 18: if (未成功下降旗標!=1) then
19: F inalAssign = T empAssign;
20: else 21: break;
22: m = m− 1;
23: 回傳新的處理器數量 m、以及任務與處理器的對應關係 F inalAssign;
處理器 任務
Earliest Deadline First 演算法,該演算法的排程方式,是當任務於線上執行時,截限 時間最接近的工作給予最高優先權。
可使用率
處理器 任務