專利名稱:存儲管理系統(tǒng)及其存儲管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲管理領(lǐng)域,特別是涉及一種存儲管理系統(tǒng)及其存儲管理方法。
背景技術(shù):
一個完整的內(nèi)存管理系統(tǒng)包括①內(nèi)存分配,②內(nèi)存使用統(tǒng)計情況,③內(nèi)存診斷三部分。一般嵌入式系統(tǒng)平臺上提供的內(nèi)存管理功能,大多數(shù)都只包含內(nèi)存分配的部分,部分系統(tǒng)有一些粗略的統(tǒng)計功能,很少有診斷系統(tǒng)。內(nèi)存分配和釋放算法的好壞程度也大相徑庭,主要體現(xiàn)在算法的空間利用率和時間效率上??臻g利用率即系統(tǒng)中內(nèi)存碎片的多少;時間效率即分配和釋放的快慢程度?,F(xiàn)有嵌入式存儲管理系統(tǒng)存儲管理的缺點(diǎn)表現(xiàn)在分配算法和外圍功能的完整性 和易用性上I)現(xiàn)有嵌入式存儲管理系統(tǒng)在內(nèi)存分配管理算法上是剛性的,不能根據(jù)不同系統(tǒng)的實(shí)際分配情況去調(diào)整。不同的嵌入式系統(tǒng)的內(nèi)存使用情況特點(diǎn)不同,不能表現(xiàn)在算法中;2)現(xiàn)有嵌入式存儲管理系統(tǒng)大多沒有將外圍功能細(xì)化,外圍功能包括統(tǒng)計內(nèi)存分配及分布情況的信息功能,診斷功能。檢查內(nèi)存泄露很不系統(tǒng),診斷功能并不能很直觀的讓開發(fā)人員迅速定位信息的不精確(如不能給出具體位置)和信息的不實(shí)時(比如程序突然崩潰了,沒有來的及輸出診斷信息)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種存儲管理系統(tǒng)及其存儲管理方法,能結(jié)合用戶系統(tǒng)自身的內(nèi)存使用分布特點(diǎn),提供一個良好的內(nèi)存分配和回收的算法,以解決傳統(tǒng)嵌入式存儲管理系統(tǒng)內(nèi)存分配算法上空間或時間效率上的利用率不高、碎片多以及研發(fā)人員無法對軟件開發(fā)過程中出現(xiàn)的各種內(nèi)存問題進(jìn)行快速、精確、實(shí)時定位的問題。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種存儲管理系統(tǒng),其特征在于,包括分配子系統(tǒng),用于結(jié)合根據(jù)用戶系統(tǒng)的內(nèi)存使用分布情況所配置的策略與內(nèi)存分配和回收算法高效分配和回收用戶系統(tǒng)的內(nèi)存,以優(yōu)化用戶系統(tǒng)的內(nèi)存使用;統(tǒng)計信息子系統(tǒng),連接所述分配子系統(tǒng),用于獲取用戶系統(tǒng)的內(nèi)存使用分布情況的統(tǒng)計信息,以便于所述分配子系統(tǒng)高效分配和回收用戶系統(tǒng)的內(nèi)存;診斷子系統(tǒng),連接所述分配子系統(tǒng),用于診斷用戶系統(tǒng)的內(nèi)存使用異常。所述的存儲管理系統(tǒng),其中,還包括初始化系統(tǒng),連接所述分配子系統(tǒng)、所述統(tǒng)計信息子系統(tǒng)、所述診斷子系統(tǒng),用于對所述分配子系統(tǒng)及其結(jié)構(gòu)、所述統(tǒng)計信息子系統(tǒng)及其結(jié)構(gòu)、所述診斷子系統(tǒng)及其結(jié)構(gòu)以及所述存儲管理系統(tǒng)的安全性保護(hù)進(jìn)行初始化處理。所述的存儲管理系統(tǒng),其中,所述統(tǒng)計信息子系統(tǒng)獲取的統(tǒng)計信息包括用戶系統(tǒng)中使用塊大小的頻度統(tǒng)計,使用內(nèi)存大小和峰值。所述的存儲管理系統(tǒng),其中,所述配置的策略中的信息包括塊大小、初始分配多少塊、要不要被預(yù)留、預(yù)留多少塊。所述的存儲管理系統(tǒng),其中,所述診斷子系統(tǒng)還包括越界檢測模塊,用于通過判斷內(nèi)存塊的標(biāo)記是否被破壞掉進(jìn)行內(nèi)存使用越界檢測;泄露檢測模塊,用于通過記錄分配和釋放的情況進(jìn)行內(nèi)存泄露檢測;釋放檢測模塊,用于通過判斷是否找到對應(yīng)的內(nèi)存塊或內(nèi)存塊的狀態(tài)是否處于正在使用狀態(tài)進(jìn)行多次釋放檢測; 指針檢測模塊,用于通過判斷內(nèi)存塊的地址范圍是否處于所管理的內(nèi)存區(qū)域進(jìn)行釋放非法指針檢測;異常大檢測模塊,用于通過判斷申請的內(nèi)存塊的大小是否超出所允許的范圍來進(jìn)行申請內(nèi)存塊異常大檢測;以及使用異常檢測模塊,用于通過判斷用戶自定義的判斷條件是否滿足進(jìn)行用戶自定義的內(nèi)存使用異常檢測。為了實(shí)現(xiàn)上述目的,本發(fā)明還提供了一種存儲管理方法,用于對存儲管理系統(tǒng)進(jìn)行存儲管理,其特征在于,包括步驟一,分配子系統(tǒng)對用戶系統(tǒng)的內(nèi)存進(jìn)行分配并管理;步驟二,統(tǒng)計信息子系統(tǒng)獲取用戶系統(tǒng)的內(nèi)存使用分布情況的統(tǒng)計信息,分配子系統(tǒng)結(jié)合根據(jù)用戶系統(tǒng)的內(nèi)存使用分布情況所配置的策略與內(nèi)存分配和回收算法高效分配和回收用戶系統(tǒng)的內(nèi)存,診斷子系統(tǒng)診斷程序代碼中的內(nèi)存使用異常。所述的存儲管理方法,其中,在所述步驟一之前,還包括對所述存儲管理系統(tǒng)進(jìn)行初始化的步驟,具體是獲取要管理的系統(tǒng)內(nèi)存,查看用戶是否配置自定義策略,如是,則根據(jù)該自定義策略將該系統(tǒng)內(nèi)存區(qū)分為高頻區(qū)域和一般區(qū)域,并進(jìn)行初始化,如否,則根據(jù)缺省策略將該系統(tǒng)內(nèi)存區(qū)分為高頻區(qū)域和一般區(qū)域,并進(jìn)行初始;對所述分配子系統(tǒng)及其結(jié)構(gòu)、所述統(tǒng)計信息子系統(tǒng)及其結(jié)構(gòu)、所述診斷子系統(tǒng)及其結(jié)構(gòu)以及所述存儲管理系統(tǒng)的自身安全性保護(hù)進(jìn)行初始化。所述的存儲管理方法,其中,所述步驟一中,還包括對用戶系統(tǒng)的內(nèi)存進(jìn)行分配的步驟,具體是調(diào)用分配函數(shù)進(jìn)行內(nèi)存分配,指定申請大小,根據(jù)申請大小找出高頻區(qū)域、一般區(qū)域?qū)?yīng)的空閑塊鏈表;從該空閑塊鏈表中查找與申請大小對應(yīng)的空閑塊,若找到,將該空閑塊從該空閑塊鏈表中刪除,并標(biāo)記該空閑塊已分配,進(jìn)入下一步,若未找到,從大一級的空閑塊鏈表中查找若找到,則對找到的大一級空閑塊進(jìn)行分割處理,并標(biāo)記該大一級空閑塊,進(jìn)入下一步,若未找到,則進(jìn)一步查找有無更大的空閑塊,若無,則啟動合并掃描處理,并當(dāng)合并成功時,對該大一級空閑塊進(jìn)行分割處理,并標(biāo)記該大一級空閑塊,進(jìn)入下一步;得到分配塊的首地址,加入統(tǒng)計信息子系統(tǒng)進(jìn)行統(tǒng)計,對該分配塊進(jìn)行診斷,并返回該分配塊的首地址。
所述的存儲管理方法,其中,所述步驟一中,還包括對用戶系統(tǒng)的內(nèi)存進(jìn)行釋放的步驟,具體是調(diào)用釋放函數(shù),指定待釋放塊的首地址;根據(jù)該首地址找出對應(yīng)的分配塊,根據(jù)配置策略決定是否對該分配塊的周圍塊進(jìn)行合并若是,則對周圍塊進(jìn)行雙向合并,并將得到的合并區(qū)間進(jìn)行處理,標(biāo)記該合并區(qū)間可用,進(jìn)入下一步,若否,直接進(jìn)入下一步;啟動統(tǒng)計信息子系統(tǒng)進(jìn)行處理,啟動診斷子系統(tǒng)進(jìn)行診斷;將空閑塊加入空閑鏈表。所述的存儲管理方法,其中,所述步驟二中,還包括
統(tǒng)計信息子系統(tǒng)對周圍塊合并的次數(shù)和周圍塊的信息進(jìn)行統(tǒng)計;診斷子系統(tǒng)對分配和合并過程中的內(nèi)部邏輯是否正確進(jìn)行診斷。與現(xiàn)有技術(shù)相比,本發(fā)明的有益技術(shù)效果是I)分配算法的空間效率高,碎片少,分配和釋放的時間效率高;2)算法具有可調(diào)整與可配置的柔性,實(shí)現(xiàn)用戶的需求交互,用戶根據(jù)系統(tǒng)的特點(diǎn),配置自己系統(tǒng)需要的策略,空間利用率更高,碎片更少,并且還能大幅提升時間效率;3)完整性。作為內(nèi)存管理系統(tǒng)的輔助功能的統(tǒng)計子系統(tǒng),診斷子系統(tǒng)齊全。統(tǒng)計包括總體統(tǒng)計信息和區(qū)段(以分配塊大小為單位)統(tǒng)計的各種信息。診斷包括內(nèi)存泄露,越界檢查,多次釋放,釋放非法指針,分配塊過大。還支持用戶自定義的異常檢測;4)信息的精確性。統(tǒng)計子系統(tǒng)比一般嵌入式存儲管理系統(tǒng)提供更精確更完整的信息。診斷子系統(tǒng)能夠把問題定位到源碼級,直接輸出問題所在點(diǎn),如文件名、函數(shù)名、行號;5)實(shí)時性。問題一旦出現(xiàn),馬上報告出來。即使問題很嚴(yán)重(如程序崩潰),用戶也可以在第一時間看到問題所在。
圖I為本發(fā)明的存儲管理系統(tǒng)結(jié)構(gòu)圖;圖2為本發(fā)明的存儲管理系統(tǒng)的初始化流程圖;圖3為本發(fā)明的存儲管理系統(tǒng)的內(nèi)存分配流程圖;圖4為本發(fā)明的存儲管理系統(tǒng)的內(nèi)存釋放流程圖。
具體實(shí)施例方式以下結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)描述,但不作為對本發(fā)明的限定。如圖I所示,為本發(fā)明的存儲管理系統(tǒng)結(jié)構(gòu)圖。整個存儲管理系統(tǒng)100分為三個部分分配子系統(tǒng)10、統(tǒng)計信息子系統(tǒng)20、診斷子系統(tǒng)30。分配子系統(tǒng)10,主要負(fù)責(zé)內(nèi)存的分配和回收,為存儲管理系統(tǒng)100的主要部分,用于通過一個柔性的可以配置的、高效的分配和回收算法來管理一塊系統(tǒng)內(nèi)存,通過分配和釋放的程序接口得到或者釋放所使用的內(nèi)存塊。同時使得開發(fā)人員可以根據(jù)自己系統(tǒng)的實(shí)際情況(比如對內(nèi)存塊大小的需求分布)來靈活配置策略,然后告知分配子系統(tǒng)10,分配子系統(tǒng)10結(jié)合所配置的策略與內(nèi)存分配和回收算法高效分配和回收用戶系統(tǒng)的內(nèi)存,以優(yōu)化用戶系統(tǒng)的內(nèi)存使用。
統(tǒng)計信息子系統(tǒng)20,連接分配子系統(tǒng)10,主要用于提供用戶系統(tǒng)的內(nèi)存使用的統(tǒng)計信息,協(xié)助開發(fā)人員了解系統(tǒng)的內(nèi)存使用分布情況的統(tǒng)計信息,以利于分配子系統(tǒng)10優(yōu)化系統(tǒng)的內(nèi)存使用。統(tǒng)計信息子系統(tǒng)20提供的統(tǒng)計信息包括用戶系統(tǒng)中使用塊大小的頻度統(tǒng)計,使用內(nèi)存大小和峰值等信息。用戶可以根據(jù)這些統(tǒng)計信息生成自己的配置策略,以使內(nèi)存的分配和回收更加高效。診斷子系統(tǒng)30,連接分配子系統(tǒng)10,為用戶的內(nèi)存使用提供診斷服務(wù),幫助開發(fā)人員診斷程序代碼中有沒有內(nèi)存使用異常。診斷子系統(tǒng)30支持的異常檢測包括內(nèi)存泄露、多次釋放、內(nèi)存使用越界、釋放非法指針、申請內(nèi)存塊異常大、用戶自定義的內(nèi)存使用異常、分配子系統(tǒng)內(nèi)部邏輯診斷。診斷子系統(tǒng)30進(jìn)一步包括越界檢測模塊311、泄露檢測模塊312、釋放檢測模塊 313、指針檢測模塊314、異常大檢測模塊315、使用異常檢測模塊316。進(jìn)一步地,越界檢測模塊311用于通過檢查內(nèi)存塊的標(biāo)記是否被破壞掉進(jìn)行內(nèi)存使用越界檢測。分配子系統(tǒng)10進(jìn)行內(nèi)存塊分配時,在每個內(nèi)存塊(實(shí)際內(nèi)存空間)的首尾都做一個標(biāo)記,這個標(biāo)記是特定的,越界檢測模塊311在釋放或者下一次申請的時候去檢查現(xiàn)有系統(tǒng)中每個內(nèi)存塊的標(biāo)記是否被破壞掉。如果被破壞掉,則認(rèn)為是一次內(nèi)存越界。這樣可以以近于實(shí)時的方式上報發(fā)現(xiàn)的位置和被破壞掉的內(nèi)存塊的分配位置。一般來講,大部分情況下一段程序操作了一塊內(nèi)存,發(fā)生了越界,首先會將所操作的內(nèi)存區(qū)域的首尾標(biāo)記破壞掉。進(jìn)一步地,泄露檢測模塊312,用于通過記錄分配和釋放的情況進(jìn)行內(nèi)存泄露檢測。當(dāng)分配子系統(tǒng)10分配時在數(shù)據(jù)塊的記錄結(jié)構(gòu)中記錄和分配位置,當(dāng)該塊釋放時清除該記錄。這樣,有兩種情況可以判定內(nèi)存泄露。第一是程序退出的時候,此時會檢查有哪些記錄還沒有清除,這些必然是內(nèi)存泄露的塊,所以可以在程序退出時報告給用戶。第二種情況是在程序運(yùn)行的時候動態(tài)分析,對那些頻繁分配內(nèi)存塊的地方實(shí)施監(jiān)測。如果隨著時間的延長內(nèi)存塊一直處于上升態(tài)勢,那么就會上報內(nèi)存泄露,同時指出其位置。進(jìn)一步地,釋放檢測模塊313用于當(dāng)內(nèi)存塊釋放時,由地址查找其對應(yīng)的塊結(jié)構(gòu),通過判斷是否找到對應(yīng)的內(nèi)存塊或內(nèi)存塊的狀態(tài)是否處于正在使用狀態(tài)進(jìn)行多次釋放檢測,如果找不到對應(yīng)的內(nèi)存塊或者找到的內(nèi)存塊的狀態(tài)不是正在使用狀態(tài),則定義為多次釋放,并上報釋放的代碼在程序中的具體位置。進(jìn)一步地,指針檢測模塊314用于當(dāng)內(nèi)存塊釋放時,由地址查找其對應(yīng)的塊結(jié)構(gòu),通過判斷內(nèi)存塊的地址范圍是否處于所管理的內(nèi)存區(qū)域進(jìn)行釋放非法指針檢測,如果內(nèi)存塊的地址范圍不處于所管理的內(nèi)存區(qū)域,則視為釋放非法指針,并上報釋放的代碼在程序中的具體位置。進(jìn)一步地,異常大檢測模塊315用于通過判斷申請的內(nèi)存塊的大小是否超出所允許的范圍來進(jìn)行申請內(nèi)存塊異常大檢測,當(dāng)申請的內(nèi)存塊太大超出所允許的范圍時,上報申請內(nèi)存塊在程序中的具體位置。進(jìn)一步地,使用異常檢測模塊316進(jìn)行用戶自定義的內(nèi)存使用異常的檢測的方式是診斷子系統(tǒng)30所特有??梢栽试S用戶自定義一些判斷條件,通過判斷條件是否滿足進(jìn)行用戶自定義的內(nèi)存使用異常檢測,當(dāng)判斷條件滿足時報告異常,作為用戶自定義的內(nèi)存使用異常。使用異常檢測模塊316可以根據(jù)用戶的定義邏輯去判斷這種類別異常的出現(xiàn)及具體位置。診斷子系統(tǒng)30進(jìn)行分配系統(tǒng)內(nèi)部邏輯診斷是對系統(tǒng)本身的邏輯錯誤檢查,在系統(tǒng)發(fā)布時會關(guān)掉這一檢測。用戶可以不關(guān)注這個功能。存儲管理系統(tǒng)100還進(jìn)一步包括初始化系統(tǒng)40,連接分配子系統(tǒng)10、統(tǒng)計信息子系統(tǒng)20、診斷子系統(tǒng)30,用于對分配子系統(tǒng)10、統(tǒng)計信息子系統(tǒng)20、診斷子系統(tǒng)30以及存儲管理系統(tǒng)100的自身安全性保護(hù)進(jìn)行初始化處理。分配子系統(tǒng)10、統(tǒng)計信息子系統(tǒng)20、診斷子系統(tǒng)30三個子系統(tǒng)協(xié)同工作。在初始化邏輯中初始化系統(tǒng)40均需要對他們進(jìn)行初始化。統(tǒng)計信息子系統(tǒng)20和診斷子系統(tǒng)30一般用在正式版本未發(fā)布前的測試和評估階段,當(dāng)版本正式發(fā)布時,只保留內(nèi)存分配子系統(tǒng)10。統(tǒng)計信息子系統(tǒng)20和診斷子系統(tǒng)30兩個模塊為外部服務(wù),為可選服務(wù)。分配子系統(tǒng)10是主子系統(tǒng),統(tǒng)計信息子系統(tǒng)20和診斷子系統(tǒng)30是輔助子系統(tǒng)。 分配子系統(tǒng)10負(fù)責(zé)內(nèi)存的分配和釋放,即傳統(tǒng)上的內(nèi)存管理,而統(tǒng)計信息子系統(tǒng)20和診斷子系統(tǒng)30是用來給用戶提供足夠的信息,幫助用戶根據(jù)統(tǒng)計信息對自己系統(tǒng)配置正確的策略,去定制存儲管理系統(tǒng),而診斷子系統(tǒng)30是幫助用戶去診斷自己系統(tǒng)中的缺陷。存儲管理系統(tǒng)100通過集成統(tǒng)計信息子系統(tǒng)20、診斷子系統(tǒng)30實(shí)現(xiàn)了用戶系統(tǒng)的信息統(tǒng)計和缺陷診斷。存儲管理系統(tǒng)100中最大的特點(diǎn)在于用戶可以根據(jù)自己系統(tǒng)中的特定情況來靈活配置一些策略,這些策略用來通知分配子系統(tǒng)10,如何初始化初始內(nèi)存塊才能使系統(tǒng)的分配達(dá)到最優(yōu)。此外,用戶還可以通過策略告知分配子系統(tǒng)10是否要預(yù)留出固定大小的塊,這些塊一旦被預(yù)留出來,在整個分配過程中不會被拆分。(一般情況下,如要分配一個16K大小的塊,但分配子系統(tǒng)10中已經(jīng)不存在16K大小的塊了,這時如果系統(tǒng)中存在32k大小的塊,32k大小塊會被拆分成16k)。策略可以描述如下[塊大小初始分配多少塊要不要被預(yù)留預(yù)留多少塊]存儲管理系統(tǒng)100的運(yùn)行主要分為三個過程系統(tǒng)初始化,分配過程和釋放過程。如圖2所示,為本發(fā)明的存儲管理系統(tǒng)的初始化流程圖。該初始化流程用于申請一塊要管理的系統(tǒng)內(nèi)存(大小可配置),查看用戶有沒有配置自定義策略,若無,則加載缺省配置策略。若有,則根據(jù)自定義配置策略初始化內(nèi)存區(qū)域,分為高頻區(qū)域和一般區(qū)域,進(jìn)行初始化,初始化的部分包括分配子系統(tǒng)及其結(jié)構(gòu)、統(tǒng)計信息子系統(tǒng)及其結(jié)構(gòu)、診斷子系統(tǒng)及其結(jié)構(gòu)、存儲管理系統(tǒng)自身安全性保護(hù)。上述初始化流程的具體步驟包括步驟200,存儲管理系統(tǒng)初始化;步驟201,獲得一塊要管理的系統(tǒng)內(nèi)存,該內(nèi)存大小可配置;步驟202,查看用戶有沒有配置自定義策略若有,則根據(jù)自定義配置策略初始化內(nèi)存區(qū)域,分為高頻區(qū)域和一般區(qū)域,并分別進(jìn)行初始化;若無,則加載缺省配置策略,根據(jù)缺省配置策略初始化內(nèi)存區(qū)域,分為高頻區(qū)域和一般區(qū)域,并分別進(jìn)行初始化;步驟203,對分配子系統(tǒng)及其結(jié)構(gòu)、統(tǒng)計信息子系統(tǒng)及其結(jié)構(gòu)、診斷子系統(tǒng)及其結(jié)構(gòu)、存儲管理系統(tǒng)自身安全性保護(hù)進(jìn)行初始化;步驟204,初始化結(jié)束。通過如上初始化流程完成了每個系統(tǒng)及其結(jié)構(gòu)的初始化,比如去建立系統(tǒng)所要用的數(shù)據(jù)結(jié)構(gòu)。因?yàn)槊總€系統(tǒng)都會有系統(tǒng)開銷,這些開銷用來記錄這個系統(tǒng)和它的子系統(tǒng)的運(yùn)行狀態(tài)和數(shù)據(jù),初始化的過程就是給這些開銷分配空間和賦予初始值的過程。如圖3所示,為本發(fā)明的存儲管理系統(tǒng)的內(nèi)存分配流程圖。該內(nèi)存分配流程的具體步驟如下步驟300,調(diào)用分配函數(shù)進(jìn)行內(nèi)存分配,指定申請大??;如char*p =malloc (size),其中malloc是分配函數(shù),size是分配的大小,p是返回內(nèi)存塊的首地址; 步驟301,根據(jù)申請大小,找出對應(yīng)大小的空閑鏈,高頻區(qū)域和一般區(qū)域都有此大小的鏈;步驟302,按該大小順次去查找高頻區(qū)域和一般區(qū)域的兩個空閑塊鏈表,去查找對應(yīng)大小的空閑塊若能找到,則轉(zhuǎn)入步驟307 ;若未找到,則進(jìn)入步驟303 ;步驟303,去更大一級的塊鏈表查找空閑塊若能找到,則進(jìn)入步驟305 ;若未找到,則進(jìn)入步驟304 ;步驟304,判斷有沒有更大的空閑塊,若有,則返回步驟303,若沒有,則啟動合并掃描處理。若合并成功,進(jìn)入步驟305 ;若合并不成功,則返回空指針,表示已經(jīng)分配失?。徊襟E305,按照配置策略對該大一級的空閑塊進(jìn)行分割等處理,先分割成次大的空閑塊,再在余下的空閑塊中分割出再小一級的空閑塊來(如一個31k的塊可以分割成16k+8k+4k+2k+lk大小的空閑塊來),并把這些分割好的空閑塊放到合適的位置以便快速查找時迅速找到,標(biāo)記分配塊,轉(zhuǎn)入步驟307 ;步驟306,從空閑鏈中刪除標(biāo)記該塊已使用(分配不成功,返回空指針);步驟307,通過標(biāo)記分配塊得到分配塊的首地址;空閑塊和分配塊均屬于同一來源。分配子系統(tǒng)中是以塊為單位進(jìn)行分配。每個塊都有一個數(shù)據(jù)結(jié)構(gòu)去描述它,其中包括起始地址、塊大小、有沒有分配等信息。初始化時,分配子系統(tǒng)將要管理的內(nèi)存區(qū)域分成盡可能大的塊,并將這些塊放到一個空閑鏈表中。這樣每次分配的時候,就可以從空閑鏈表中直接去取,加快速度,取的時候按最小和最適匹配去做。一個空閑塊一旦分配出去,則要從空閑鏈表中移出,并標(biāo)記為已經(jīng)分配,該空閑塊則為分配塊。步驟308,加入統(tǒng)計子系統(tǒng)進(jìn)行統(tǒng)計,對該塊進(jìn)行診斷預(yù)處理,返回該塊首地址。如圖4所示,為本發(fā)明的存儲管理系統(tǒng)的內(nèi)存釋放流程圖。步驟400,調(diào)用釋放函數(shù),指定釋放塊首地址;步驟401,根據(jù)首地址,找出對應(yīng)分配塊,根據(jù)用戶配置的策略決定對周圍塊(即周圍內(nèi)存區(qū)間)是否合并,啟動合并若合并成功,則進(jìn)入步驟402,若合并失敗,則進(jìn)入步驟404 ;步驟402,對周圍內(nèi)存區(qū)間進(jìn)行雙向合并;步驟403,將最終合并區(qū)間進(jìn)行處理,標(biāo)記可用;
步驟404,啟動統(tǒng)計信息子系統(tǒng)20處理,啟動診斷子系統(tǒng)30進(jìn)行診斷;該步驟中,統(tǒng)計信息子系統(tǒng)20主要是對合并的次數(shù)和塊信息進(jìn)行統(tǒng)計,以便讓用戶調(diào)整策略來盡量減少合并;而診斷子系統(tǒng)30可以診斷分配子系統(tǒng)10分配和合并過程中的內(nèi)部邏輯是否正確;分配和釋放是聯(lián)系在一起的,都屬于分配子系統(tǒng)。內(nèi)部邏輯診斷在整個分配和釋放過程中都會有。合并是周圍內(nèi)存區(qū)間的合并,內(nèi)存區(qū)間即是塊,所以合并是塊數(shù)據(jù)結(jié)構(gòu)的
合并,二者是一致的。步驟405,將空閑塊加入空閑鏈表。本發(fā)明提供的存儲管理系統(tǒng)已經(jīng)實(shí)際地發(fā)展出完整的應(yīng)用程序,已經(jīng)過無數(shù)次的運(yùn)作測試,例如 I,經(jīng)過兩個小時的連續(xù)調(diào)動內(nèi)存操作,無內(nèi)存泄露狀況;2,經(jīng)過兩個小時的連續(xù)調(diào)動內(nèi)存操作,無顯著增加內(nèi)存碎片;3,經(jīng)過兩個小時的連續(xù)調(diào)動內(nèi)存操作,無崩潰異常出現(xiàn)。本發(fā)明提高嵌入式存儲管理系統(tǒng)的空間利用效率和運(yùn)行的時間效率,降低生產(chǎn)成本,提高利潤率;提供完整、準(zhǔn)確、實(shí)時的診斷信息和統(tǒng)計分布信息,幫助開發(fā)人員迅速定位系統(tǒng)存在的問題,提高開發(fā)效率,縮短開發(fā)周期,提升系統(tǒng)質(zhì)量。當(dāng)然,本發(fā)明還可有其它多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明做出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種存儲管理系統(tǒng),其特征在于,包括 分配子系統(tǒng),用于結(jié)合根據(jù)用戶系統(tǒng)的內(nèi)存使用分布情況所配置的策略與內(nèi)存分配和回收算法高效分配和回收用戶系統(tǒng)的內(nèi)存,以優(yōu)化用戶系統(tǒng)的內(nèi)存使用; 統(tǒng)計信息子系統(tǒng),連接所述分配子系統(tǒng),用于獲取用戶系統(tǒng)的內(nèi)存使用分布情況的統(tǒng)計信息,以便于所述分配子系統(tǒng)高效分配和回收用戶系統(tǒng)的內(nèi)存; 診斷子系統(tǒng),連接所述分配子系統(tǒng),用于診斷用戶系統(tǒng)的內(nèi)存使用異常。
2.根據(jù)權(quán)利要求I所述的存儲管理系統(tǒng),其特征在于,還包括 初始化系統(tǒng),連接所述分配子系統(tǒng)、所述統(tǒng)計信息子系統(tǒng)、所述診斷子系統(tǒng),用于對所述分配子系統(tǒng)及其結(jié)構(gòu)、所述統(tǒng)計信息子系統(tǒng)及其結(jié)構(gòu)、所述診斷子系統(tǒng)及其結(jié)構(gòu)以及所述存儲管理系統(tǒng)的安全性保護(hù)進(jìn)行初始化處理。
3.根據(jù)權(quán)利要求I或2所述的存儲管理系統(tǒng),其特征在于,所述統(tǒng)計信息子系統(tǒng)獲取的統(tǒng)計信息包括用戶系統(tǒng)中使用塊大小的頻度統(tǒng)計,使用內(nèi)存大小和峰值。
4.根據(jù)權(quán)利要求I或2所述的存儲管理系統(tǒng),其特征在于,所述配置的策略中的信息包括塊大小、初始分配多少塊、要不要被預(yù)留、預(yù)留多少塊。
5.根據(jù)權(quán)利要求I或2所述的存儲管理系統(tǒng),其特征在于,所述診斷子系統(tǒng)還包括 越界檢測模塊,用于通過判斷內(nèi)存塊的標(biāo)記是否被破壞掉進(jìn)行內(nèi)存使用越界檢測; 泄露檢測模塊,用于通過記錄分配和釋放的情況進(jìn)行內(nèi)存泄露檢測; 釋放檢測模塊,用于通過判斷是否找到對應(yīng)的內(nèi)存塊或內(nèi)存塊的狀態(tài)是否處于正在使用狀態(tài)進(jìn)行多次釋放檢測; 指針檢測模塊,用于通過判斷內(nèi)存塊的地址范圍是否處于所管理的內(nèi)存區(qū)域進(jìn)行釋放非法指針檢測; 異常大檢測模塊,用于通過判斷申請的內(nèi)存塊的大小是否超出所允許的范圍來進(jìn)行申請內(nèi)存塊異常大檢測;以及 使用異常檢測模塊,用于通過判斷用戶自定義的判斷條件是否滿足進(jìn)行用戶自定義的內(nèi)存使用異常檢測。
6.一種存儲管理方法,用于對存儲管理系統(tǒng)進(jìn)行存儲管理,其特征在于,包括 步驟一,分配子系統(tǒng)對用戶系統(tǒng)的內(nèi)存進(jìn)行分配并管理; 步驟二,統(tǒng)計信息子系統(tǒng)獲取用戶系統(tǒng)的內(nèi)存使用分布情況的統(tǒng)計信息,分配子系統(tǒng)結(jié)合根據(jù)用戶系統(tǒng)的內(nèi)存使用分布情況所配置的策略與內(nèi)存分配和回收算法高效分配和回收用戶系統(tǒng)的內(nèi)存,診斷子系統(tǒng)診斷程序代碼中的內(nèi)存使用異常。
7.根據(jù)權(quán)利要求6所述的存儲管理方法,其特征在于,在所述步驟一之前,還包括對所述存儲管理系統(tǒng)進(jìn)行初始化的步驟,具體是 獲取要管理的系統(tǒng)內(nèi)存,查看用戶是否配置自定義策略,如是,則根據(jù)該自定義策略將該系統(tǒng)內(nèi)存區(qū)分為高頻區(qū)域和一般區(qū)域,并進(jìn)行初始化,如否,則根據(jù)缺省策略將該系統(tǒng)內(nèi)存區(qū)分為高頻區(qū)域和一般區(qū)域,并進(jìn)行初始; 對所述分配子系統(tǒng)及其結(jié)構(gòu)、所述統(tǒng)計信息子系統(tǒng)及其結(jié)構(gòu)、所述診斷子系統(tǒng)及其結(jié)構(gòu)以及所述存儲管理系統(tǒng)的自身安全性保護(hù)進(jìn)行初始化。
8.根據(jù)權(quán)利要求7所述的存儲管理方法,其特征在于,所述步驟一中,還包括對用戶系統(tǒng)的內(nèi)存進(jìn)行分配的步驟,具體是調(diào)用分配函數(shù)進(jìn)行內(nèi)存分配,指定申請大小,根據(jù)申請大小找出高頻區(qū)域、一般區(qū)域?qū)?yīng)的空閑塊鏈表; 從該空閑塊鏈表中查找與申請大小對應(yīng)的空閑塊,若找到,將該空閑塊從該空閑塊鏈表中刪除,并標(biāo)記該空閑塊已分配,進(jìn)入下一步,若未找到,從大一級的空閑塊鏈表中查找若找到,則對找到的大一級空閑塊進(jìn)行分割處理,并標(biāo)記該大一級空閑塊,進(jìn)入下一步,若未找到,則進(jìn)一步查找有無更大的空閑塊,若無,則啟動合并掃描處理,并當(dāng)合并成功時,對該大一級空閑塊進(jìn)行分割處理,并標(biāo)記該大一級空閑塊,進(jìn)入下一步; 得到分配塊的首地址,加入統(tǒng)計信息子系統(tǒng)進(jìn)行統(tǒng)計,對該分配塊進(jìn)行診斷,并返回該分配塊的首地址。
9.根據(jù)權(quán)利要求7所述的存儲管理方法,其特征在于,所述步驟一中,還包括對用戶系統(tǒng)的內(nèi)存進(jìn)行釋放的步驟,具體是 調(diào)用釋放函數(shù),指定待釋放塊的首地址; 根據(jù)該首地址找出對應(yīng)的分配塊,根據(jù)配置策略決定是否對該分配塊的周圍塊進(jìn)行合并若是,則對周圍塊進(jìn)行雙向合并,并將得到的合并區(qū)間進(jìn)行處理,標(biāo)記該合并區(qū)間可用,進(jìn)入下一步,若否,直接進(jìn)入下一步; 啟動統(tǒng)計信息子系統(tǒng)進(jìn)行處理,啟動診斷子系統(tǒng)進(jìn)行診斷; 將空閑塊加入空閑鏈表。
10.根據(jù)權(quán)利要求9所述的存儲管理方法,其特征在于,所述步驟二中,還包括 統(tǒng)計信息子系統(tǒng)對周圍塊合并的次數(shù)和周圍塊的信息進(jìn)行統(tǒng)計; 診斷子系統(tǒng)對分配和合并過程中的內(nèi)部邏輯是否正確進(jìn)行診斷。
全文摘要
本發(fā)明公開了一種存儲管理系統(tǒng)及其存儲管理方法,其中該存儲管理系統(tǒng)包括分配子系統(tǒng),用于結(jié)合根據(jù)用戶系統(tǒng)的內(nèi)存使用分布情況所配置的策略與內(nèi)存分配和回收算法高效分配和回收用戶系統(tǒng)的內(nèi)存,以優(yōu)化用戶系統(tǒng)的內(nèi)存使用;統(tǒng)計信息子系統(tǒng),連接所述分配子系統(tǒng),用于獲取用戶系統(tǒng)的內(nèi)存使用分布情況的統(tǒng)計信息,以便于所述分配子系統(tǒng)高效分配和回收用戶系統(tǒng)的內(nèi)存;診斷子系統(tǒng),連接所述分配子系統(tǒng),用于診斷用戶系統(tǒng)的內(nèi)存使用異常。本發(fā)明提高嵌入式存儲管理系統(tǒng)的空間利用效率和運(yùn)行的時間效率;提供完整、準(zhǔn)確、實(shí)時的診斷信息和統(tǒng)計分布信息,幫助開發(fā)人員迅速定位系統(tǒng)存在的問題。
文檔編號G06F12/02GK102866953SQ201110190710
公開日2013年1月9日 申請日期2011年7月8日 優(yōu)先權(quán)日2011年7月8日
發(fā)明者張翀, 韓兆強(qiáng), 冀德 申請人:風(fēng)網(wǎng)科技(北京)有限公司