新四季網

一種用戶態與內核態共享內存的管理方法和裝置的製作方法

2023-07-05 17:00:56

專利名稱:一種用戶態與內核態共享內存的管理方法和裝置的製作方法
技術領域:
本發明涉及數據交換技術,尤其涉及一種用戶態與內核態共享內存的管理方法和裝置。裝直。
背景技術:
隨著網際網路(Internet)的迅猛發展,內核態進程和用戶態進程之間的數據交互越來越頻繁,並且交互的數據量越來越大。內核態進程和用戶態進程各自使用自己的地址空間,兩個狀態看到的虛擬地址空間是分離的,內核態進程和用戶態進程之間的數據交互需要專門的機制例如共享內存機制來實現。在共享內存機制中,通過將一段物理內存同時映射到內核態地址空間和用戶態地址空間,來實現內核態進程和用戶態進程之間的數據通信。內存映射完成後,內核態進程和用戶態進程分別會獲得共享內存的基地址(虛擬地址)和長度。由於內核態進程和用戶態進程所獲取的基地址是不同的,所以要是使用傳統的鍊表內保存共享內存中內存對象的起始地址(虛擬地址)的方法來動態管理共享內存,就無法解決用戶態進程和內核態進程通用的問題。具體地,現有技術中主要提供如下兩種方案來進行共享內存的管理。方案一一次性映射一大塊共享內存,然後靜態為使用者(內核態進程或用戶態進程)分配共享內存空間,即不管使用者最終使用多少內存,統一給使用者分配一定數量的內存。該方案的缺點在於1、如果使用者最終使用的內存小於為其分配的內存,會浪費內存;2、如果使用者最終使用的內存大於為其分配的內存,將導致內存越界,破壞其他內存使用者存儲的信息;3、不利於內存的回收和重新使用。方案二不同使用者(內核態進程或用戶態進程)各自映射所需的共享內存,使用後將其釋放,下次使用再重新映射。該方案的缺點在於每次內核態進程和用戶態進程交互數據都需要進行共享內存的映射,這樣增大了系統的開銷,降低了內核態進程和用戶態進程之間數據交互效率。

發明內容
有鑑於此,本發明的目的是提供一種用戶態與內核態共享內存的管理方法和裝置,能夠提高數據的交互效率,同時節約內存。為實現上述目的,本發明提供技術方案如下一種用戶態與內核態共享內存的管理方法,包括將預定長度的物理內存作為共享內存分別映射到用戶態地址空間和內核態地址空間,映射完成後,用戶態進程和內核態進程在各自的地址空間分別得到共享內存的基地址;
將多個偽鍊表的頭節點保存到共享內存的最後區域,其中,偽鍊表的節點的結構包括對象類型和偽鍊表中下一個節點的起始地址相對於基地址的偏移,且每種對象類型對應一種長度的內存對象;根據使用者需要申請內存的大小,從所述多個偽鍊表中選取一個偽鍊表,從所選取的偽鍊表中選取一個或多個節點,將選取的一個或多個節點對應的內存對象分配給該使用者,並將選取的一個或多個節點從所選取的偽鍊表中摘除,其中,所述使用者為內核態進程或用戶態進程,所述使用者能夠將自己的基地址加上所分配的內存對象的起始偏移得到內存對象的起始地址,並根據所述起始地址對所述內存對象進行操作。一種用戶態與內核態共享內存的管理裝置,包括內存映射單元,用於將預定長度的物理內存作為共享內存分別映射到用戶態地址空間和內核態地址空間,映射完成後,用戶態進程和內核態進程在各自的地址空間分別得到共享內存的基地址;偽鍊表建立單元,用於將多個偽鍊表的頭節點保存到共享內存的最後區域,其中,偽鍊表的節點的結構包括對象類型和偽鍊表中下一個節點的起始地址相對於基地址的偏移,且每種對象類型對應一種長度的內存對象;內存分配單元,用於根據使用者需要申請內存的大小,從所述多個偽鍊表中選取一個偽鍊表,從所選取的偽鍊表中選取一個或多個節點,將選取的一個或多個節點對應的內存對象分配給該使用者,並將選取的一個或多個節點從所選取的偽鍊表中摘除,其中,所述使用者為內核態進程或用戶態進程,所述使用者能夠將自己的基地址加上所分配的內存對象的起始偏移得到內存對象的起始地址,並根據所述起始地址對所述內存對象進行操作。與現有技術相比,本發明提供的內核態和用戶態共享內存的管理方案,應用於內核態進程和用戶態進程之間存在大量數據交互的場合時,可以提高數據的交互效率,同時節約內存。


