一種內存分配的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種內存分配的方法,所述方法應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、BOIS和OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述方法包括:獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存,對待分配內存的數(shù)據(jù)進行檢測,當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。本發(fā)明實施例提供的內存分配的方法,可以準確的找到鏡像內存,并為需要存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,從而保證的有限鏡像內存的使用效率。
【專利說明】—種內存分配的方法及裝置
【技術領域】
[0001]本發(fā)明涉及計算機【技術領域】,具體涉及一種內存分配的方法及裝置。
【背景技術】
[0002]因內存的可靠性對計算機系統(tǒng)的可靠性影響很大。所以需要提高內存的可靠性,目前現(xiàn)有技術中通常采用鏡像內存來提升內存可靠性。
[0003]鏡像內存(Mirroring Memory)技術的工作原理:在硬件中劃分兩個內存區(qū)域,一個作為主內存,一個作為鏡像內存,操作系統(tǒng)運行時將內存數(shù)據(jù)做兩個拷貝,分別放在主內存和鏡像內存中。因此使得內存數(shù)據(jù)有兩套完整的備份。完整的鏡像內存需要內存中的所有數(shù)據(jù)均存有副本,服務器系統(tǒng)正常運行時所使用的是原本,而當其中一份宿主失效時,另外那份就隨即補替工作,有效防止了由于內存通道故障導致的數(shù)據(jù)丟失,極大提升了服務器可靠性。但是要實現(xiàn)這一功能需要雙倍的物理內存,而實際容量的利用率只有50%。由于成本非常高,因此現(xiàn)實中很少有產品使用完整的鏡像內存。
[0004]現(xiàn)有技術中已經(jīng)出現(xiàn)了部分鏡像內存技術,該技術可以將計算機系統(tǒng)中的一部分內存(比如某一段或幾段內存地址區(qū)域)做鏡像內存。但現(xiàn)有技術中的鏡像內存只是停留在硬件層,操作系統(tǒng)并不感知硬件層,當硬件層的鏡像內存發(fā)生變化時,操作系統(tǒng)中就不能準確的找到鏡像內存,導致無法將數(shù)據(jù)準備的存儲到鏡像內存中,而且,由于鏡像內存大小有限,而計算機系統(tǒng)在為數(shù)據(jù)分配鏡像內存時,只會為先產生的數(shù)據(jù)分配鏡像內存,鏡像內存占滿后,就無法再為其他需要分配鏡像內存的數(shù)據(jù)分配鏡像內存。
【發(fā)明內容】
[0005]為了解決現(xiàn)有技術中操作系統(tǒng)無法感知到鏡像內存的變化,且在鏡像內存大小有限的情況下,無法為需要分配鏡像內存的數(shù)據(jù)分配鏡像內存相比,本發(fā)明實施例提供的內存分配的方法,可以準確的找到鏡像內存,并為需要存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,從而保證的有限鏡像內存的使用效率,而且提高了系統(tǒng)的可靠性。本發(fā)明實施例還提供了相應的裝置。
[0006]本發(fā)明第一方面提供一種內存分配的方法,所述方法應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述方法包括:
[0007]獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存;
[0008]對待分配內存的數(shù)據(jù)進行檢測;
[0009]當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0010]結合第一方面,在第一種可能的實現(xiàn)方式中,所述對待分配內存的數(shù)據(jù)進行檢測之前,所述方法還包括:
[0011]為內核數(shù)據(jù)和關鍵用戶數(shù)據(jù)設置鏡像標識,所述關鍵用戶數(shù)據(jù)為用戶指定的需要鏡像存儲的數(shù)據(jù);
[0012]所述對待分配內存的數(shù)據(jù)進行檢測,包括:
[0013]檢測所述待分配內存的數(shù)據(jù)是否攜帶有所述鏡像標識;
[0014]所述當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,包括:
[0015]當檢測到所述待分配內存的數(shù)據(jù)攜帶有所述鏡像標識,確定所述待分配內存的數(shù)據(jù)為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù),從所述未被占用的鏡像內存中為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù)分配鏡像內存。
[0016]結合第一方面第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述方法還包括:
[0017]當所述待分配內存的數(shù)據(jù)為所述關鍵用戶數(shù)據(jù)時,確定同一進程數(shù)據(jù)是否存儲在所述初始鏡像內存中,所述同一進程數(shù)據(jù)為在所述關鍵用戶數(shù)據(jù)之前由產生所述關鍵用戶數(shù)據(jù)的同一進程所產生的數(shù)據(jù);
[0018]若所述同一進程數(shù)據(jù)未存儲到所述鏡像內存中,則將所述同一進程數(shù)據(jù)轉移到所述初始鏡像內存中。
[0019]結合第一方面、第一方面第一種或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,包括:
[0020]確定所述待存儲到鏡像內存的數(shù)據(jù)所屬的預劃分內存資源區(qū)域;
[0021]從所述所屬的預劃分內存資源區(qū)域的未被占用的鏡像內存中,為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0022]結合第一方面、第一方面第一種或第二種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存之后,所述方法還包括:
[0023]為所述待存儲到鏡像內存的數(shù)據(jù)所分配的鏡像內存的地址區(qū)間設置已占用標記。
[0024]本發(fā)明第二方面提供一種內存分配的裝置,所述裝置應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述裝置包括:
[0025]獲取單元,用于獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存;
[0026]檢測單元,用于對待分配內存的數(shù)據(jù)進行檢測;
[0027]分配單元,用于當所述檢測單元檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述獲取單元獲取的所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0028]結合第二方面,在第一種可能的實現(xiàn)方式中,所述裝置還包括:
[0029]第一設置單元,用于在所述檢測單元對待分配內存的數(shù)據(jù)進行檢測之前,為內核數(shù)據(jù)和關鍵用戶數(shù)據(jù)設置鏡像標識,所述關鍵用戶數(shù)據(jù)為用戶指定的需要鏡像存儲的數(shù)據(jù);
[0030]所述檢測單元,用于檢測所述待分配內存的數(shù)據(jù)是否攜帶有所述第一設置單元設置的所述鏡像標識;
[0031]所述分配單元,用于當所述檢測單元檢測到所述待分配內存的數(shù)據(jù)攜帶有所述鏡像標識,確定所述待分配內存的數(shù)據(jù)為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù),從所述未被占用的鏡像內存中為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù)分配鏡像內存。
[0032]結合第二方面第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述裝置還包括:
[0033]確定單元,用于當所述待分配內存的數(shù)據(jù)為所述關鍵用戶數(shù)據(jù)時,確定同一進程數(shù)據(jù)是否存儲在所述初始鏡像內存中,所述同一進程數(shù)據(jù)為在所述關鍵用戶數(shù)據(jù)之前由產生所述關鍵用戶數(shù)據(jù)的同一進程所產生的數(shù)據(jù);
[0034]轉移單元,用于當所述確定單元確定所述同一進程數(shù)據(jù)未存儲到所述鏡像內存中時,則將所述同一進程數(shù)據(jù)轉移到所述初始鏡像內存中。
[0035]結合第二方面、第二方面第一種或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述分配單元包括:
[0036]確定子單元,用于確定所述待存儲到鏡像內存的數(shù)據(jù)所屬的預劃分內存資源區(qū)域;
[0037]分配子單元,用于從所述確定子單元確定的所屬的預劃分內存資源區(qū)域的未被占用的鏡像內存中,為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0038]結合第二方面、第二方面第一種或第二種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述裝置還包括:
[0039]第二設置單元,用于在所述分配單元分配鏡像內存后,為所述待存儲到鏡像內存的數(shù)據(jù)所分配的鏡像內存的地址區(qū)間設置已占用標記。
[0040]本發(fā)明實施例提供的內存分配的方法,所述方法應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述方法包括:獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存;對待分配內存的數(shù)據(jù)進行檢測;當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。與現(xiàn)有技術中操作系統(tǒng)無法感知到進行內存的變化,且在鏡像內存大小有限的情況下,無法為需要分配鏡像內存的數(shù)據(jù)分配鏡像內存相比,本發(fā)明實施例提供的內存分配的方法,BOIS向所述OS提供鏡像內存地址區(qū)間,從而可以準確的找到鏡像內存,并為需要存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,從而保證的有限鏡像內存的使用效率,而且提高了系統(tǒng)的可靠性。
【專利附圖】
【附圖說明】
[0041]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0042]圖1是本發(fā)明實施例中計算機系統(tǒng)的架構示意圖;
[0043]圖2是本發(fā)明實施例中內存分配的方法的一實施例示意圖;
[0044]圖3是本發(fā)明實施例中內存分配的裝置的一實施例示意圖;
[0045]圖4是本發(fā)明實施例中內存分配的裝置的另一實施例示意圖;
[0046]圖5是本發(fā)明實施例中內存分配的裝置的另一實施例示意圖;
[0047]圖6是本發(fā)明實施例中內存分配的裝置的另一實施例示意圖;
[0048]圖7是本發(fā)明實施例中內存分配的裝置的另一實施例示意圖;
[0049]圖8是本發(fā)明實施例中內存分配設備的一實施例示意圖。
【具體實施方式】
[0050]本發(fā)明實施例提供一種內存分配的方法,可以準確的找到鏡像內存,并為需要存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,從而保證的有限鏡像內存的使用效率,而且提高了系統(tǒng)的可靠性。本發(fā)明實施例還提供了相應的裝置及系統(tǒng)。以下分別進行詳細說明。
[0051]為了使本【技術領域】的人員更好地理解本發(fā)明方案,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。
[0052]參閱圖1,本發(fā)明實施例提供的計算機系統(tǒng)架構可以包括:硬件資源層、基本輸入輸出系統(tǒng)(Basic Input Output System,BOIS)、操作系統(tǒng)(Operat1n System,OS)和用戶應用層,所述硬件資源層可以包括處理器、內存、輸入輸出系統(tǒng)等硬件資源,用戶應用層可以包括各種業(yè)務應用,本發(fā)明實施例中的操作系統(tǒng)可以為Linux系統(tǒng)。
[0053]內存可以包括鏡像內存,在操作系統(tǒng)初始化時,BOIS會向OS上報內存信息,內存信息可以為各類型內存的地址范圍,其中包括鏡像內存的地址范圍,例如可以包含以下信息,通過e820映射圖的形式可以表示為:
[0054]e820:B1S-provided physical RAM map:
[0055][mem 0x0000000000000000-0x000000000009a7ff]usable
[0056][mem 0x000000000009a800-0x000000000009ffff]reserved
[0057][mem 0x00000000000e4b60-0x00000000000fffff]reserved
[0058][mem 0x0000000000100000-0x000000003fffffff]mirror (1M ?1G)
[0059][mem 0x0000000040000000-0x00000000bf78ffff]usable (1G ?3063M)
[0060][mem 0x00000000bf790000-0x00000000bf79dfff]ACPI data
[0061][mem 0x00000000bf79e000-0x00000000bf7cffff]ACPI NVS
[0062][mem 0x00000000bf7d0000-0x00000000bf7dffff]reserved
[0063][mem 0x00000000bf7ec000-0x00000000bfffffff]reserved
[0064][mem 0x00000000e0000000-0x00000000efffffff]reserved
[0065][mem 0x00000000fee00000-0x00000000fee00fff]reserved
[0066][mem 0x00000000fff00000-0x00000000ffffffff]reserved
[0067][mem 0x0000000100000000-0x00000002ffffffff]usable (4G ?12G)
[0068][mem 0x0000000300000000-0x000000033fffffff]mirror (12G ?13G)
[0069][mem 0x0000000340000000-0x00000005ffffffff]usable (13G ?24G)
[0070][mem 0x0000000600000000-0x000000063fffffff]mirror (24G ?25G)
[0071][mem 0x0000000640000000-0x0000000bffffffff]usable (25G ?36G)
[0072][mem 0x0000000900000000-0x000000093fffffff]mirror (36G ?37G)
[0073][mem 0x0000000940000000-0x0000000c3fffffff]usable (37G ?48G)…
[0074]其中,標記為mirror的地址范圍對應的內存為鏡像內存,本發(fā)明實施例中鏡像內存的地址范圍為(1M ?1G)、(12G ?13G)、(24G ?25G)、(36G ?37G)。
[0075]操作系統(tǒng)根據(jù)B1S上報的內存信息,可以建立一個鏡像內存管理區(qū)MIRRORZONE。MIRROR ZONE用來跟蹤和管理鏡像內存區(qū)域,其組織方式和普通的內存管理區(qū)相同。MIRROR ZONE可以有多個,多個MIRROR ZONE組成ZONE List。例如:本發(fā)明實施例中的鏡像內存可以有4個MIRROR ZONE,分別為(1M?1G)、(12G?13G)、(24G?25G)、(36G?37G)??梢砸来尉幪枮?MIRR0R_Z0NE1、MIRR0R_Z0NE2、MIRR0R_Z0NE3 和 MIRR0R_Z0NE4,按照非一致性內存訪問(Non Uniform Memory Access Architecture,NUMA)架構,可以將48G的內存劃分為4個節(jié)點,分別為(0M?12G)、(13G?24G)、(25G?36G)、(37G?48G),4個MIRROR ZONE分別屬于4個節(jié)點,在分配鏡像內存時,優(yōu)先分配本節(jié)點的鏡像內存,避免跨節(jié)點訪問內存,造成較大的延遲。
[0076]在為內核數(shù)據(jù)分配內存時,可以通過新增—GFP_MIRR0R標識,作為內核中優(yōu)先分配鏡像內存的標識。在為用戶數(shù)據(jù)分配內存時,可以指定—GFP_MIRR0R標識,優(yōu)先分配鏡像內存,也可以設置內核默認內核優(yōu)先分配鏡像內存。如以通過修改GFP_KERNEL的默認值,設置默認優(yōu)先分配鏡像內存:
[0077]#define GFP_KERNEL (_GFP_WAIT | _GFP_101 _GFP_FS | _GFP_MIRR0R)
[0078]針對內核數(shù)據(jù)優(yōu)先分配鏡像內存的過程如下:
[0079]1)0S啟動,判斷是否支持鏡像內存優(yōu)先分配的特性(B1S上報的內存分布圖中如果有MIRROR類型的內存,則說明支持該特性)。
[0080]2)若支持,OS根據(jù)B1S上報的內存信息,建立一個或多個MIRROR ZONE,并加入到所有NODE的ZONE鏈表中,以便每個節(jié)點都可以選擇在MIRROR ZONE中進行內存分配。
[0081]3)alloc_pages()是最基礎的頁框分配器,所有內存分配最終會走到這里,其負責在指定頁區(qū)(ZONE)中分配I個或多個(2的整數(shù)次冪個)連續(xù)頁框。如設置—GFP_MIRROR標識,則優(yōu)先從MIRROR ZONE中分配內存。
[0082]4)分配內存時,優(yōu)先從MIRROR ZONE區(qū)分配內存,若MIRROR類型的內存不足,則再從普通區(qū)域分配。
[0083]5)如果系統(tǒng)的鏡像內存數(shù)量很少,不足以滿足所有內核數(shù)據(jù)存儲的情況下,也可以關閉默認分配鏡像內存的設置,改為手動分配鏡像內存。比如,某些重要驅動程序,有較高的可靠性需求,可在分配內存時,手動指定—GFP_MIRR0R標識。
[0084]6)鏡像內存使用完釋放時,釋放到對應的MIRROR ZONE里;
[0085]本發(fā)明實施例不改變alloc_pages()等內存分配函數(shù)的接口及使用方式,使大量既有驅動程序不需做任何修改即可使用該特性。
[0086]針對用戶進程數(shù)據(jù)優(yōu)先分配鏡像內存
[0087]針對新創(chuàng)建的進程:
[0088]I)創(chuàng)建進程
[0089]2)修改進程描述符,在進程描述符中設置鏡像內存分配標識MIRR0R_FIRST,本發(fā)明中,通過系統(tǒng)調用或用戶態(tài)命令可以設置該標識。
[0090]3)分配內存時,如果MIRR0R_FIRST設置,則優(yōu)先使用鏡像內存,優(yōu)先從MIRRORZONE分配內存,否則使用普通內存,從NORMAL ZONE分配內存,如果鏡像內存不足,也分配普通內存。
[0091]4)子進程創(chuàng)建時,默認繼承MIRR0R_FIRST標識的設置。
[0092]針對正在運行的進程:
[0093]I)通過/proc接口或者系統(tǒng)調用設置進程的MIRR0R_FIRST標識,使進程分配內存時,優(yōu)先分配鏡像內存。
[0094]2)同時,將之前分配的普通內存中的數(shù)據(jù),遷移到鏡像內存中.
[0095]參閱圖2,本發(fā)明實施例提供的內存分配的方法的一實施例包括:
[0096]所述方法應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述方法包括:
[0097]101、獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存。
[0098]102、對待分配內存的數(shù)據(jù)進行檢測。
[0099]103、當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0100]本發(fā)明實施例提供的內存分配的方法,所述方法應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述方法包括:獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存;對待分配內存的數(shù)據(jù)進行檢測;當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。與現(xiàn)有技術中操作系統(tǒng)無法感知到進行內存的變化,且在鏡像內存大小有限的情況下,無法為需要分配鏡像內存的數(shù)據(jù)分配鏡像內存相比,本發(fā)明實施例提供的內存分配的方法,BOIS向所述OS提供鏡像內存地址區(qū)間,從而可以準確的找到鏡像內存,并為需要存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,從而保證的有限鏡像內存的使用效率,而且提高了系統(tǒng)的可靠性。
[0101]可選地,在上述圖2對應的實施例的基礎上,本發(fā)明實施例提供的內存分配的方法的第一個可選實施例中,所述對待分配內存的數(shù)據(jù)進行檢測之前,所述方法還可以包括:
[0102]為內核數(shù)據(jù)和關鍵用戶數(shù)據(jù)設置鏡像標識,所述關鍵用戶數(shù)據(jù)為用戶指定的需要鏡像存儲的數(shù)據(jù);
[0103]所述對待分配內存的數(shù)據(jù)進行檢測,可以包括:
[0104]檢測所述待分配內存的數(shù)據(jù)是否攜帶有所述鏡像標識;
[0105]所述當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,可以包括:
[0106]當檢測到所述待分配內存的數(shù)據(jù)攜帶有所述鏡像標識,確定所述待分配內存的數(shù)據(jù)為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù),從所述未被占用的鏡像內存中為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù)分配鏡像內存。
[0107]本發(fā)明實施例中,可以將內核數(shù)據(jù)全部分配鏡像內存,針對用戶數(shù)據(jù)可以根據(jù)用戶的需求進行設置,當用戶指定某類型數(shù)據(jù)為關鍵用戶數(shù)據(jù)時,則對該類型的數(shù)據(jù)設置鏡像標識,為該類型的數(shù)據(jù)分配鏡像內存。
[0108]可選地,在上述第一個可選實施例的基礎上,本發(fā)明實施例提供的內存分配的方法的第二個可選實施例中,所述方法還可以包括:
[0109]當所述待分配內存的數(shù)據(jù)為所述關鍵用戶數(shù)據(jù)時,確定同一進程數(shù)據(jù)是否存儲在所述初始鏡像內存中,所述同一進程數(shù)據(jù)為在所述關鍵用戶數(shù)據(jù)之前由產生所述關鍵用戶數(shù)據(jù)的同一進程所產生的數(shù)據(jù);
[0110]若所述同一進程數(shù)據(jù)未存儲到所述鏡像內存中,則將所述同一進程數(shù)據(jù)轉移到所述初始鏡像內存中。
[0111]本發(fā)明實施例中,是針對正在進行中的進程設置鏡像標記的情況,例如:用戶正在編輯的一個word文檔,文檔編輯一部分后,用戶才指定該word文檔為關鍵用戶數(shù)據(jù),則針對該word文檔的數(shù)據(jù)已編輯的一部分已經(jīng)分配了普通內存,在用戶指定后再編輯的部分則會分配鏡像內存,這樣就可以將普通內存中的在先數(shù)據(jù)也轉移到鏡像內存中。
[0112]可選地,在上述圖2對應的實施例或任一可選實施例的基礎上,本發(fā)明實施例提供的內存分配的方法的第三個可選實施例中,所述從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,可以包括:
[0113]確定所述待存儲到鏡像內存的數(shù)據(jù)所屬的預劃分內存資源區(qū)域;
[0114]從所述所屬的預劃分內存資源區(qū)域的未被占用的鏡像內存中,為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0115]本發(fā)明實施例是針對鏡像內存分布在不同NUMA節(jié)點的情況,在本節(jié)點內分配鏡像內存,可以避免跨節(jié)點訪問內存,造成較大的延遲。
[0116]可選地,在上述圖2對應的實施例或任一可選實施例的基礎上,本發(fā)明實施例提供的內存分配的方法的第四個可選實施例中,所述從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存之后,所述方法還可以包括:
[0117]為所述待存儲到鏡像內存的數(shù)據(jù)所分配的鏡像內存的地址區(qū)間設置已占用標記。
[0118]本發(fā)明實施例中,在鏡像內存被占用后,要在備占用的鏡像內存的地址區(qū)間上設置標記,這樣,在分配進行內存時,就可以快速的查找到未被占用的鏡像內存。
[0119]參閱圖3,本發(fā)明實施例提供的內存分配的裝置的一實施例包括:所述裝置應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述裝置20包括:
[0120]獲取單元201,用于獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存;
[0121]檢測單元202,用于對待分配內存的數(shù)據(jù)進行檢測;
[0122]分配單元203,用于當所述檢測單元202檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述獲取單元201獲取的所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0123]本發(fā)明實施例中提供的內存分配的裝置,所述裝置應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述裝置20包括:獲取單元201獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存;檢測單元202對待分配內存的數(shù)據(jù)進行檢測;分配單元203當所述檢測單元202檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述獲取單元201獲取的所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。與現(xiàn)有技術中操作系統(tǒng)無法感知到進行內存的變化,且在鏡像內存大小有限的情況下,無法為需要分配鏡像內存的數(shù)據(jù)分配鏡像內存相比,本發(fā)明實施例提供的內存分配的裝置,BOIS向所述OS提供鏡像內存地址區(qū)間,從而可以準確的找到鏡像內存,并為需要存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,從而保證的有限鏡像內存的使用效率,而且提高了系統(tǒng)的可靠性。
[0124]可選地,在上述圖3對應的實施例的基礎上,參閱圖4,本發(fā)明實施例提供的內存分配的裝置的另一實施例中,所述裝置20還包括:
[0125]第一設置單元204,用于在所述檢測單元202對待分配內存的數(shù)據(jù)進行檢測之前,為內核數(shù)據(jù)和關鍵用戶數(shù)據(jù)設置鏡像標識,所述關鍵用戶數(shù)據(jù)為用戶指定的需要鏡像存儲的數(shù)據(jù);
[0126]所述檢測單元202,用于檢測所述待分配內存的數(shù)據(jù)是否攜帶有所述第一設置單元204設置的所述鏡像標識;
[0127]所述分配單元203,用于當所述檢測單元202檢測到所述待分配內存的數(shù)據(jù)攜帶有所述鏡像標識,確定所述待分配內存的數(shù)據(jù)為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù),從所述未被占用的鏡像內存中為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù)分配鏡像內存。
[0128]可選地,在上述圖4對應的實施例的基礎上,參閱圖5,本發(fā)明實施例提供的內存分配的裝置的另一實施例中,所述裝置20還包括:
[0129]確定單元205,用于當所述待分配內存的數(shù)據(jù)為所述設置單元204設置的關鍵用戶數(shù)據(jù)時,確定同一進程數(shù)據(jù)是否存儲在所述初始鏡像內存中,所述同一進程數(shù)據(jù)為在所述關鍵用戶數(shù)據(jù)之前由產生所述關鍵用戶數(shù)據(jù)的同一進程所產生的數(shù)據(jù);
[0130]轉移單元206,用于當所述確定單元205確定所述同一進程數(shù)據(jù)未存儲到所述鏡像內存中時,則將所述同一進程數(shù)據(jù)轉移到所述初始鏡像內存中。
[0131]可選地,在上述圖3對應的實施例的基礎上,參閱圖6,本發(fā)明實施例提供的內存分配的裝置的另一實施例中,所述分配單元203包括:
[0132]確定子單元2031,用于確定所述待存儲到鏡像內存的數(shù)據(jù)所屬的預劃分內存資源區(qū)域;
[0133]分配子單元2032,用于從所述確定子單元2021確定的所屬的預劃分內存資源區(qū)域的未被占用的鏡像內存中,為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0134]可選地,在上述圖3對應的實施例的基礎上,參閱圖7,本發(fā)明實施例提供的內存分配的裝置的另一實施例中,所述裝置20還包括:
[0135]第二設置單元207,用于在所述分配單元203分配鏡像內存后,為所述待存儲到鏡像內存的數(shù)據(jù)所分配的鏡像內存的地址區(qū)間設置已占用標記。
[0136]圖8是本發(fā)明實施例內存分配設備40的結構示意圖。內存分配設備40可包括輸入/輸出設備410、處理器430和存儲器440。
[0137]存儲器440可以包括只讀存儲器和隨機存取存儲器,并向處理器430提供指令和數(shù)據(jù)。存儲器440的一部分還可以包括非易失性隨機存取存儲器(NVRAM)。
[0138]存儲器440存儲了如下的元素,可執(zhí)行模塊或者數(shù)據(jù)結構,或者它們的子集,或者它們的擴展集:
[0139]操作指令:包括各種操作指令,用于實現(xiàn)各種操作。
[0140]操作系統(tǒng):包括各種系統(tǒng)程序,用于實現(xiàn)各種基礎業(yè)務以及處理基于硬件的任務。
[0141]所述內存分配設備應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,在本發(fā)明實施例中,處理器430通過調用存儲器440存儲的操作指令(該操作指令可存儲在操作系統(tǒng)中),執(zhí)行如下操作:
[0142]獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存;
[0143]對待分配內存的數(shù)據(jù)進行檢測;
[0144]當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0145]本發(fā)明實施例中,內存分配設備40的BOIS向所述OS提供鏡像內存地址區(qū)間,從而可以準確的找到鏡像內存,并為需要存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,從而保證的有限鏡像內存的使用效率,而且提高了系統(tǒng)的可靠性。
[0146]處理器430控制內存分配設備40的操作,處理器430還可以稱為CPU (CentralProcessing Unit,中央處理單元)。存儲器440可以包括只讀存儲器和隨機存取存儲器,并向處理器430提供指令和數(shù)據(jù)。存儲器440的一部分還可以包括非易失性隨機存取存儲器(NVRAM)。具體的應用中,內存分配設備40的各個組件通過總線系統(tǒng)450耦合在一起,其中總線系統(tǒng)450除包括數(shù)據(jù)總線之外,還可以包括電源總線、控制總線和狀態(tài)信號總線等。但是為了清楚說明起見,在圖中將各種總線都標為總線系統(tǒng)450。
[0147]上述本發(fā)明實施例揭示的方法可以應用于處理器430中,或者由處理器430實現(xiàn)。處理器430可能是一種集成電路芯片,具有信號的處理能力。在實現(xiàn)過程中,上述方法的各步驟可以通過處理器430中的硬件的集成邏輯電路或者軟件形式的指令完成。上述的處理器430可以是通用處理器、數(shù)字信號處理器(DSP)、專用集成電路(ASIC)、現(xiàn)成可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件??梢詫崿F(xiàn)或者執(zhí)行本發(fā)明實施例中的公開的各方法、步驟及邏輯框圖。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。結合本發(fā)明實施例所公開的方法的步驟可以直接體現(xiàn)為硬件譯碼處理器執(zhí)行完成,或者用譯碼處理器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機存儲器,閃存、只讀存儲器,可編程只讀存儲器或者電可擦寫可編程存儲器、寄存器等本領域成熟的存儲介質中。該存儲介質位于存儲器440,處理器430讀取存儲器440中的信息,結合其硬件完成上述方法的步驟。
[0148]可選地,所述處理器430還用于為內核數(shù)據(jù)和關鍵用戶數(shù)據(jù)設置鏡像標識,所述關鍵用戶數(shù)據(jù)為用戶指定的需要鏡像存儲的數(shù)據(jù);檢測所述待分配內存的數(shù)據(jù)是否攜帶有所述鏡像標識;當檢測到所述待分配內存的數(shù)據(jù)攜帶有所述鏡像標識,確定所述待分配內存的數(shù)據(jù)為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù),從所述未被占用的鏡像內存中為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù)分配鏡像內存。
[0149]可選地,所述處理器430還用于當所述待分配內存的數(shù)據(jù)為所述關鍵用戶數(shù)據(jù)時,確定同一進程數(shù)據(jù)是否存儲在所述初始鏡像內存中,所述同一進程數(shù)據(jù)為在所述關鍵用戶數(shù)據(jù)之前由產生所述關鍵用戶數(shù)據(jù)的同一進程所產生的數(shù)據(jù);若所述同一進程數(shù)據(jù)未存儲到所述鏡像內存中,則將所述同一進程數(shù)據(jù)轉移到所述初始鏡像內存中。
[0150]可選地,所述處理器430具體用于確定所述待存儲到鏡像內存的數(shù)據(jù)所屬的預劃分內存資源區(qū)域;從所述所屬的預劃分內存資源區(qū)域的未被占用的鏡像內存中,為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
[0151 ] 可選地,所述處理器430還用于從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存之后,為所述待存儲到鏡像內存的數(shù)據(jù)所分配的鏡像內存的地址區(qū)間設置已占用標記。
[0152]本領域普通技術人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關的硬件(例如處理器)來完成,該程序可以存儲于一計算機可讀存儲介質中,存儲介質可以包括:R0M、RAM、磁盤或光盤等。
[0153]以上對本發(fā)明實施例所提供的媒體流信息更新的方法、裝置以及系統(tǒng)進行了詳細介紹,本文中應用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領域的一般技術人員,依據(jù)本發(fā)明的思想,在【具體實施方式】及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發(fā)明的限制。
【權利要求】
1.一種內存分配的方法,其特征在于,所述方法應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述方法包括: 獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存; 對待分配內存的數(shù)據(jù)進行檢測; 當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
2.根據(jù)權利要求1所述的方法,其特征在于,所述對待分配內存的數(shù)據(jù)進行檢測之前,所述方法還包括: 為內核數(shù)據(jù)和關鍵用戶數(shù)據(jù)設置鏡像標識,所述關鍵用戶數(shù)據(jù)為用戶指定的需要鏡像存儲的數(shù)據(jù); 所述對待分配內存的數(shù)據(jù)進行檢測,包括: 檢測所述待分配內存的數(shù)據(jù)是否攜帶有所述鏡像標識; 所述當檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,包括: 當檢測到所述待分配內存的數(shù)據(jù)攜帶有所述鏡像標識,確定所述待分配內存的數(shù)據(jù)為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù),從所述未被占用的鏡像內存中為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù)分配鏡像內存。
3.根據(jù)權利要求2所述的方法,其特征在于,所述方法還包括: 當所述待分配內存的數(shù)據(jù)為所述關鍵用戶數(shù)據(jù)時,確定同一進程數(shù)據(jù)是否存儲在所述初始鏡像內存中,所述同一進程數(shù)據(jù)為在所述關鍵用戶數(shù)據(jù)之前由產生所述關鍵用戶數(shù)據(jù)的同一進程所產生的數(shù)據(jù); 若所述同一進程數(shù)據(jù)未存儲到所述鏡像內存中,則將所述同一進程數(shù)據(jù)轉移到所述初始鏡像內存中。
4.根據(jù)權利要求1-3任一所述的方法,其特征在于,所述從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存,包括: 確定所述待存儲到鏡像內存的數(shù)據(jù)所屬的預劃分內存資源區(qū)域; 從所述所屬的預劃分內存資源區(qū)域的未被占用的鏡像內存中,為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
5.根據(jù)權利要求1-3任一所述的方法,其特征在于,所述從所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存之后,所述方法還包括: 為所述待存儲到鏡像內存的數(shù)據(jù)所分配的鏡像內存的地址區(qū)間設置已占用標記。
6.一種內存分配的裝置,其特征在于,所述裝置應用于計算機系統(tǒng)中,所述計算機系統(tǒng)包括內存資源、基本輸入輸出系統(tǒng)BOIS和操作系統(tǒng)OS,所述內存資源中包含初始鏡像內存,在所述操作系統(tǒng)運行時,所述裝置包括: 獲取單元,用于獲取所述初始鏡像內存中未被占用的鏡像內存,所述初始鏡像內存為在所述OS初始化時所述BOIS向所述OS提供的鏡像內存地址區(qū)間所指示的鏡像內存;檢測單元,用于對待分配內存的數(shù)據(jù)進行檢測; 分配單元,用于當所述檢測單元檢測到所述數(shù)據(jù)為待存儲到鏡像內存的數(shù)據(jù)時,從所述獲取單元獲取的所述未被占用的鏡像內存中為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
7.根據(jù)權利要求6所述的裝置,其特征在于,所述裝置還包括: 第一設置單元,用于在所述檢測單元對待分配內存的數(shù)據(jù)進行檢測之前,為內核數(shù)據(jù)和關鍵用戶數(shù)據(jù)設置鏡像標識,所述關鍵用戶數(shù)據(jù)為用戶指定的需要鏡像存儲的數(shù)據(jù);所述檢測單元,用于檢測所述待分配內存的數(shù)據(jù)是否攜帶有所述第一設置單元設置的所述鏡像標識; 所述分配單元,用于當所述檢測單元檢測到所述待分配內存的數(shù)據(jù)攜帶有所述鏡像標識,確定所述待分配內存的數(shù)據(jù)為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù),從所述未被占用的鏡像內存中為所述內核數(shù)據(jù)或所述關鍵用戶數(shù)據(jù)分配鏡像內存。
8.根據(jù)權利要求7所述的裝置,其特征在于,所述裝置還包括: 確定單元,用于當所述待分配內存的數(shù)據(jù)為所述關鍵用戶數(shù)據(jù)時,確定同一進程數(shù)據(jù)是否存儲在所述初始鏡像內存中,所述同一進程數(shù)據(jù)為在所述關鍵用戶數(shù)據(jù)之前由產生所述關鍵用戶數(shù)據(jù)的同一進程所產生的數(shù)據(jù); 轉移單元,用于當所述確定單元確定所述同一進程數(shù)據(jù)未存儲到所述鏡像內存中時,則將所述同一進程數(shù)據(jù)轉移到所述初始鏡像內存中。
9.根據(jù)權利要求6-8任一所述的裝置,其特征在于,所述分配單元包括: 確定子單元,用于確定所述待存儲到鏡像內存的數(shù)據(jù)所屬的預劃分內存資源區(qū)域; 分配子單元,用于從所述確定子單元確定的所屬的預劃分內存資源區(qū)域的未被占用的鏡像內存中,為所述待存儲到鏡像內存的數(shù)據(jù)分配鏡像內存。
10.根據(jù)權利要求6-8任一所述的裝置,其特征在于,所述裝置還包括: 第二設置單元,用于在所述分配單元分配鏡像內存后,為所述待存儲到鏡像內存的數(shù)據(jù)所分配的鏡像內存的地址區(qū)間設置已占用標記。
【文檔編號】G06F12/02GK104252419SQ201410471145
【公開日】2014年12月31日 申請日期:2014年9月16日 優(yōu)先權日:2014年9月16日
【發(fā)明者】謝秀奇, 裘稀石 申請人:杭州華為數(shù)字技術有限公司