楊明偉 杜建華 薛楠 李斌
摘要:緩存作為一種有限資源,在進行數據通信時,負責進行數據的緩沖,在數據通信速度的提升中起關鍵作用。本文提出了一種緩存動態管理方案,與傳統的緩存管理方式相比,本文提出的緩存動態管理方式能更有效地使用緩存,緩存更多的消息,從而提升通信速度。
關鍵詞:嵌入式系統;光纖通信;緩存;動態管理
中圖分類號:TP309 文獻標識碼:A
文章編號:1009-3044(2019)12-0045-02
1 引言
隨著機載計算機技術的不斷發展,越來越多的設計使用光纖通信進行信息交互,光纖通信構成的系統越來越大,系統內交互的頻率也越來越高,這就對通信的速度與通信的頻度提出了更高的要求。在機載嵌入式系統中,光纖通信速度和頻度的提高不但涉及底層硬件邏輯技術的提升,還需上層軟件更有效地進行資源管理[1]。
在機載嵌入式系統中,由于嵌入式系統的固有特性,系統內緩存資源十分有限,然而通信過程中,緩存對數據的收發都有著決定性的影響[2]。在數據發送時,上層軟件將數據寫入數據緩存中,然后由邏輯負責將數據搬至硬件并發送,在數據接收時,邏輯將數據從硬件搬至數據緩存,上層軟件直接從數據緩存中讀取數據。在數據的接收和發送過程中,都涉及數據緩存空間的申請和釋放,而嵌入式系統內緩存空間大小有限,緩存的數據也有限。在傳統的緩存管理方式中,根據消息的最大長度進行緩存空間的申請,而在實際應用過程中,只有少數消息的長度會接近最大消息長度,大部分的消息都遠達不到最大消息長度,這些短消息導致大部分緩存空間處于空閑狀態,并不能用于緩存新數據,從而浪費掉大量的系統資源。
本文提出一種緩存動態管理方案,將傳統方式中的緩存一個消息所占的緩存空間進行再次分割,分為連續的八個相對較小的緩存緩沖區。當進行緩存空間申請時,根據所需緩存的數據的長度,針對性地進行空間選擇,得到大于所需空間且最接近所需大小的緩存,降低緩存空間的空閑比率,從而從整體上提高數據緩存的利用率。
2 相關研究
在嵌入式操作系統中,BSP負責進行緩存空間的配置,然后向上層軟件提供緩存空間的相關信息,包括緩存空間的首地址和空間長度,上層軟件通過調用系統提供的緩存空間申請函數進行緩存空間的申請[3]。
在光纖通信中,消息分為短消息和長消息兩種。短消息不大于4KB,長消息則為16M,在軟件初始化時,按照消息類型的不同,直接申請對應消息最大長度的緩存空間。對于長消息,則申請16MB空間作為消息緩沖區;短消息則申請4KB的緩存空間作為消息緩沖區。因而,在有限的緩存空間中只能申請一定數量的長消息緩沖區和短消息緩沖區。
傳統的緩存空間管理方式并沒有對緩存空間進行針對性管理。當消息收發過程中需要進行數據緩存時,直接將已申請的與消息類型對應的消息緩沖區直接全部分配給該消息。比如,當消息發送長度為5B的短消息數據,直接將4KB的短消息緩沖區分配給了該消息;接收1MB的長消息時,直接分配了16MB的長消息緩沖區。這種方式能夠進行正常的消息收發,然而會造成緩存空間的極大浪費,存在進一步提升的空間。
通過對使用光纖通信的數據進行分析發現,在機載嵌入式系統中,大多數的消息的長度是達不到所在消息的消息類型的最大長度的。短消息中,發送和接收頻度越高的消息,其攜帶的數據越小;攜帶數據越大的消息,其發送和接收的頻度也越低。因而,當數據收發的頻度越高,發送的消息長度越短,發現的利用率越低,限制了光纖通道的吞吐率的進一步提升。
通過對緩存空間高效管理,能夠降低緩存空間的空閑比率,提高緩存的使用效率,從而提升通信速率。
3 緩存動態管理方案與設計
3.1 緩存空間初始化
在進行緩存空間動態管理時,與傳統方式相同,需要先調用操作系統提供的緩存空間申請函數申請消息緩沖區,申請的4KB的短消息緩沖區和16MB的長消息緩沖區數目與傳統方式相同,然而與傳統方式不同之處在于對申請下來的消息緩沖區進行了針對性管理。
本文提出的緩存動態管理方案中,將一個緩沖區進行分割,將其從一個完整的緩沖區分割為8個大小相同的小緩沖區,每個小緩沖區的大小只有原先緩沖區大小的八分之一。對于4KB大小的緩沖區塊,每個小緩沖區為512B;對于16MB大小的緩沖區,每個小緩沖區為2MB。分割之后,將小緩沖區則作為重新分配的基本單位,但是管理時則是對包含8個小緩沖區的原始緩沖區塊進行管理。
我們構建一個特定結構體即緩沖區信息結構體來對每個緩沖區塊進行管理。該結構體包含以下幾個信息:
(1)buffSize:無符號整形,表示每個小緩沖區的大小。4KB的緩沖區塊中該變量為512,16MB的緩沖區塊中該變量為2M;
(2)allocFlag:無符號短整形,表示該緩沖區塊中各個小緩沖區的分配情況。0-7位分別表示第0-7塊的分配情況,對應位為1表明該小緩沖區已經被分配,對應位為0,表明該小緩沖區還未分配。如圖1中第0個緩沖區塊所示,當緩沖區塊中的小緩沖區被分配后,對應的標志位置為1;
(3)allocOffset:無符號短整形數組,表示申請目標個數的小緩沖區時的分配起始位置。該數組包含8個數據,0-7的數據分別代表了分配1-8個連續緩沖區時的起始分配位置。如圖1中的第0個緩沖區塊所示,初始化時,存在8塊連續的未分配的小緩沖區,所有大小的數據的起始分配位置都為0;當分配了2個小緩沖區時,剩下6個連續的小緩沖區,1-6塊的起始分配都變為2,7塊和8塊則沒有可分配位置,對應數據置為0xFFFF;
(4)maxBuffCnt:無符號短整型,表示小緩沖區的最大連續數量。如圖1所示,對于第0個緩沖區塊,初始化時,還未進行緩沖區申請,故小緩沖區最大連續數量為8,當緩沖區0和緩沖區1被分配后,小緩沖區最大連續數量變為6。
3.2 緩存空間申請
當軟件進行緩存空間申請時,并不需要重新調用緩存空間申請函數申請新的緩存空間,而是從初始化之后的一個個緩沖區塊中進行分配。
緩存空間進行分配時,主要包含以下幾個步驟:
(1)首先根據準備緩存的消息的類型決定分配的緩沖區塊類型,如果是短消息,則在4KB的緩沖區塊中進行分配,如果是長消息,則在16MB的緩沖區塊中進行分配;
(2)根據需要申請的緩存空間的大小,計算出需要的小緩沖區的數量N。如果是短消息,則除以512,然后向上取整;如果是長消息,則除以2M,然后向上取整;
(3)從目標緩沖區塊數組中,從第0個緩沖區塊往后依次進行查找。當找到第一個滿足maxBuffCnt大于所需的小緩沖區數量的緩沖區塊時,則在該緩沖區塊中進行小緩沖區的分配;
(4)根據該緩沖區塊對應的信息結構體中的信息,將該緩沖區塊中從allocOffset[N-1]位置開始的N個小緩沖區分配給申請的軟件;
(5)根據分配后的小緩沖區的分配情況更新該緩沖區塊對應的緩沖區信息結構體中的信息,包括allocFlag,allocOffset和maxBuffCnt。
更新目標緩沖區塊對應的信息時,首先修改分配標志allocFlag,然后根據分配標志進行分配起始偏移allocOffset,此時采用的方法如下:
(1)從第0個緩沖區開始,此時小緩沖區編號N為0,最大連續數Count為0,此次連續的起始位置Start為0,記錄偏移Offset為0,根據偏移位置的變化依次對后續小緩沖區執行如下查詢;
(2)當對第N個小緩沖區執行查詢時,如果該小緩沖區未被分配,進行如下操作。首先對最大連續數Count進行判斷,如果Count為0,則Start值變為N;然后Count加1,如果更新之后的Count大于Offset,將Start記錄在allocOffset[Offse]中,Offset進行加1;最后小緩沖區編號加1,對第N+1個小緩沖區進行查詢;
(3)如果第N個小緩沖區已被分配,則最大連續數Count變為0,Offset不變,Start為0,小緩沖區編號加1,對第N+1個小緩沖區進行查詢;
(4)當對所有小緩沖區查詢之后,此時最大連續緩沖數目maxBuffCnt的值為Offset的當前值,如果Offset小于7,則將allocOffset[Offset~7]中的數據全部更改為0xFFFF。
3.3 緩存空間釋放
進行緩存空間釋放時,就是將申請的緩存空間重新放回原先的緩沖區塊中。釋放時步驟如下:
(1)根據緩存空間緩存的消息的類型,確定該緩存空間所屬的緩沖區消息的類型;
(2)計算出該地址相對于緩存空間基址的偏移;
(3)根據偏移計算出所在緩沖區塊的位置;
(4)釋放緩存空間;
(5)與申請緩存空間時相同,更新所在緩沖區塊的信息結構體中的信息。
4 結束語
本文提出一種基于嵌入式系統,面向光纖通信的緩存動態管理方案,該方案可以實現對緩存的動態管理,降低緩存的空閑比率,提高緩存利用率,從而提升通信速度。經過測試,相對于傳統的緩存管理方式,本文提出的動態緩存管理方式能夠有效提高緩存利用率和通信速度,滿足機載嵌入式系統中通信對緩存空間管理的需求。
參考文獻:
[1] 田令平.嵌入式操作系統內存管理研究[J].電腦知識與技術, 2006(4):169-171.
[2] 雙,帥建梅,吳慶響.一種新的面向對象程序的內存管理器[J].計算機工程,2012,38(9):21-23.
[3] 魏海濤,姜昱明,李建武等.內存管理機制的高效實現研究[J].計算機工程與設計,2009,30(16):3708-3712.
【通聯編輯:梁書】