圖1是本發明實施例的用戶態與內核態共享內存的管理方法流程圖;圖2是本發明實施例中共享內存的構成示意圖;圖3是本發明實施例中普通對象對應的內存結構圖;圖4是本發明實施例中特殊對象對應的內存結構圖。
具體實施例方式本發明實施例提供的用戶態與內核態共享內存的管理方法和裝置中,是在鍊表中保存內存對象的起始地址到共享內存的基地址的偏移,這樣不管在用戶態還是內核態都可以通過各自的基地址加上偏移來獲取內存對象的起始地址,進而實現用戶態進程和內核態進程共享內存的管理。本發明實施例的技術方案能夠解決如下技術問題中的至少一個1、內核態進程與用戶態進程之間進行大量數據交互時,反覆進行共享內存映射,導致數據傳輸效率低的問題;
2、用戶態進程和內核態進程共享內存靜態分配帶來的內存浪費,以及其帶來的內存越界問題;3、使用傳統鍊表內保存內存對象起始地址的方法來動態管理共享內存,就無法解決用戶態進程和內核態進程通用的問題。以下結合附圖對本發明進行詳細描述。參照圖1,本發明實施例的用戶態與內核態共享內存的管理方法,可以包括如下步驟步驟101,將預定長度的物理內存作為共享內存分別映射到用戶態地址空間和內核態地址空間,映射完成後,用戶態進程和內核態進程在各自的地址空間分別得到共享內存的基地址;步驟102,將多個偽鍊表的頭節點保存到共享內存的最後區域,其中,偽鍊表的節點的結構包括對象類型和偽鍊表中下一個節點的起始地址相對於基地址的偏移,且每種對象類型對應一種長度的內存對象;步驟103,根據使用者需要申請內存的大小,從所述多個偽鍊表中選取一個偽鍊表,從所選取的偽鍊表中選取一個或多個節點,將選取的一個或多個節點對應的內存對象分配給該使用者,並將選取的一個或多個節點從所選取的偽鍊表中摘除,其中,所述使用者為內核態進程或用戶態進程,所述使用者能夠將自己的基地址加上所分配的內存對象的起始偏移得到內存對象的起始地址,並根據所述起始地址對所述內存對象進行操作。上述方法通過偽鍊表來對共享內存進行管理,使用者(用戶態進程和內核態進程)獲取到的是內存對象的起始地址到共享內存的基地址的偏移,這樣不管在用戶態還是內核態都可以通過各自的基地址加上偏移來獲取內存對象的起始地址,進而實現用戶態進程和內核態進程共享內存的管理。

