張東 梅濤
摘 要:為了提升基于浮點運算的任務上下文切換性能,本文提出了一種高效的浮點上下文切換算法;基于某型嵌入式實時操作系,設計實現了所提出的浮點上下文切換算法,并進行任務上下文切換的性能對比實驗;實驗結果表明,本文提出的浮點上下文切換算法可以有效地提高混合環境下任務切換的效率,顯著減小浮點任務上下文切換的時間消耗。
關鍵詞:浮點任務;上下文切換;性能對比
中圖分類號:TP311 文獻標識碼:A
一、背景
隨著嵌入式領域信息處理技術的發展,越來越多的應用需要使用浮點運算來完成其功能,對操作系統[ 1 ]提出了新的功能和性能要求。在信息處理領域,通常情況下浮點任務和非浮點任務配合使用,完成各種計算。如果操作系統在任務切換的過程中,對每一個任務均保存和恢復浮點上下文,則會造成大量的時間和空間開銷,嚴重影響系統性能,需要提出新的浮點任務和非浮點任務切換算法,為混合任務環境下任務的高效切換提供支持。
二、浮點上下文切換算法
上下文切換[ 2 ]的基本原理就是當發生任務切換時,保存當前任務的寄存器到內存中,將下一個即將要切換過來的任務的寄存器狀態恢復到當前 CPU 寄存器中,使其繼續執行,同一時刻只允許一個任務獨享寄存器。在任務切換的過程中是涉及任務上下文的保存和恢復操作,而任務上下文切換操作的性能是衡量操作系統性能的一個重要指標。任務上下文切換指標可以反映出操作系統在多任務環境下的處理能力。由于浮點運算應用的大量普及,已有的操作系統上下文切換算法已不能有效滿足實時高效處理的需求。
為了提高任務切換的性能,減少浮點上下文的保存和恢復次數,本文設計了一種高效浮點上下文切換算法。該浮點上下文切換的基本原理為:盡量延遲浮點上下文的保存和恢復操作,僅在切換到使用浮點運算的任務時,才進行浮點上下文的保存和恢復操作。使用浮點運算的任務稱為浮點任務,否則稱為普通任務。如果當前執行的任務為普通任務,那么該任務在運行過程中不會進行浮點運算,不會破壞浮點上下文,則不需要進行浮點上下文的保存和恢復操作;如果當前執行的任務為浮點任務,那么直到換到另一個浮點任務時,才進行浮點上下文的保存和恢復操作。根據該原理,系統中需要進行浮點上下文的切換操作的影響范圍僅與系統中使用浮點運算的任務相關,有效地提高了系統中任務切換的性能和效率。圖1給出了浮點上下文切換的示意。
由圖可知,假設系統當前有4個任務,浮點任務A,普通任務B,浮點任務C和普通任務D。根據前述浮點上下文切換原理,在任務A切換任務B的過程中,并不需要保存浮點任務A的浮點上下文,僅僅將浮點任務A的浮點上下文向任務B傳遞;當由普通任務B切換到浮點任務C的時候,才需要保存浮點任務A的浮點上下文。在進行了兩次任務切換時,僅需要一次浮點上下文的切換操作,可以有效降低由于浮點運算導致的系統性能的下降。
三、浮點上下文切換算法的實現
根據前述浮點上下文切換原理,選擇某型嵌入式實時操作系統軟件(RTOS)實現該上下文切換算法。為了敘述方便,定義前繼任務為當前即將切換出去的任務;后繼任務為即將切換進入CPU執行的任務。為了能夠簡潔高效地實現該浮點上下文切換算法,在所選擇的RTOS的任務控制塊中增加了一個任務浮點屬性,標識當前任務是否為浮點任務。如果在創建任務時,設置了任務的浮點屬性,則所創建的任務即為浮點任務;否則為普通任務。
為了充分發揮浮點運算的性能,浮點上下文地址通常要求按CPU字長的整數倍對齊,本文所選擇的RTOS中,浮點上下文按照8字節對齊。在實現前文提出的浮點上下文切換方法的過程中,使用了任務浮點上下文的最低位,作為任務浮點上下文傳遞的標記。當浮點上下文傳遞標記被置位,則認為當前任務中的浮點上下文為傳遞過來的,當前任務為普通任務,并不是浮點任務;否則,表示當前任務就是浮點任務。
任務切換的過程中,根據前繼任務和后繼任務的不同類型,需要進行不同的操作。
本文設計的浮點上下文切換算法的具體步驟如下:
1)判斷所創建的任務是否為浮點任務。
2)如果是浮點任務,則申請浮點上下文空間,并將申請的浮點上下文空間記錄在任務控制塊的浮點上下文成員中;否則,則設置任務控制塊中的浮點上下文成員為空。
3)任務切換時,判斷前繼任務和后繼任務的類型;可能存在的任務類型組合包括:
a.浮點任務/浮點任務;
b.浮點任務/非浮點任務;
c.非浮點任務/浮點任務;
d.非浮點任務/非浮點任務。
4)根據前繼任務和后繼任務的類型對浮點上下文進行切換操作:
①如果為步驟3)的a.組合,則對浮點任務的上下文進行保存和恢復;
②如果為步驟3)的b.組合,暫時不進行浮點上下文的保存,將前繼任務控制塊中的浮點上下文成員傳遞給后繼任務,而將浮點上下文的保存操作推遲到切換浮點任務時才進行;
③如果為步驟3)的c.組合,任務上下文切換操作過程如下:
(a)判斷前繼任務控制塊中的浮點上下文成員是否為空;如果為空,則進行步驟(b);否則,則進行步驟(c);
(b)在當前任務運行前,沒有浮點任務運行,不需要進行浮點上下文的保存工作,僅需要恢復浮點上下文;
(c)在當前任務運行前,有浮點任務運行,如果前繼任務的浮點上下文與后繼任務的浮點上下文不一致,則將浮點上下文保存到前繼任務控制塊所傳遞的上下文中,并清除前繼任務控制塊浮點上下文傳遞標記,恢復后繼任務的浮點上下文,否則清除前繼任務的浮點上下文;
④如果為步驟3)的d.組合,任務上下文切換操作的方式為:
(a)判斷前繼任務控制塊中的浮點上下文成員是否為空;如果為空,則進行步驟(b);否則,則進行步驟(c);
(b)在當前任務運行前,沒有浮點任務運行;不需要進行浮點上下文保存/恢復操作;
(c)在當前任務運行前,有浮點任務運行,將前繼任務的浮點上下文傳遞到后繼任務,并清除前繼任務控制塊中的浮點上下文成員。
四、浮點上下文切換算法的性能
為了驗證本文設計的浮點上下文切換算法的性能,根據前文設計的上下文切換算法,在某型RTOS中實現了上述浮點上下文切換算法,并在PowerPC7450單核處理器[ 3 ]平臺上進行性能驗證實驗。為了比較本文設計的浮點上下文切換算法的性能,在所選擇的RTOS中使用始終在任務上下文中保存和恢復浮點上下文方法切換上下文,即在每次任務切換時,均對每個前繼任務保存浮點上下文并且對后繼任務恢復浮點上下文,并在同一處理器平臺上進行性能驗證實驗。
實驗中通過兩個任務進行切換操作,計算任務上下文切換操作的時間。實驗場景[ 4 ]如下,任務A和任務B進行切換,在任務A從CPU中切換出來的點開始第一次計時,在任務B切換進入CPU的點記錄第一結束時間;然后,在任務B切換出來的點開始第二次計時,在任務A切換進入CPU的點記錄第二次結束時間,通過1000次任務切換操作,計算任務上下文切換操作的平均時間。
基于本文設計的浮點上下文切換方法,實驗結果如下所示:
如果任務切換時按照始終進行浮點上下文切換的算法進行上下文切換操作時,實驗數據如下:
根據實驗結果,可置本文設計的浮點上下文切換算法,在非浮點任務和浮點任務混雜的運算環境下,可以有效地提高任務切換的性能,顯著地降低任務切換的時間消耗;對于計算資源相對有限的嵌入式環境,上下文切換性能的提升,可以有效提高系統的效率;對于實時性要求較高的環境,任務上下文切換時間的降低,可以顯著提高系統的實時響應能力。
五、結語
本文設計了一種高效的浮點上下文切換算法,根據性能對比實驗結果,證實了本文提出算法可以有效地提高系統的任務切換性能,顯著地降低任務上下文切換的時間消耗。通過與已有的任務上下文切換算法進行對比實驗,證明本文設計實現的浮點上下文切換算法,在使用浮點運算和非浮點運算混合的情況下可以提高上下文切換的性能,可以顯著提高系統的效率,增強系統性能。
參考文獻:
[1] 陳瑜,諶衛軍譯.操作系統設計與實現[M].北京:電子工業出版社,2007,3.
[2] 孫利鋒.嵌入式操作系統任務切換方法對比分析[J].單片機與嵌入式系統應用,2011年07期:10-12.
[3] Freescale Inc.MPC7450 microprocessor family users manual [M].USA: Freescale Inc,2010.
[4] 王蕾,樸希望,李世群,陳蕾.嵌入式實時操作系統的時間性能測試[J].內蒙古大學學報,2011年,42卷第5期:547-551.
基金項目:
工信部民用飛機專項科研項目(MJ-S-2012-05)
作者簡介:
張東(1983-),男,陜西西安人,碩士,主要研究方向為嵌入式實時操作系統。