專利名稱:虛擬內(nèi)存區(qū)域的查詢、遍歷方法及裝置的制作方法
技術領域:
本發(fā)明實施例涉及通信技術,尤其涉及一種虛擬內(nèi)存區(qū)域的查詢、遍歷方法及裝置。
背景技術:
目前,Linux技術通常采用紅黑樹形式查詢虛擬內(nèi)存區(qū)域(virtual memory area, 以下簡稱vma)。具體來說,對于查詢第η個vma的過程來說,查詢函數(shù)find_Vma獲得內(nèi)存描述信息(mm)讀信號量,從地址m開始,確認地址m對應的vma是否在緩存vma的地址范圍內(nèi),若是,也即本次查詢命中緩存,則通過訪問緩存vma來查詢地址m對應的vma,并釋放讀信號量,若否,從根節(jié)點開始通過常規(guī)方式遍歷紅黑樹來查詢地址m對應的vma,并釋放讀信號量。由于查詢函數(shù)fincLvma在沒有命中緩存時,必須從根節(jié)點開始通過遍歷的方式查詢vma,因此,現(xiàn)有技術的查詢效率較低。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種虛擬內(nèi)存區(qū)域的查詢、遍歷方法及裝置,以提高vma的查詢效率。本發(fā)明實施例提供了一種虛擬內(nèi)存區(qū)域的查詢方法,包括確定與查詢地址對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰 vma的地址范圍;若是,則通過線索紅黑樹的節(jié)點上的線索查詢所述vma,所述節(jié)點為所述緩存vma 對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針。本發(fā)明實施例還提供了一種虛擬內(nèi)存區(qū)域的遍歷方法,包括獲得內(nèi)存描述信息mm的讀信號量,確定查詢地址η對應的vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍; 若是,則通過線索紅黑樹的節(jié)點上的線索查詢所述查詢地址η對應的vma,釋放讀信號量,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針;將當前的緩存vma的地址范圍更新為所述查詢地址η對應的vma的地址范圍 (vma_start, vm_ end),并將查詢地址n+1更新為所述查詢地址η對應的vma的vma_end, 其中,所述vma_Start為所述查詢地址η對應的vma的的首地址,所述Vma_end為所述查詢地址η對應的vma的尾地址;獲得mm的讀信號量,確定所述查詢地址n+1對應的vma是當前的緩存vma的后相鄰vma,通過線索紅黑樹的節(jié)點上的線索查詢所述當前緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查詢所述查詢地址n+1對應的vma ;循環(huán)重復上述步驟,直到遍歷至少一部分地址空間。本發(fā)明實施例還提供了一種虛擬內(nèi)存區(qū)域的查詢裝置,包括確定模塊,用于確定與查詢地址對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍;線索查詢模塊,用于所述確定模塊確定所述vma在所述緩存vma的相鄰范圍內(nèi),則通過線索紅黑樹上的節(jié)點上的線索查詢所述vma,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針。本發(fā)明實施例還提供了一種虛擬內(nèi)存區(qū)域的遍歷裝置,包括確定模塊,用于確定與查詢地址η對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍;線索查詢模塊,用于所述確定模塊確定所述vma在所述緩存vma的相鄰范圍內(nèi),則通過線索紅黑樹的節(jié)點上的線索查詢所述vma,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針;緩存更新模塊,用于根據(jù)所述線索查詢模塊查詢的查詢地址η對應的vma,將當前的緩存vma更新為所述查詢地址η對應的vma的地址范圍(vma_start,vma_end),并將查詢地址n+1更新為所述查詢地址η對應的vma的vma_end,其中,所述vma_start為所述查詢地址η對應的vma的的首地址,所述vma_end為所述查詢地址η對應的vma的尾地址。本發(fā)明實施例通過預先對地址空間中的vma設置vma相鄰范圍,將原紅黑樹擴展為線索紅黑樹,在現(xiàn)有技術確認查詢地址對應的vma是否是緩存vma的基礎上,增加了緩存 vma的相鄰范圍的確認,采用本發(fā)明實施例提供的遍歷vma的方法可以保證在遍歷地址空間時,相鄰vma的確認總能得到滿足,也就是說,確定查詢地址對應的vma總是是緩存vma 的相鄰vma,通過線索紅黑樹的節(jié)點上的線索總能查詢所述查詢地址對應的vma,因此,提高了 vma查詢的緩存命中率,提升了 vma的查詢效率。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例一提供的虛擬內(nèi)存區(qū)域的查詢方法的流程圖;圖2為本發(fā)明實施例二提供的虛擬內(nèi)存區(qū)域的查詢方法的流程圖;圖3為本發(fā)明實施例二提供的vma相鄰范圍的結構示意圖;圖4為本發(fā)明實施例二提供的線索紅黑樹的結構示意圖;圖5為本發(fā)明實施例一提供的虛擬內(nèi)存區(qū)域的遍歷方法流程圖;圖6為本發(fā)明實施例二提供的虛擬內(nèi)存區(qū)域的遍歷方法流程圖7為本發(fā)明實施例一提供的虛擬內(nèi)存區(qū)域的查詢裝置結構示意圖;圖8為本發(fā)明實施例二提供的虛擬內(nèi)存區(qū)域的查詢裝置結構示意圖;圖9為本發(fā)明實施例二提供的虛擬內(nèi)存區(qū)域的遍歷裝置結構示意圖;圖10為本發(fā)明實施例二提供的虛擬內(nèi)存區(qū)域的遍歷裝置結構示意圖。
具體實施例方式為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍?,F(xiàn)有技術通常以紅黑樹查詢方式查找指定地址對應的vma,下面以查詢地址0對應的vma為例具體說明現(xiàn)有技術所述的一種vma的查詢方法,具體包括確認地址0對應的vma是否在緩存的vma地址范圍內(nèi);若是,則通過訪問緩存的vma查詢地址0對應的vma ;若否,則從根節(jié)點開始通過常規(guī)方式遍歷紅黑樹查詢地址0對應的vma。若要遍歷η個vma,即查詢η個vma,則需要根據(jù)查詢地址0對應的vma更新當前的緩存vma,具體來說是將當前的緩存vma的地址范圍更新為地址0對應的vma的地址范圍 (vma_start,vma_end),并將對地址1對應的vma (下一個vma)的查詢地址更新為地址0對應的vma (上一個vma)的vma_end ;因此,在確認地址1對應的vma是否是緩存的vma (地址0對應的vma)時,肯定可以確認地址1對應的vma不在緩存的vma (地址0對應的vma) 地址范圍內(nèi),依次類推,對于后續(xù)新的地址對應的vma的查詢,也可以確定后續(xù)新的地址對應的vma不在更新后的緩存的vma(上一個vma)的地址范圍內(nèi),也就是說緩存命中率幾乎為0,因此,每一次都需要從根節(jié)點通過常規(guī)方式去遍歷紅黑樹的形式查詢新的地址對應的 vma0從上述現(xiàn)有技術公開的技術方案中可以看出,發(fā)明人認為現(xiàn)有技術中至少存在如下問題現(xiàn)有技術使用紅黑樹查詢方式遍歷vma時,每一次查詢新地址對應的vma,都將當前緩存vma更新為上一個查詢地址對應的vma,因此在查詢下一個新的vma時,可以確認下一個新的vma肯定不在更新后的緩存的vma地址范圍內(nèi),也就是說,對vma紅黑樹中的訪問緩存命中率幾乎為0,若需要遍歷η個vma,實際上就是η次從根節(jié)點通過常規(guī)方式查詢紅黑樹的方式查詢vma的過程,由于每次從根節(jié)點通過常規(guī)方式遍歷紅黑樹的形式查詢vma 的時間復雜度是O(Iogn),所以整個遍歷的時間復雜度變成Ofclogn),無疑增加了遍歷vma 的時間復雜度,因此,現(xiàn)有技術現(xiàn)有技術使用紅黑樹查詢方式遍歷vma的查詢效率較低。鑒于上述現(xiàn)有技術中所存在的問題,本發(fā)明實施例提供如下的技術方案,可以提高訪問緩存的命中率,從而提高vma的查詢效率。圖1為本發(fā)明虛擬內(nèi)存區(qū)域的查詢方法實施例一的流程圖,如圖1所示,本實施例的方法可以包括步驟101、確定與查詢地址對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi);
其中,緩存vma的相鄰范圍包括緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍。步驟102、若是,則通過線索紅黑樹的節(jié)點上的線索查詢所述vma ;其中,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針。在上述步驟中,若確定所述查詢地址對應的vma剛好是緩存vma,則直接訪問緩存 vma查詢所述查詢地址對應的vma ;若不是,則進一步確認所述查詢地址對應的vma是否在緩存vma的相鄰范圍內(nèi),若確認所述查詢地址對應的vma是緩存vma的前相鄰vma,則通過線索紅黑樹的節(jié)點上的線索找到緩存vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查詢所述查詢地址對應的vma ;若確認所述查詢地址對應的vma是緩存vma的后相鄰vma,則通過線索紅黑樹的節(jié)點上的線索找到緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查詢所述查詢地址對應的vma。本實施例,通過緩存vma的相鄰范圍的確認并將原紅黑樹擴展為線索紅黑樹,在現(xiàn)有技術確認查詢地址對應的vma是否是緩存vma的基礎上,增加了緩存vma的相鄰范圍的確認,若確定查詢地址對應的vma是緩存vma的相鄰vma,則通過線索紅黑樹的節(jié)點上的線索查找所述查詢地址對應的vma ;相較于現(xiàn)有技術只通過緩存vma的確認的方法,在一定程度上提高訪問緩存的命中率,進而提高了 vma的查詢效率。下面采用一個具體的實施例對上述圖1所示技術方案進行詳細說明。圖2為本發(fā)明虛擬內(nèi)存區(qū)域的查詢方法實施例二的流程圖,圖3為本發(fā)明實施例二提供的vma相鄰范圍的結構示意圖,圖4為本發(fā)明實施例二提供的線索紅黑樹的結構示意圖,如圖2 4所示,本實施例的方法可以包括步驟201、獲得內(nèi)存描述信息(mm)的讀信號量,確認地址η對應的vma是否在緩存的vma的地址范圍內(nèi),若是,則執(zhí)行步驟202,若否,則執(zhí)行步驟203。步驟202、通過訪問緩存的vma直接查詢所述地址η對應的vma,并釋放讀信號量。步驟203、確認地址η對應的vma是否在緩存vma的相鄰vma范圍內(nèi),若是,則執(zhí)行步驟204,若否,則執(zhí)行步驟205。在本步驟中,本發(fā)明實施例二提供的所述緩存vma的相鄰范圍包括所述緩存vma 的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍。所述緩存vma的相鄰范圍的示意圖如圖3所示,因為vma地址范圍的半包含性,即vma_end不在該vma的地址范圍內(nèi),所以在設置緩存vma的相鄰范圍時,將緩存vma的前相鄰vma的前相鄰vma的尾地址作為該緩存vma相鄰范圍的起始地址,并將緩存vma的后相鄰vma的尾地址作為該緩存 vma相鄰范圍的結束地址。當需要確定與查詢地址η對應的vma是否在緩存vma的相鄰范圍內(nèi)時,可以通過確認所述查詢地址η是否在緩存vma的相鄰vma的地址范圍內(nèi),若所述查詢地址η是在緩存vma的的前相鄰vma的前相鄰vma的尾地址和緩存vma的前相鄰的尾地址之間,則確定所述查詢地址η對應的vma為緩存vma的前相鄰vma ;若所述查詢地址η在緩存vma的尾地址和緩存vma的后相鄰的vma的尾地址之間,則確定所述查詢地址η對應的vma為緩存 vma的后相鄰vma。這里需要指出,通過確認查詢地址η是否在緩存vma的相鄰vma的地址范圍內(nèi)來確認緩存vma的相鄰vma的方法只是其中的一個實現(xiàn)方案,但緩存vma的相鄰范圍的確認并不局限于此方案。步驟204、通過線索紅黑樹的節(jié)點上的線索查詢所述地址η對應的vma。在本步驟中,本發(fā)明實施例二提供的所述線索紅黑樹的結構示意圖如圖4所示, 通過在原系統(tǒng)中的vma紅黑樹上的每一個vma節(jié)點處增加指向其前驅節(jié)點和后繼節(jié)點的的線索,將原紅黑樹擴展為線索紅黑樹,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針。若確定與查詢地址η對應的vma是緩存vma的前相鄰vma,則通過線索紅黑樹的節(jié)點上的線索找到緩存的vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查詢地址η對應的vma,并釋放讀信號量;若確定地址η對應的vma是緩存的vma的后相鄰,則通過線索紅黑樹的節(jié)點上的的線索找到緩存的vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查詢地址η對應的vma,并釋放
讀信號量。步驟205、從根節(jié)點通過常規(guī)方式遍歷線索紅黑樹查詢地址η對應的vma,并釋放
讀信號量。本實施例,通過預先設置緩存vma的相鄰范圍并將原紅黑樹擴展為線索紅黑樹, 在現(xiàn)有技術確認查詢地址對應的vma是否是緩存vma的基礎上,增加了緩存vma的相鄰范圍的確認,若確定查詢地址對應的vma是緩存vma的相鄰vma,則通過線索紅黑樹的節(jié)點上的線索查找所述查詢地址對應的vma ;相較于現(xiàn)有技術只通過緩存vma的確認的方法,在一定程度上提高訪問緩存的命中率,進而提高了 vma的查詢效率,同時,在本實施例中,由于查詢所述地址η對應的vma時要釋放讀信號量,因此,保證了在查詢vma時可以對所述vma 進行讀操作以外的其他操作,如對所述vma可以修改。圖5為本發(fā)明虛擬內(nèi)存區(qū)域的遍歷方法實施例一的流程圖,如圖5所示,本實施例的方法可以包括步驟501、獲得內(nèi)存描述信息mm的讀信號量,確定查詢地址η對應的vma是否在緩存vma的相鄰范圍內(nèi)。其中,緩存vma的相鄰范圍包括緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍。步驟502、若是,則通過線索紅黑樹的節(jié)點上的線索查詢所述查詢地址η對應的 vma,釋放讀信號量,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針。在本步驟中,若確定所述查詢地址對應的vma剛好是緩存vma,則直接訪問緩存 vma查詢所述查詢地址對應的vma ;若不是,則進一步確認所述查詢地址η對應的vma是否在緩存vma的相鄰范圍內(nèi),若確認所述查詢地址η對應的vma是緩存vma的前相鄰vma,則通過線索紅黑樹的節(jié)點上的線索找到緩存vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查詢所述查詢地址η對應的vma ;若確認所述查詢地址η對應的vma是緩存vma的后相鄰vma,則通過線索紅黑樹的節(jié)點上的線索找到緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查詢所述查詢地址η對應的vma。步驟503、將當前的緩存vma的地址范圍更新為所述查詢地址η對應的vma的地址范圍(vma_start,vma_end),并將地址n+1對應的vma的查詢地址更新為所述查詢地址η對應的vma的vma_end,其中,所述vma_start為所述查詢地址η對應的vma的的首地址, 所述Vma_end為所述查詢地址η對應的vma的尾地址。步驟504、獲得mm的讀信號量,確定所述查詢地址n+1對應的vma是當前的緩存 vma的后相鄰vma,通過線索紅黑樹的節(jié)點上的線索查詢所述當前緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查詢所述查詢地址n+1對應的vma ;循環(huán)重復上述步驟,直到遍歷至少一部分地址空間。本實施例,通過預先設置緩存vma的相鄰范圍并將原紅黑樹擴展為線索紅黑樹, 在確定查詢地址η對應的vma是緩存vma的相鄰vma,通過線索紅黑樹的節(jié)點上的線索查詢所述查詢地址η對應的vma,并將當前緩存vma更新為所述地址η對應的vma,將對地址 n+1對應的vma的查詢地址更新為更新后的緩存vma(地址η對應的vma)的地址范圍,由于緩存vma相鄰范圍的設置,毫無疑問,可以確定地址n+1對應的vma是緩存vma (地址η對應vma)的后相鄰vma,重復步驟505,依次類推,下一個地址對應的vma總是緩存vma (上一個地址對應的vma)的后相鄰vma,因此,都可以通過線索紅黑樹的節(jié)點上的線索查詢所述 vma,相較于現(xiàn)有技術對訪問緩存命中率技術為0,本發(fā)明實施例提供的vma遍歷方法對訪問緩存的命中率幾乎為百分之百,因次,提高了 vma遍歷的效率。另外,本發(fā)明實施例的應用不限于在遍歷全部vma的時候,對于地址空間中任意連續(xù)的地址,遍歷其vma都可以通過本發(fā)明實施例提供的方法,如預先對地址空間中連續(xù)的地址n+m對應的vma進行相鄰vma范圍的設置,vma相鄰范圍的設置如上所述,這里不再贅述,在進行vma遍歷時,首先通過本發(fā)明實施例提供的技術方案查詢所述地址η對應的 vma,然后更新訪問緩存的vma和下一個地址對應vma的查找地址,由于下一個地址對應的 vma總是緩存vma(上一個vma)的后相鄰vma,總是可以通過線索紅黑樹的節(jié)點上的線索查詢所述連續(xù)地址n+m對應的每一個vma,直至對連續(xù)地址n+m對應的vma的遍歷結束。圖6為本發(fā)明虛擬內(nèi)存區(qū)域的遍歷方法實施例二的流程圖,如圖6所示,本實施例的方法可以包括步驟601、查詢函數(shù)獲得內(nèi)存描述信息(mm)讀信號量,從地址0開始,確認地址0 對應的vma是否在緩存的vma地址范圍內(nèi),若是,執(zhí)行步驟602,若否,則執(zhí)行步驟603。步驟602、通過訪問緩存vma直接查詢地址0對應的vma,并釋放讀信號量。步驟603、確認地址0對應的vma是否在緩存的vma的相鄰范圍內(nèi),若是,則執(zhí)行步驟604,若否,則執(zhí)行步驟605。在本步驟中,本發(fā)明實施例二提供的所述緩存vma的相鄰范圍包括所述緩存vma 的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍,所述緩存vma的相鄰范圍的示意圖如圖3所示,這里不再贅述。步驟604、通過線索紅黑樹的節(jié)點上的線索查詢所述查詢地址0對應的vma。在本步驟中,所使用的線索紅黑樹的結構示意圖如圖4所示,這里不再贅述。若確定與查詢地址0對應的vma是緩存vma的前相鄰vma,則通過線索紅黑樹的節(jié)點上的線索找到緩存的vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查詢地址0對應的vma,并釋放讀信號量;若確定地址0對應的vma是緩存的vma的后相鄰,則通過線索紅黑樹的節(jié)點上的的線索找到緩存的vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查詢地址0對應的vma,并釋放讀信號量。
10
步驟605、從根節(jié)點通過常規(guī)方式遍歷線索紅黑樹查詢地址0對應的vma,并釋放
讀信號量。步驟606、將當前緩存的vma更新為地址0對應的vma,并更新地址1對應的vma 的查找地址,即將緩存vma地址范圍更新為地址0對應的vma的地址范圍(vma_Start,vma_ end),將地址1對應的vma的查找地址更新為地址0對應的vma的vma_end。步驟607、獲得mm的讀信號量,確定地址1對應的vma是當前的緩存vma的后相鄰 vma0步驟608、通過線索紅黑樹的節(jié)點上的線索查詢緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查詢地址1對應的vma,釋放讀信號量。循環(huán)重復上述步驟,直到遍歷完整個地址空間。從上述步驟可知,由于預先對地址空間中的vma設置了 vma相鄰范圍,并在線索紅黑樹上的每一個vma節(jié)點處增加線索,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針,因此,在確認地址1對應的vma是否是更新后的緩存vma的的相鄰 vma時,因為更新后的緩存vma已經(jīng)為地址0對應的vma,毫無疑問的可以確定,地址1對應的vma是地址0對應的vma的后相鄰,此時,通過線索紅黑樹的節(jié)點上的線索找到緩存 vma (地址0對應的vma)的后繼節(jié)點,并通過該后繼節(jié)點查詢地址1對應的vma ;之后,根據(jù)地址1對應vma將訪問緩存更新為地址1對應的vma的地址范圍,并對地址2對應的vma 的查找地址更新為地址1對應的vma的vma_end,進行地址2對應的vma的查詢,依此類推, 若要遍歷η個vma,由于vma相鄰范圍的設置和線索紅黑樹的擴展,使得對緩存的vma的相鄰vma的確認總能得到滿足,并通過線索紅黑樹的節(jié)點上的線索都可以查詢下一個vma。但是,現(xiàn)有技術在通過紅黑樹查詢方式遍歷vma時,只確認查詢地址對應的vma是否是緩存vma的地址范圍,由于更新后的緩存vma總是查詢地址對應的vma的上一個vma, 毫無疑問可以確認查詢地址對應的vma肯定不在更新后的緩存的vma地址范圍內(nèi),也就是說,對vma紅黑樹中的訪問緩存命中率幾乎為0,沒有充分利用訪問緩存的命中效率。若通過紅黑樹形式遍歷η個vma,由于訪問緩存的命中率為0,因此,η個vma的查詢過程實際上是η次從根節(jié)點通過常規(guī)方式查詢紅黑樹的形式查詢vma的過程,由于每次從根節(jié)點通過常規(guī)方式遍歷紅黑樹的形式查詢vma的時間復雜度是O(Iogn),所以整個遍歷的時間復雜度變成Ofclogn),無疑增加了遍歷vma的時間復雜度。因此,應用本發(fā)明實施例提供虛擬內(nèi)存的遍歷方法在遍歷地址空間時,由于緩存的vma的相鄰vma的確認總能得到滿足,在緩存vma的整個相鄰范圍內(nèi)都可命中,通過線索紅黑樹的節(jié)點上的線索總是可以查找到所述查詢地址對應的vma,從而將整個遍歷過程的時間復雜度降低到O(n),提升了 vma的查詢效率,同時,應用本發(fā)明實施例提供的方法在查詢每一個vma的過程中都要釋放讀信號量,由此也保證了在遍歷過程中需要對vma進行讀操作以外的其他操作時,都可以用本發(fā)明實施例提供的方法進行vma遍歷。圖7為本發(fā)明虛擬內(nèi)存區(qū)域的查詢裝置實施例一的結構示意圖,如圖7所示,本實施例的裝置可以包括確定模塊11、線索查詢模塊12,其中,確定模塊11,用于確定與查詢地址對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi),緩存vma的相鄰范圍包括緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍;
線索查詢模塊12,用于所述確定模塊11確定所述vma在所述緩存vma的相鄰范圍內(nèi),則通過線索紅黑樹的節(jié)點上的線索查詢所述vma,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針。本實施例的裝置可以用于執(zhí)行圖1所示方法實施例的方法,其實現(xiàn)原理和技術效果類似,此處不再贅述。圖8為本發(fā)明虛擬內(nèi)存區(qū)域的查詢裝置實施例二的結構示意圖,如圖8所示,本實施例的裝置在圖7所示裝置的基礎上,進一步地,還可以包括存儲模塊13,該存儲模塊13, 用于存儲所述緩存vma的相鄰范圍,所述緩存vma的相鄰范圍的起始地址為所述緩存vma 的前相鄰vma的前相鄰vma的尾地址,所述相鄰vma范圍的結束地址為所述緩存vma的后相鄰vma的尾地址。確定模塊11,可以具體包括第一確定單元111和第二確定單元112, 其中,第一確定單元111,用于若所述查詢地址在緩存vma的前相鄰vma的前相鄰vma的尾地址和緩存vma的前相鄰的尾地址之間,則確定所述查詢地址對應的vma為緩存vma的前相鄰vma ;第二確定單元112,用于若所述查詢地址在緩存vma的尾地址和緩存vma的后相鄰的vma的尾地址之間,則確定所述查詢地址對應的vma為緩存vma的后相鄰vma。線索查詢模塊12,可以具體包括第一查詢單元121和第二查詢單元122,其中,第一查詢單元121,用于若所述第一確定單元確定與查詢地址對應的vma是前相鄰vma,則根據(jù)所述線索紅黑樹的節(jié)點上的線索查找到所述緩存vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查找所述vma ;第二查詢單元122,用于若所述第二確定單元確定與查詢地址對應的vma是后相鄰vma,則根據(jù)所述線索紅黑樹的節(jié)點上的線索查找到所述緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查找所述vma。本實施例的裝置可以用于執(zhí)行圖2所示方法實施例的方法,其實現(xiàn)原理和技術效果類似,此處不再贅述。圖9為本發(fā)明虛擬內(nèi)存區(qū)域的遍歷裝置實施例一的結構示意圖,如圖9所示,本實施例的裝置可以包括確定模塊21、線索查詢模塊22、緩存更新模塊23,其中確定模塊21,用于確定與查詢地址η對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍;線索查詢模塊22,用于所述確定模塊21確定所述vma在所述緩存vma的相鄰范圍內(nèi),則通過線索紅黑樹的節(jié)點上的線索查詢所述vma,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針;緩存更新模塊23,用于根據(jù)所述線索查詢模塊22查詢的查詢地址η對應的vma, 將當前的緩存vma更新為所述查詢地址η對應的vma的地址范圍(vma_start,vma_end), 并將查詢地址n+1更新為所述查詢地址η對應的vma的vma_end,其中,所述vma_start為所述查詢地址η對應的vma的的首地址,所述Vma_end為所述查詢地址η對應的vma的尾地址。本實施例的裝置可以用于執(zhí)行圖5所示方法實施例的方法,其實現(xiàn)原理和技術效果類似,此處不再贅述。圖10為本發(fā)明虛擬內(nèi)存區(qū)域的遍歷裝置實施例二的結構示意圖,如圖10所示,本實施例的裝置在圖9所示裝置的基礎上,進一步地,還可以包括存儲模塊M,該存儲模塊M,用于存儲所述緩存vma的相鄰范圍,所述緩存vma的相鄰范圍的起始地址為所述緩存 vma的前相鄰vma的前相鄰vma的尾地址,所述相鄰vma范圍的結束地址為所述緩存vma的后相鄰vma的尾地址。確定模塊21,具體進一步包括第一確定單元211和第二確定單元212,其中,所述第一確定單元211,用于若所述查詢地址η在緩存vma的前相鄰vma的前相鄰vma的尾地址和緩存vma的前相鄰的尾地址之間,則確定所述查詢地址η對應的vma為緩存vma的前相鄰vma ;所述第二確定單元212,用于若所述查詢地址η在緩存vma的尾地址和緩存vma的后相鄰的vma的尾地址之間,則確定所述查詢地址η對應的vma為緩存vma的后相鄰vma。線索查詢模塊22,具體進一步包括第一查詢單元221和第二查詢單元222 ;其中,所述第一查詢單元221,用于若所述第一確定單元211確定與查詢地址η對應的vma是前相鄰vma,則根據(jù)所述線索紅黑樹的節(jié)點上的線索查找到所述緩存vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查找所述vma。所述第二查詢單元222,用于若所述第二確定單元212確定與查詢地址η對應的vma是后相鄰vma,則根據(jù)所述線索紅黑樹的節(jié)點上的線索查找到所述緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查找所述vma。本實施例的裝置可以具體用于執(zhí)行圖6所示方法實施例的方法,其實現(xiàn)原理和技術效果類似,此處不再贅述。最后應說明的是以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的精神和范圍。
權利要求
1.一種虛擬內(nèi)存區(qū)域的查詢方法,其特征在于,包括確定與查詢地址對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma 的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍;若是,則通過線索紅黑樹的節(jié)點上的線索查詢所述vma,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針。
2.根據(jù)權利要求1所述的方法,其特征在于,所述緩存vma的相鄰范圍的起始地址為所述緩存vma的前相鄰vma的前相鄰vma的尾地址,所述緩存vma的相鄰范圍的結束地址為所述緩存vma的后相鄰vma的尾地址。
3.根據(jù)權利要求2所述的方法,其特征在于,所述確定與查詢地址對應的vma是否在緩存vma的相鄰范圍內(nèi),包括若所述查詢地址在所述緩存vma的相鄰范圍的起始地址和所述緩存vma的相鄰范圍的結束地址之間,則確定所述查詢地址對應的vma在所述緩存vma的相鄰范圍內(nèi)。
4.根據(jù)權利要求3所述的方法,其特征在于,所述確定與查詢地址對應的vma是否在緩存vma的相鄰范圍內(nèi),包括若所述查詢地址在緩存vma的前相鄰vma的前相鄰vma的尾地址和緩存vma的前相鄰的尾地址之間,則確定所述查詢地址對應的vma為緩存vma的前相鄰vma ;若所述查詢地址在緩存vma的尾地址和緩存vma的后相鄰的vma的尾地址之間,則確定所述查詢地址對應的vma為緩存vma的后相鄰vma。
5.根據(jù)權利要求4所述的方法,其特征在于,所述通過線索紅黑樹的節(jié)點上的線索查詢所述vma,包括若與查詢地址對應的vma是緩存vma的前相鄰vma,則通過線索紅黑樹的節(jié)點上的線索查找所述緩存vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查找所述vma ;若與查詢地址對應的vma是緩存vma的后相鄰vma,則通過線索紅黑樹的節(jié)點上的線索查找所述緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查找所述vma。
6.一種虛擬內(nèi)存區(qū)域的遍歷方法,其特征在于,包括獲得內(nèi)存描述信息mm的讀信號量,確定查詢地址η對應的vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍;若是,則通過線索紅黑樹的節(jié)點上的線索查詢所述查詢地址η對應的vma,釋放讀信號量,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針;將當前的緩存vma的地址范圍更新為所述查詢地址η對應的vma的地址范圍(vma_ start, vma_end),并將查詢地址n+1更新為所述查詢地址η對應的vma的vma_end,其中,所述vma_Start為所述查詢地址η對應的vma的首地址,所述Vma_end為所述查詢地址η對應的vma的尾地址;獲得mm的讀信號量,確定所述查詢地址n+1對應的vma是當前的緩存vma的后相鄰 vma,通過線索紅黑樹的節(jié)點上的線索查詢所述當前緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查詢所述查詢地址n+1對應的vma ;循環(huán)重復上述步驟,直到遍歷至少一部分地址空間。
7.根據(jù)權利要求6所述的方法,其特征在于,所述緩存vma的相鄰范圍的起始地址為所述緩存vma的前相鄰vma的前相鄰vma的尾地址,所述相鄰vma范圍的結束地址為所述緩存vma的后相鄰vma的尾地址。
8.根據(jù)權利要求7所述的方法,其特征在于,所述確定與查詢地址η對應的vma是否在緩存vma的相鄰范圍內(nèi),包括若所述查詢地址η在所述緩存vma的相鄰范圍的起始地址和所述緩存vma的相鄰范圍的結束地址之間,則確定所述查詢地址η對應的vma在所述緩存vma的相鄰范圍內(nèi)。
9.根據(jù)權利要求8所述的方法,其特征在于,所述確定與查詢地址η對應的vma是否在緩存vma的相鄰范圍內(nèi),包括若所述查詢地址η在緩存vma的前相鄰vma的前相鄰vma的尾地址和緩存vma的前相鄰的尾地址之間,則確定所述查詢地址η對應的vma為緩存vma的前相鄰vma ;若所述查詢地址η在緩存vma的尾地址和緩存vma的后相鄰的vma的尾地址之間,則確定所述查詢地址η對應的vma為緩存vma的后相鄰vma。
10.根據(jù)權利要求9所述的方法,其特征在于,所述通過線索紅黑樹的節(jié)點上的線索查詢所述vma,包括若與查詢地址η對應的vma是緩存vma的前相鄰vma,則通過線索紅黑樹的節(jié)點上的線索查找所述緩存vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查找所述vma ;若與查詢地址η對應的vma是緩存vma的后相鄰vma,則通過線索紅黑樹的節(jié)點上的線索,查找所述緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查找所述vma。
11.一種虛擬內(nèi)存區(qū)域的查詢裝置,其特征在于,所述裝置包括確定模塊,用于確定與查詢地址對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍;線索查詢模塊,用于所述確定模塊確定所述vma在所述緩存vma的相鄰范圍內(nèi),則通過線索紅黑樹的節(jié)點上的線索查詢所述vma,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針。
12.根據(jù)權利要求11所述的裝置,其特征在于,還包括存儲模塊,用于存儲所述緩存vma的相鄰范圍,所述緩存vma的相鄰范圍的起始地址為所述緩存vma的前相鄰vma的前相鄰vma的尾地址,所述相鄰vma范圍的結束地址為所述緩存vma的后相鄰vma的尾地址。
13.根據(jù)權利要求11所述的裝置,其特征在于,所述確定模塊包括第一確定單元,用于若所述查詢地址在緩存vma的前相鄰vma的前相鄰vma的尾地址和緩存vma的前相鄰的尾地址之間,則確定所述查詢地址對應的vma為緩存vma的前相鄰 vma ;第二確定單元,用于若所述查詢地址在緩存vma的尾地址和緩存vma的后相鄰的vma 的尾地址之間,則確定所述查詢地址對應的vma為緩存vma的后相鄰vma。
14.根據(jù)權利要求13所述的裝置,其特征在于,所述線索查詢模塊包括第一查詢單元,用于若所述第一確定單元確定與查詢地址對應的vma是前相鄰vma,則根據(jù)所述線索紅黑樹的節(jié)點上的線索查找到所述緩存vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查找所述vma ;第二查詢單元,用于若所述第二確定單元確定與查詢地址對應的vma是后相鄰vma,則根據(jù)所述線索紅黑樹的節(jié)點上的線索查找到所述緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查找所述vma。
15.一種虛擬內(nèi)存區(qū)域的遍歷裝置,其特征在于,所述裝置包括確定模塊,用于確定與查詢地址η對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍;線索查詢模塊,用于所述確定模塊確定所述vma在所述緩存vma的相鄰范圍內(nèi),則通過線索紅黑樹的節(jié)點上的線索查詢所述vma,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針;緩存更新模塊,用于根據(jù)所述線索查詢模塊查詢的查詢地址η對應的vma,將當前的緩存vma更新為所述查詢地址η對應的vma的地址范圍(vma_start,vma_end),并將查詢地址n+1更新為所述查詢地址η對應的vma的vma_end,其中,所述vma_start為所述查詢地址η對應的vma的的首地址,所述vma_end為所述查詢地址η對應的vma的尾地址。
16.根據(jù)權利要求15所述的裝置,其特征在于,還包括存儲模塊,用于存儲所述緩存vma的相鄰范圍,所述緩存vma的相鄰范圍的起始地址為所述緩存vma的前相鄰vma的前相鄰vma的尾地址,所述相鄰vma范圍的結束地址為所述緩存vma的后相鄰vma的尾地址。
17.根據(jù)權利要求16所述的裝置,其特征在于,所述確定模塊包括第一確定單元,用于若所述查詢地址η在緩存vma的前相鄰vma的前相鄰vma的尾地址和緩存vma的前相鄰的尾地址之間,則確定所述查詢地址η對應的vma為緩存vma的前相鄰vma ;第二確定單元,用于若所述查詢地址η在緩存vma的尾地址和緩存vma的后相鄰的vma 的尾地址之間,則確定所述查詢地址η對應的vma為緩存vma的后相鄰vma。
18.根據(jù)權利要求17所述的裝置,其特征在于,所述線索查詢模塊包括第一查詢單元,用于若所述第一確定單元確定與查詢地址η對應的vma是前相鄰vma, 則根據(jù)所述線索紅黑樹的節(jié)點上的線索查找到所述緩存vma的前驅節(jié)點,并根據(jù)所述前驅節(jié)點查找所述vma ;第二查詢單元,用于若所述第二確定單元確定與查詢地址η對應的vma是后相鄰vma, 則根據(jù)所述線索紅黑樹的節(jié)點上的線索查找到所述緩存vma的后繼節(jié)點,并根據(jù)所述后繼節(jié)點查找所述vma。
全文摘要
本發(fā)明實施例公開了一種虛擬內(nèi)存區(qū)域的查詢、遍歷方法及裝置,其中,所述方法包括確定與查詢地址對應的虛擬內(nèi)存區(qū)域vma是否在緩存vma的相鄰范圍內(nèi),所述緩存vma的相鄰范圍包括所述緩存vma的至少一個前相鄰vma的地址范圍和至少一個后相鄰vma的地址范圍;若是,則通過線索紅黑樹的節(jié)點上的線索查詢所述vma,所述節(jié)點為所述緩存vma對應的節(jié)點,所述線索為指向所述線索紅黑樹上每個節(jié)點的前驅節(jié)點和后繼節(jié)點的指針。本發(fā)明實施例還公開了一種虛擬內(nèi)存區(qū)域的遍歷方法,因為緩存vma的相鄰范圍的確認總能得到滿足,提高了訪問緩存的命中率,實現(xiàn)整個vma遍歷的時間復雜度為O(n),從而提高了vma的查詢效率。
文檔編號G06F12/08GK102369520SQ201180002151
公開日2012年3月7日 申請日期2011年9月2日 優(yōu)先權日2011年9月2日
發(fā)明者黃強 申請人:華為技術有限公司