進一步,為節約內存,上述管理方法還可以包括步驟104,需要對內存對象進行釋放時,獲取待釋放內存對象的起始偏移和大小,根據所述起始偏移和大小將內存對象添加到相應偽鍊表中的相應節點中。需要說明的是,上述步驟104是為了節約內存而設置的,本領域技術人員可以根據具體需要進行取捨。其中,所述多個偽鍊表包括節點對應的內存對象的長度為16位元組、32位元組、64位元組、128位元組、256位元組、512位元組、1024位元組和2k字節分別對應的16_list偽鍊表、32_list偽鍊表、64_list偽鍊表、128_list偽鍊表、256_list偽鍊表、512_list偽鍊表、1024_list偽鍊表和free_list偽鍊表。步驟103中,內存分配的過程可以為當申請的內存的大小大於(1024-4)字節時,則從free_list偽鍊表選取連續的η個節點,η為整數,具體地,η等於申請的內存的大小除以2k後向上取整;當申請的內存的大小小於或等於(1024-4)字節時,則從除free_list偽鍊表之外的其他偽鍊表中選取I個節點,當所述其他偽鍊表為空時,則還需要先從free_list偽鍊表中選取I個2k對象進行分割後,將分割得到的多個對象添加到所述其他偽鍊表中,然後再選取I個節點。其中,選取的偽鍊表為能夠滿足申請的內存的大小的最小偽鍊表(指其節點對應的內存對象的長度最小),例如,如果申請10位元組的內存,則選取16_1 ist偽鍊表,如果申請500位元組的內存,則選取512_list偽鍊表。可選地,在步驟104中,當根據所述起始偏移和大小將內存對象添加到相應偽鍊表中的相應節點中後,若相應偽鍊表中有多個連續的節點對應的內存對象大小之和為2k,且該多個連續的節點中的第一個節點的起始偏移能夠被2k整除,則還可以將這多個連續的節點從相應偽鍊表中摘除後,將相應的2k內存對象添加到free_list偽鍊表中。需要說明的是,這裡的摘除是指將節點從偽鍊表中移除,並對偽鍊表中的節點的地址偏移進行相應的修改,而且,將2k內存對象添加到free_list偽鍊表中,包括對free_list偽鍊表中的相應節點的地址偏移進行相應修改。以下給出本發明的一個應用實例,具體描述如下首先,將一大塊連續的物理內存(作為共享內存)分別映射到用戶態地址空間和內核態地址空間,物理內存的長度根據需要設定,映射完成後,會分別在用戶態地址空間和內核態地址空間獲得一個基地址(虛擬地址)。其次,本發明使用了一種鏈狀數據結構來進行共享內存的分配和回收,為了區別於傳統鍊表,這裡我們稱作偽鍊表。兩者存在一個本質的區別傳統鍊表是使用指針直接指向下一個節點,而偽鍊表則是使用一個偏移算出下一個節點的位置。偽鍊表節點結構很簡潔,其包括兩個數據成員(I)對象的類型,(2)下一個偽鍊表節點結構體的起始地址相對於共享內存基地址的偏移。偽鍊表節點結構體如下
權利要求
1.一種用戶態與內核態共享內存的管理方法,其特徵在於,包括將預定長度的物理內存作為共享內存分別映射到用戶態地址空間和內核態地址空間, 映射完成後,用戶態進程和內核態進程在各自的地址空間分別得到共享內存的基地址;將多個偽鍊表的頭節點保存到共享內存的最後區域,其中,偽鍊表的節點的結構包括對象類型和偽鍊表中下一個節點的起始地址相對於基地址的偏移,且每種對象類型對應一種長度的內存對象;根據使用者需要申請內存的大小,從所述多個偽鍊表中選取一個偽鍊表,從所選取的偽鍊表中選取一個或多個節點,將選取的一個或多個節點對應的內存對象分配給該使用者,並將選取的一個或多個節點從所選取的偽鍊表中摘除,其中,所述使用者為內核態進程或用戶態進程,所述使用者能夠將自己的基地址加上所分配的內存對象的起始偏移得到內存對象的起始地址,並根據所述起始地址對所述內存對象進行操作。
2.如權利要求1所述的管理方法,其特徵在於,還包括需要對內存對象進行釋放時,獲取待釋放內存對象的起始偏移和大小,根據所述起始偏移和大小將內存對象添加到相應偽鍊表中的相應節點中。
3.如權利要求2所述的管理方法,其特徵在於所述多個偽鍊表包括節點對應的內存對象的長度為16位元組、32位元組、64位元組、128位元組、256位元組、512位元組、1024位元組和2k字節分別對應的16_list偽鍊表、32_list偽鍊表、 64_list偽鍊表、128_list偽鍊表、256_list偽鍊表、512_list偽鍊表、1024_list偽鍊表和 free_list 偽鍊表。
4.如權利要求3所述的管理方法,其特徵在於,所述根據使用者需要申請內存的大小, 從所述多個偽鍊表中選取一個偽鍊表,從所選取的偽鍊表中選取一個或多個節點,包括當申請的內存的大小大於(1024-4)字節時,則從free_list偽鍊表選取連續的η個節點,η為整數;當申請的內存的大小小於或等於(1024-4)字節時,則從除free_list偽鍊表之外的其他偽鍊表中選取I個節點,當所述其他偽鍊表為空,則先從free_list偽鍊表中選取I個2k 對象進行分割後,將分割得到的多個對象添加到所述其他偽鍊表中。
5.如權利要求3所述的管理方法,其特徵在於,還包括當根據所述起始偏移和大小將內存對象添加到相應偽鍊表中的相應節點中後,若相應偽鍊表中有多個連續的節點對應的內存對象大小之和為2k,其該多個連續的節點中的第一個節點的起始偏移能夠被2k整除,則將這多個連續的節點從相應偽鍊表中摘除後,將相應的2k內存對象添加到free_list偽鍊表中。
6.一種用戶態與內核態共享內存的管理裝置,其特徵在於,包括內存映射單元,用於將預定長度的物理內存作為共享內存分別映射到用戶態地址空間和內核態地址空間,映射完成後,用戶態進程和內核態進程在各自的地址空間分別得到共享內存的基地址;偽鍊表建立單元,用於將多個偽鍊表的頭節點保存到共享內存的最後區域,其中,偽鍊表的節點的結構包括對象類型和偽鍊表中下一個節點的起始地址相對於基地址的偏移,且每種對象類型對應一種長度的內存對象;內存分配單元,用於根據使用者需要申請內存的大小,從所述多個偽鍊表中選取一個偽鍊表,從所選取的偽鍊表中選取一個或多個節點,將選取的一個或多個節點對應的內存對象分配給該使用者,並將選取的一個或多個節點從所選取的偽鍊表中摘除,其中,所述使用者為內核態進程或用戶態進程,所述使用者能夠將自己的基地址加上所分配的內存對象的起始偏移得到內存對象的起始地址,並根據所述起始地址對所述內存對象進行操作。
7.如權利要求6所述的管理裝置,其特徵在於,還包括內存釋放單元,用於需要對內存對象進行釋放時,獲取待釋放內存對象的起始偏移和大小,根據所述起始偏移和大小將內存對象添加到相應偽鍊表中的相應節點中。
8.如權利要求7所述的管理裝置,其特徵在於所述多個偽鍊表包括節點對應的內存對象的長度為16位元組、32位元組、64位元組、128位元組、256位元組、512位元組、1024位元組和2k字節分別對應的16_list偽鍊表、32_list偽鍊表、 64_list偽鍊表、128_list偽鍊表、256_list偽鍊表、512_list偽鍊表、1024_list偽鍊表和 free_list 偽鍊表。
9.如權利要求8所述的管理裝置,其特徵在於,所述內存分配單元進一步用於當申請的內存的大小大於(1024-4)字節時,則從free_list偽鍊表選取連續的η個節點,η為整數;當申請的內存的大小小於或等於(1024-4)字節時,則從除free_list偽鍊表之外的其他偽鍊表中選取I個節點,當所述其他偽鍊表為空,則先從free_list偽鍊表中選取I個2k 對象進行分割後,將分割得到的多個對象添加到所述其他偽鍊表中。
10.如權利要求8所述的管理裝置,其特徵在於,所述內存釋放單元還用於當根據所述起始偏移和大小將內存對象添加到相應偽鍊表中的相應節點中後,若相應偽鍊表中有多個連續的節點對應的內存對象大小之和為2k,其該多個連續的節點中的第一個節點的起始偏移能夠被2k整除,則將這多個連續的節點從相應偽鍊表中摘除後,將相應的2k內存對象添加到free_list偽鍊表中。
全文摘要
本發明提供一種用戶態與內核態共享內存的管理方法和裝置。所述方法包括將預定長度的物理內存作為共享內存分別映射到用戶態地址空間和內核態地址空間;將多個偽鍊表的頭節點保存到共享內存的最後區域;根據使用者需要申請內存的大小,從所述多個偽鍊表中選取一個偽鍊表,從所選取的偽鍊表中選取一個或多個節點,將選取的一個或多個節點對應的內存對象分配給該使用者,並將選取的一個或多個節點從所選取的偽鍊表中摘除。本發明能夠提高數據的交互效率,同時節約內存。
文檔編號G06F9/54GK103034544SQ20121052385
公開日2013年4月10日 申請日期2012年12月4日 優先權日2012年12月4日
發明者趙丹 申請人:杭州迪普科技有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