2]2.業務邏輯將{ 1,50K, 50K}這個讀取請求發送給“主分配器模塊”。({內存ID,偏移值,讀取大小})
3.“主分配器模塊”在“內存-進程映射表”中搜索ID=I的內存。得到擴展進程ID=I這樣一個結果。
[0063]4.“主分配器模塊”通過管道將{1,50K,50K}發送給ID=I的擴展進程的次分配器。
[0064]5.擴展進程中的“次分配器模塊”在“內存區域映射模塊”中查找內存ID=I的內存的具體區域信息。得到{500,100Κ}這么一個信息。(即內存存儲在擴展進程中地址=500大小=10K的位置中) 6.將讀取擴展進程中以500+50K為地址。50K為大小的這么一個區塊。(即讀取擴展進程中實際地址為“地址+偏移值”大小為“讀取大小”的內存塊)
7.“次分配器模塊”將讀取到的內容,通過管道主進程的“主分配器模塊”。
[0065]8.“主分配器模塊”將傳回的內容傳給業務邏輯。完成讀取。
[0066]內存釋放的過程如下(可參考圖5所示):
1.當業務邏輯不再需要使用ID=I的這塊內存時,其可以觸發內存釋放過程。
[0067]2.將所需要釋放的內存ID=I發送給“主分配器模塊”。
[0068]3.“主分配器模塊”在“內存-進程映射表”中查找ID=I的內存塊對應的擴展進程ID。得到擴展進程ID=I。
[0069]4.“主分配器模塊”將內存ID=I發送給ID=I的擴展進程的“次分配器模塊”。
[0070]5.擴展進程中的“次分配器模塊”在“內存區域映射模塊”中查找內存ID=I的內存的具體區域信息。得到{500,100K}這么一個信息。
[0071]6.“次分配器模塊”釋放地址=500,大小=100K的這個內存塊。
[0072]7.“次分配器模塊”刪除“內存-區域映射模塊”內存ID=I對應的信息。
[0073]8.“主分配器模塊”刪除“內存-進程映射模塊”內存ID=I對應的信息。
[0074]以上所述,只是本發明的較佳實施例而已,本發明并不局限于上述實施方式,只要其以相同的手段達到本發明的技術效果,都應屬于本發明的保護范圍。
【主權項】
1.一種擴展進程中內存地址控制的方法,其特征在于:包括主進程和由主進程創建的一個或以上的擴展進程,所述主進程包括原程序業務組件和第一擴展內存地址空間組件,所述第一擴展內存地址空間組件包括內存-進程映射模塊和主分配器模塊,所述擴展進程包括第二擴展內存地址空間組件和所擴展的內存地址空間,所述第二擴展內存地址空間組件包括內存-區塊映射模塊和次分配器模塊,所述擴展進程通過擴展進程ID號唯一進行識另U,內存地址空間內的內存通過內存ID號進行識別,每一段獨立的內存對應一個獨立的內存ID號,所述主分配器模塊根據內存-進程映射模塊維護內存ID與擴展進程ID的關系,所述次分配器模塊通過內存-區塊映射模塊維護內存ID及其對應的內存區塊的關系。
2.根據權利要求1所述的一種擴展進程中內存地址控制的方法,其特征在于:主進程中的內存-進程映射模塊中維護了一個內存ID到擴展進程ID的映射表,其輸入為內存ID,其輸出為擴展進程的ID。
3.根據權利要求2所述的一種擴展進程中內存地址控制的方法,其特征在于:擴展進程中的內存-區塊映射模塊中維護了一個內存ID到區塊的映射表,其輸入為內存ID,其輸出為區塊信息,一個區塊信息由地址、大小這樣一個二元組組成,所述區塊為內存ID對應的內存在本進程中地址空間的位置。
4.根據權利要求3所述的一種擴展進程中內存地址控制的方法,其特征在于:主進程中的主分配器模塊以管道方式與擴展進程中的次分配器模塊通訊,主分配器模塊和次分配器模塊配合完成內存分配、內存釋放、內存讀取、內存寫入4個不同功能的操作。
5.根據權利要求4所述的一種擴展進程中內存地址控制的方法,其特征在于:內存分配的步驟為,主分配器模塊接受業務邏輯發送過來的內存分配請求,并將請求的內存大小逐一發給各個擴展進程中的次分配器模塊,若擴展進程可以分配出內存,則主分配器模塊將內存ID,擴展進程ID的對應關系記錄到內存-進程映射表中,若所有擴展進程都無法分配出內存,則主分配器模塊將啟動一個全新的擴展進程,并將分配請求傳給這個全新的擴展進程的次分配器;接到主分配器發送過來的內存分配請求后:擴展進程中的次分配器模塊如果可以分配出足量的內存,則會給這個內存塊分配一個系統中的全局ID值,同時將內存ID、地址、大小記錄到本擴展進程的內存-區塊映射模塊中,最后將內存ID傳回給主分配器模塊,若擴展進程中的次分配器模塊無法分配出足量的內存,則會返回一個分配失敗的返回值給主分配器模塊。
6.根據權利要求4所述的一種擴展進程中內存地址控制的方法,其特征在于:內存釋放的步驟為:業務邏輯將需要釋放的內存ID發給主分配器模塊,主分配器模塊在內存-進程映射表中查找得到內存ID對應的擴展進程,主分配器模塊將內存ID發送給擴展進程ID所對應的次分配器模塊,次分配器模塊在內存-區塊映射模塊中查找內存ID所對應的具體區塊,即地址、大小這個二元組,刪除地址所對應的擴展內存地址空間的內存塊,并在內存-區域映射模塊中刪除內存ID及其所對應的區塊信息。
7.根據權利要求4所述的一種擴展進程中內存地址控制的方法,其特征在于:內存讀取的步驟為:業務邏輯將需要讀取的內存、偏移值、讀取大小發給主分配器模塊,主分配器模塊在內存-進程映射表中查找得到內存ID對應的擴展進程ID,主分配器模塊將內存ID、偏移值、讀取大小發送給擴展進程ID所對應的次分配器模塊,次分配器模塊在內存-區塊映射模塊中查找內存ID所對應的具體區塊,即地址、大小這個二元組,次分配器模塊將讀取擴展進程中實際地址為地址+偏移值大小為讀取大小的內存塊返回給主分配器模塊,主分配器模塊將所讀取的內存傳回給業務邏輯,完成讀取。
8.根據權利要求4所述的一種擴展進程中內存地址控制的方法,其特征在于:內存寫入的步驟為:業務邏輯將需要寫入的內存ID、偏移值、寫入數據發給主分配器模塊,主分配器模塊在內存-進程映射表中查找得到內存ID對應的擴展進程ID,主分配器模塊將內存ID、偏移值、寫入數據發送給擴展進程ID所對應的次分配器模塊,次分配器模塊在內存-區塊映射模塊中查找內存ID所對應的具體區塊,即地址、大小這個二元組,次分配器模塊將寫入數據寫入到擴展進程中實際地址為地址+偏移值的內存,完成寫入。
【專利摘要】本發明公開了一種擴展進程中內存地址控制的方法,主進程通過主分配器模塊創建多個擴展進程,并由擴展進程中的次分配器模塊分配實際的內存。所有內存不通過內存地址標識,而是通過一個全局唯一的內存ID標識。本發明在無需升級機器硬件和系統的前提下,僅通過改進軟件即可充分的利用電腦的物理內存。且本方法通過擴展進程方式實現,使得單個進程所使用的物理內存總量沒有上限。即便是在64位系統中,運用此方法的系統仍然可以正常運行。即通過此方法擴展內存不會產生兼容性問題。同時此方法的系統也能擴展64位系統的內存最大使用量。
【IPC分類】G06F3-06, G06F12-08
【公開號】CN104571953
【申請號】CN201410830319
【發明人】李翔威, 劉暢, 譚賢亮, 梁波
【申請人】珠海金山網絡游戲科技有限公司, 成都西山居互動娛樂科技有限公司
【公開日】2015年4月29日
【申請日】2014年12月25日