專利名稱:一種dsp數據區動態管理方法
技術領域:
本發明涉及信號處理技術領域,尤其涉及一種DSP數據區動態管理方法。
背景技術:
隨著嵌入式實時系統在各個領域的廣泛應用,嵌入式軟件的開發也受到越來越多 的矚目。在滿足系統實時性要求的前提下,如何提高內存分配的快速性、可靠性和高效性, 是嵌入式軟件系統面臨的一個重大問題。內存分配的快速性從嵌入式系統對實時性的要求 出發,要求內存在分配過程中盡可能的快,因此在嵌入式系統中,不可能采用通用操作系統 中復雜而繁瑣的內存分配策略,一般都采用簡單、快速的內存分配方案;內存分配的可靠性 則要求內存分配的請求必須得到滿足;而內存分配的高效性,則要求內存分配盡可能地減 少浪費。實時性通常要求嵌入式系統具有強大的并行計算能力與足夠的數據吞吐量,通常 由多片專用DSP構成高效互聯的并行機來實現。而通用性就意味著系統處理的數據或對象 的大小及數目是動態可變的,要求動態分配DSP數據區。在沒有通用操作系統支撐的DSP 上,編制的應用軟件很難管理硬件資源,一般的DSP應用軟件與底層硬件緊耦合,與底層硬 件緊耦合的DSP —般應用軟件則要求在設計時必須確定各種數據或對象在存儲器中的分 布,無法適應動態的變化,無擴展通用性。目前,一般的嵌入式系統采用的內存管理方法通常是在設計時將內存分成若干個 內存區,每個內存區中的多個內存塊大小相同,不同內存區中的內存塊的大小不同,并且不 同內存區中的內存塊的大小滿足k*2n,其中,η和k為自然數。這種方法通常存在以下缺占.1、各內存區域的大小是預先估計得到的,與應用的數據塊大小不匹配,應用需要 申請內存時,往往需要根據所申請內存的大小搜索各內存區,從中找到大小合適的內存塊, 因而會產生內存碎片。2、由于內存區中的內存塊的大小與應用的數據塊大小不匹配,當所申請的內存塊 小于內存區中空閑塊時,將合并小內存塊;當所申請的內存塊大于內存區中空閑塊時,將分 割大內存塊,因此,內存申請效率低下。因此,亟待提供一種DSP數據區動態管理方法以克服上述缺陷。
發明內容
本發明要解決的技術問題在于提供一種DSP數據區動態管理方法,該方法可以根 據實際應用的需要動態管理DSP的內存數據區,高效且沒有內存碎片。為了解決上述技術問題,本發明提供了一種DSP數據區動態管理方法,其包括以 下步驟根據DSP節點上對象數據的類型和每類對象數據的存儲需求將DSP數據區的地址 空間分區,每個分區對應一個內存資源對象;
在每個所述內存資源對象中創建對象數據池,同一所述對象數據池中的數據塊大 小相同且所述數據塊的大小與存入所述對象數據池的對象數據的存儲需求相應;建立所述分區與對應的所述對象數據池的關聯并初始化所述對象數據池的控制 信息;以及執行所述對象數據池中的數據塊的分配與釋放。與現有技術相比,本發明的DSP數據區動態管理方法根據需要劃分DSP內存數據 區,系統執行時,可以按需動態分布對象數據,適應通用性的需求。并且,由于將不同的對象 數據分類存放,每一類的數據池結構統一,減少了對象數據的存儲時間,有效提高了系統運 行的效率。此外,由于是根據應用中的各類對象數據的存儲需求確定數據塊的大小,也就是 說,數據塊的大小與應用需求相匹配,數據塊不需要分割與合并的操作,因而對象數據池中 不會產生內存碎片,DSP數據區的內存利用率高。再者,先將DSP數據區的空間地址分區、 創建對象數據池,然后再建立所述分區和所述對象數據池之間的聯系,這樣,內存資源和對 象數據池的管理可以獨立變化,便于在各種類型DSP芯片的地址空間或者某個DSP芯片的 任何地址區間中創建所需的對象數據池。優選地,建立所述分區與對應的所述對象數據池的關聯并初始化所述對象數據池 的控制信息的步驟具體包括將所述對象數據池的數據結構定義為連續的數據塊鏈表并建 立數據池索引表,所述對象數據池的控制信息包括鏈表頭和數據塊頭,所述鏈表頭用于存 儲相應的對象數據池中已分配數據塊存儲空間指針、相應的對象數據池中空閑數據塊存儲 空間指針及對象數據池中剩余數據塊的個數,所述數據塊頭存儲有對應數據塊的大小、數 據指針以及下一個數據塊的指針。采用連續的數據塊鏈表表示對象數據池,便于實現多個 對象數據池的管理,提高存儲效率。兩級的索引結構可以進一步加快數據塊的分配。優選地,所述DSP數據區動態管理方法還包括將位圖與所述對象數據池相關聯, 用于表示相應的對象數據池的空閑或非空閑狀態,以便于非正常使用時能快速返回錯誤信 肩、ο優選地,所述執行所述對象數據池中的數據塊的分配與釋放的步驟具體為當應 用申請數據塊時,根據應用的對象數據的類型搜索所述與對象數據池相關聯的位圖及其鏈 表指針,找到相應的對象數據池;將相應的對象數據池中空閑數據塊存儲空間指針指向的 數據塊的地址返回給應用,并將該數據塊加入已分配數據塊存儲空間;以及在對應數據塊 中存入對象數據,并修改所述鏈表頭和數據塊頭中的控制信息;而當釋放數據塊時,將相應 的數據塊歸還至所述對象數據池空閑數據塊存儲空間,并修改所述鏈表頭和數據塊頭中的 控制信息。優選地,所述DSP數據區動態管理方法還包括計算對象數據幀長,并根據所述對 象數據幀長將所述對象數據分配到各個DSP節點。通過以下的描述并結合附圖,本發明將變得更加清晰,這些附圖用于解釋本發明 的實施例。
圖1為本發明DSP數據區動態管理方法一個實施例的流程示意圖。圖2為圖1所示DSP數據區動態管理方法中的對象數據池的數據結構示意圖。
4
圖3為圖1所示DSP數據區動態管理方法中的對象數據池的數據池索引結構示意 圖。圖4為以水聲場信號產生器為例的對象數據池的結構示意圖。
具體實施例方式現在參考附圖描述本發明的實施例,附圖中類似的元件標號代表類似的元件。如 上所述,本發明提供了一種DSP數據區動態管理方法,該方法可以根據實際應用的需要動 態管理DSP的內存數據區,高效且沒有內存碎片。下面將結合附圖詳細闡述本發明實施例的技術方案。如圖1所示,本實施例的DSP 數據區動態管理方法包括以下步驟。步驟SlOl 根據DSP節點上對象數據的類型和每類對象數據的存儲需求將DSP數 據區的地址空間分區,每個分區對應一個內存資源對象。所述對象數據的類型根據對象數 據的存儲需求劃分,所述存儲需求即為所需數據塊大小和容量。所述DSP節點是指單獨的 一塊DSP芯片。由于現有的嵌入式系統通常包括由多片專用DSP構成高效互聯的并行機,所以在 此情況下,在步驟SlOl之前,還包括根據嵌入式系統的工作參數計算對象數據幀長,并根 據所述對象數據幀長將所述對象數據分配到各個DSP節點。具體的,可以結合嵌入式系統 所產生的數據幀長和DSP硬件平臺資源參數來將所述對象數據分配到各個DSP節點。前述 工作參數包括采樣頻率和數據幀間隔等,所述DSP硬件平臺資源參數包括每個D/A通道板 輸出的通道數CharmelNum、DSP運算板數DSPNum等。依據前述兩類參數,根據負載平衡原 則即可確定入池對象數據在每個DSP節點上的分布狀況。所述負載平衡原則是指在滿足嵌 入式系統實時性能前提下,每個DSP節點上的計算負載平衡。步驟S102 在每個所述內存資源對象中創建對象數據池,同一所述對象數據池中 的數據塊大小相同且所述數據塊的大小與存入所述對象數據池的對象數據的存儲需求相應。步驟S103 建立所述分區與對應的所述對象數據池的關聯并初始化所述對象數 據池的控制信息。在本實施例中,該步驟具體為將所述對象數據池的數據結構定義為連續的數據 塊鏈表并建立數據池索引表,所述對象數據池的控制信息包括鏈表頭Poolhead和數據塊 頭head,所述鏈表頭用于存儲相應的對象數據池中已分配數據塊存儲空間指針pHead、相 應的對象數據池中空閑數據塊存儲空間指針PBlock及對象數據池中剩余數據塊的個數 iFreeCoimt,所述數據塊頭存儲有對應數據塊的大小Size、數據指針pData以及下一個數 據塊的指針pNext。所述對象數據池的數據結構如圖2所示。采用連續的空閑數據塊鏈表 表示對象數據池,便于實現多個對象數據池的管理,提高存儲效率。 進一步地,如圖3所示,本實施例的DSP數據區動態管理方法還可以包括將位圖與 所述對象數據池相關聯,用于表示相應的對象數據池的空閑或非空閑狀態。兩級的索引結 構可以進一步加快數據塊的分配和統一管理對象數據池鏈表。 步驟S104 執行所述對象數據池中的數據塊的分配與釋放。具體的,當應用申請 數據塊時,根據應用的對象數據的類型搜索所述與對象數據池相關聯的位圖及其鏈表指針,找到相應的對象數據池;將相應的對象數據池空閑的數據塊存儲空間指針指向的數據 塊的地址返回給應用;以及在對應數據塊中存入對象數據,并修改所述鏈表頭和數據塊頭 中的控制信息。當釋放數據塊時,將相應的數據塊歸還至所述對象數據池空閑數據塊存儲 空間。可以看出,數據塊的申請與釋放均放在所述空閑數據塊鏈表的頭部進行,可以實現數 據塊的快速分配。本發明的DSP數據區動態管理方法根據需要劃分DSP內存數據區,系統執行時,可 以按需動態分布對象數據,適應通用性的需求。并且,由于將不同的對象數據分類存放,每 一類的數據池結構統一,減少了對象數據的存儲時間,有效提高了系統運行的效率。此外, 由于是根據應用中的各類對象數據的存儲需求確定數據塊的大小,也就是說,數據塊的大 小與應用需求相匹配,數據塊不需要分割與合并的操作,因而對象數據池中不會產生內存 碎片,DSP數據區的內存利用率高。再者,先將DSP數據區的空間地址分區、創建對象數據 池,然后再建立所述分區和所述對象數據池之間的聯系,這樣,內存資源和對象數據池的管 理可以獨立變化,便于在各種類型DSP芯片的地址空間或者某個DSP芯片的任何地址區間 中創建所需的對象數據池。下面以水聲場信號實時產生器為例,詳細說明本發明的DSP數據區動態管理方 法。該水聲場信號實時產生器的工作參數包括采樣頻率fs、水下目標個數Targ etNum、聲 陣通道數ArrayNum、每個對象的處理時間和數據幀間隔T。則對象數據的幀長可表示為DL =fsXT。然后由水聲場信號實時產生器的工作參數確定每一類入池對象數據的存儲需求。 有關的DSP硬件平臺資源參數有每個D/A通道板輸出的基元數CharmelNum、DSP運算板數 DSPNum等。依據上述兩類參數,根據負載平衡原則可確定入池對象數據在每個DSP節點上 的分布狀況。在本實施例中,每個DSP計算的目標個數可表示為M = TargetNum/DSPNum,那么 在每個DSP上必須分布M個目標對象,因而目標對象數據池容量應為Size = M0由于每 個目標對象中又包含4個聲信號,因而,聲信號對象數據池容量應為Size = 4*M。在每個 基元的輸出信號上都要疊加有海洋環境噪聲,因此需要計算ArrayNum路的海洋環境噪聲, 平衡每個DSP運算板的計算負載,每個DSP節點需要計算的噪聲路數為NoiseCharmel = ArrayNum/DSPNum,每路噪聲的數據幀長是DL,因此海洋環境噪聲數據對象數據塊的大小為 NoiseCharmehDL ;由于海洋環境噪聲又可分為流噪聲、環境噪聲和海洋背景噪聲,因此對 象數據塊數為3。由上述DSP運算板數上每個DSP節點的數據存儲需求,將DSP數據內存分區,每 個區對應一個對象數據池。在本實施例中,DSP數據內存劃分了 3個區,對應3個連續數據 塊鏈表表示的對象數據池,每個對象數據池的參數及結構如圖4所示。數據池管理器給每 個數據池創建和初始化一個鏈表頭(Poolhead);給每個數據塊創建一個數據塊頭(head)。 隨后,根據數據區地址空間的劃分,將每個數據池的起始地址填入數據池指針數組,即建立 分區和對象數據池的關聯。每個對象數據池初始化后,池中數據塊均為空閑數據塊,因此 pBlock指向數據池中第一個數據塊,而pHead為空。在執行數據塊的分配時,各個數據池的 分配器從各自的PBlock指向的空閑數據塊存儲空間的開始分配數據塊,已分配的數據塊 加入pHead指向的已分配數據塊存儲空間中,同時修改鏈表頭和數據塊頭中的控制信息。 本實施例的水聲場信號產生器經適配接口與聲納對接后,給聲納提供測試激勵。在不改變
6測試臺硬件并不重新加載軟件的情況下,成功實現了 4種不同信號聲納信號的產生并饋入 實際聲納,實現了面向水聲場信號產生器應用的DSP數據區的動態管理。
權利要求
一種DSP數據區動態管理方法,其特征在于,包括以下步驟根據DSP節點上對象數據的類型和每類對象數據的存儲需求將DSP數據區的地址空間分區,每個分區對應一個內存資源對象;在每個所述內存資源對象中創建對象數據池,同一所述對象數據池中的數據塊大小相同且所述數據塊的大小與存入所述對象數據池的對象數據的存儲需求相應;建立所述分區與對應的所述對象數據池的關聯并初始化所述對象數據池的控制信息;以及執行所述對象數據池中的數據塊的分配與釋放。
2.根據權利要求1所述的DSP數據區動態管理方法,其特征在于,建立所述分區與對應 的所述對象數據池的關聯并初始化所述對象數據池的控制信息的步驟具體包括將所述對象數據池的數據結構定義為連續的數據塊鏈表并建立數據池索引表,所述對 象數據池的控制信息包括鏈表頭和數據塊頭,所述鏈表頭用于存儲相應的對象數據池中已 分配數據塊存儲空間指針、相應的對象數據池中空閑數據塊存儲空間指針及對象數據池中 剩余數據塊的個數,所述數據塊頭存儲有對應數據塊的大小、數據指針以及下一個數據塊 的指針。
3.根據權利要求2所述的DSP數據區動態管理方法,其特征在于,還包括將位圖與對象 數據池相關聯,用于表示相應的對象數據池的空閑或非空閑狀態。
4.根據權利要求3所述的DSP數據區動態管理方法,其特征在于,所述執行所述對象數 據池中的數據塊的分配與釋放的步驟具體為當應用申請數據塊時,根據應用的對象數據的類型搜索所述與對象數據池相關聯的位 圖及其鏈表指針,找到相應的對象數據池;將相應的對象數據池空閑數據塊存儲空間指針指向的數據塊的地址返回給應用,并將 該數據塊加入已分配數據塊存儲空間;以及在對應數據塊中存入對象數據,并修改所述鏈表頭和塊頭中的控制信息;當釋放數據塊時,將相應的數據塊歸還至所述對象數據池空閑數據塊存儲空間。
5.根據權利要求1-4任一項所述的DSP數據區動態管理方法,其特征在于,當所述DSP 節點為多個并行時,還包括計算對象數據幀長,并根據所述對象數據幀長將所述對象數據 分配到各個DSP節點。
全文摘要
本發明公開了一種DSP數據區動態管理方法,其包括以下步驟根據DSP節點上對象數據的類型和每類對象數據的存儲需求將DSP數據區的地址空間分區,每個分區對應一個內存資源對象;在每個所述內存資源對象中創建對象數據池,同一所述對象數據池中的數據塊大小相同且所述數據塊的大小與存入所述對象數據池的對象數據的存儲需求相應;建立所述分區與對應的所述對象數據池的關聯并初始化所述對象數據池的控制信息;以及執行所述對象數據池中的數據塊的分配與釋放。該方法可以根據實際應用的需要動態管理DSP的內存數據區,高效且沒有內存碎片。
文檔編號G06F12/02GK101950273SQ201010291189
公開日2011年1月19日 申請日期2010年9月26日 優先權日2010年9月26日
發明者姚直象, 幸高翔, 張衛, 王希敏, 蔡志明, 郭瑞 申請人:中國人民解放軍海軍工程大學