存儲空間分配方法及設(shè)備的制作方法
【專利摘要】本發(fā)明實施例提供一種存儲空間分配方法及設(shè)備。方法包括:獲取數(shù)據(jù)布局策略說明文件;對數(shù)據(jù)布局策略說明文件進行解析,獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息;為應(yīng)用程序創(chuàng)建虛擬地址空間,并記錄數(shù)據(jù)的虛擬地址與數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系;接收應(yīng)用程序運行過程中產(chǎn)生的缺頁中斷請求;根據(jù)缺頁中斷請求中的物理頁對應(yīng)的虛擬地址,查詢第二映射關(guān)系,獲取物理頁所在的存儲設(shè)備的標(biāo)識信息;根據(jù)物理頁所在的存儲設(shè)備的標(biāo)識信息,為應(yīng)用程序分配物理頁。采用本發(fā)明技術(shù)方案可以提高混合內(nèi)存的存儲性能,具有實現(xiàn)簡單的優(yōu)勢。
【專利說明】存儲空間分配方法及設(shè)備
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲技術(shù),尤其涉及一種存儲空間分配方法及設(shè)備。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的應(yīng)用的數(shù)據(jù)不斷增長,因此對內(nèi)存容量的要求越來越高。但因為動態(tài)隨機存取存儲器(Dynamic Random AccessMemory,簡稱為DRAM)的物理特性導(dǎo)致DRAM的集成度差,能耗較大,很難滿足應(yīng)用的需求。非易失存儲器件(Non-Volatile Memory,簡稱為NVM)的讀寫速度接近DRAM,而集成度卻很高,能耗較低,可以做成大容量的內(nèi)存,NVM的出現(xiàn)彌補了 DRAM的不足。但是,NVM有寫次數(shù)限制,一個單元在寫次數(shù)達到某一閾值后就會損壞,不能再寫。
[0003]結(jié)合DRAM和NVM各自的特點,目前工業(yè)界和學(xué)術(shù)界開始越來越多的研究將DRAM和NVM結(jié)合作成混合內(nèi)存。在這種混合內(nèi)存中,如何存儲數(shù)據(jù)才能充分發(fā)揮DRAM和NVM各自的優(yōu)勢,避免各自的劣勢稱為混合內(nèi)存性能好壞的關(guān)鍵。
[0004]現(xiàn)有技術(shù)中存在一種由編程人員感知的數(shù)據(jù)存儲方法。該方法提供編程人員可以感知的語義接口,編程人員在編寫程序時在準(zhǔn)備存儲到NVM中的變量前面加上該語義接口對應(yīng)的關(guān)鍵字,這樣變量在程序執(zhí)行過程中就會被存儲到NVM中。但是,該方法的實現(xiàn)需要修改編譯器,并且不能兼容已經(jīng)存在的應(yīng)用程序,總之,該方法的可用性較差。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例提供一種存儲空間分配方法及設(shè)備,用以提高混合內(nèi)存的存儲性能,降低實現(xiàn)難度。
[0006]第一方面提供一種存儲空間分配方法,包括:
[0007]獲取數(shù)據(jù)布局策略說明文件,所述數(shù)據(jù)布局策略說明文件包括應(yīng)用程序?qū)?yīng)的各數(shù)據(jù)類別與混合內(nèi)存中各存儲設(shè)備之間的第一映射關(guān)系,所述混合內(nèi)存包括至少兩類存儲設(shè)備;
[0008]對所述數(shù)據(jù)布局策略說明文件進行解析,獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識息;
[0009]根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述應(yīng)用程序創(chuàng)建虛擬地址空間,并記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系;
[0010]接收所述應(yīng)用程序運行過程中產(chǎn)生的缺頁中斷請求,所述缺頁中斷請求攜帶有所述應(yīng)用程序請求分配的物理頁對應(yīng)的虛擬地址;
[0011]根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息;
[0012]根據(jù)所述物理頁所在的存儲設(shè)備的標(biāo)識信息,為所述應(yīng)用程序分配所述物理頁。
[0013]在第一方面的第一種可能的實現(xiàn)方式中,所述獲取數(shù)據(jù)布局策略說明文件包括:在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的命令行參數(shù)數(shù)組,從所述命令行參數(shù)數(shù)組中獲取所述數(shù)據(jù)布局策略說明文件的路徑信息;
[0014]根據(jù)所述路徑信息獲取所述數(shù)據(jù)布局策略說明文件。
[0015]在第一方面的第二種可能的實現(xiàn)方式中,所述獲取數(shù)據(jù)布局策略說明文件包括:在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的環(huán)境變量數(shù)組,從所述環(huán)境變量數(shù)組中獲取表征所述數(shù)據(jù)布局策略說明文件的路徑信息的環(huán)境變量值;根據(jù)所述環(huán)境變量值獲取所述數(shù)據(jù)布局策略說明文件。
[0016]結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式或第一方面的第二種可能的實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,所述根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述應(yīng)用程序創(chuàng)建虛擬地址空間包括:根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述虛擬地址空間中所述應(yīng)用程序使用的地址空間創(chuàng)建頁表;根據(jù)所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,將所述虛擬地址空間中所述應(yīng)用程序使用的地址空間劃分為進程虛擬內(nèi)存區(qū)VMA。
[0017]結(jié)合第一方面的第三種可能的實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,所述記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系包括:確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息;將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,以記錄所述第二映射關(guān)系;將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)存儲到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的VMA中;
[0018]所述根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息包括:根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁的虛擬地址所在VMA中的數(shù)據(jù)結(jié)構(gòu),獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
[0019]結(jié)合第一方面的第三種可能的實現(xiàn)方式,在第一方面的第五種可能的實現(xiàn)方式中,所述記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系包括:確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息;將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)的虛擬地址對應(yīng)的頁表中,以記錄所述第二映射關(guān)系;
[0020]所述根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息包括:根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁對應(yīng)的虛擬地址對應(yīng)的頁表,獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
[0021]第二方面提供一種存儲空間分配設(shè)備,包括:
[0022]第一獲取模塊,用于獲取數(shù)據(jù)布局策略說明文件,所述數(shù)據(jù)布局策略說明文件包括應(yīng)用程序?qū)?yīng)的各數(shù)據(jù)類別與混合內(nèi)存中各存儲設(shè)備之間的第一映射關(guān)系,所述混合內(nèi)存包括至少兩類存儲設(shè)備;
[0023]第二獲取模塊,用于對所述數(shù)據(jù)布局策略說明文件進行解析,獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息;
[0024]創(chuàng)建模塊,用于根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述應(yīng)用程序創(chuàng)建虛擬地址空間;[0025]記錄模塊,用于記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系;
[0026]接收模塊,用于接收所述應(yīng)用程序運行過程中產(chǎn)生的缺頁中斷請求,所述缺頁中斷請求攜帶有所述應(yīng)用程序請求分配的物理頁對應(yīng)的虛擬地址;
[0027]第三獲取模塊,用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息;
[0028]分配模塊,用于根據(jù)所述物理頁所在的存儲設(shè)備的標(biāo)識信息,為所述應(yīng)用程序分配所述物理頁。
[0029]在第二方面的第一種可能的實現(xiàn)方式中,所述第一獲取模塊具體用于在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的命令行參數(shù)數(shù)組,從所述命令行參數(shù)數(shù)組中獲取所述數(shù)據(jù)布局策略說明文件的路徑信息,根據(jù)所述路徑信息獲取所述數(shù)據(jù)布局策略說明文件。
[0030]在第二方面的第二種可能的實現(xiàn)方式中,所述第一獲取模塊具體用于在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的環(huán)境變量數(shù)組,從所述環(huán)境變量數(shù)組中獲取表征所述數(shù)據(jù)布局策略說明文件的路徑信息的環(huán)境變量值,根據(jù)所述環(huán)境變量值獲取所述數(shù)據(jù)布局策略說明文件。
[0031]結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式或第二方面的第二種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,所述創(chuàng)建模塊具體用于根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述虛擬地址空間中所述應(yīng)用程序使用的地址空間創(chuàng)建頁表;根據(jù)所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,將所述虛擬地址空間中所述應(yīng)用程序使用的地址空間劃分為進程虛擬內(nèi)存區(qū)VMA。
[0032]結(jié)合第二方面的第三種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,所述記錄模塊具體用于確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,以記錄所述第二映射關(guān)系,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)存儲到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的VMA中;
[0033]所述第三獲取模塊具體用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁的虛擬地址所在VMA中的數(shù)據(jù)結(jié)構(gòu),獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
[0034]結(jié)合第二方面的第三種可能的實現(xiàn)方式,在第二方面的第五種可能的實現(xiàn)方式中,所述記錄模塊具體用于確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)的虛擬地址對應(yīng)的頁表中,以記錄所述第二映射關(guān)系;
[0035]所述第三獲取模塊具體用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁對應(yīng)的虛擬地址對應(yīng)的頁表,獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
[0036]本發(fā)明實施例提供的存儲空間分配方法及設(shè)備,通過數(shù)據(jù)布局策略說明文件提供每類數(shù)據(jù)與混合內(nèi)存中存儲設(shè)備之間的存儲關(guān)系,然后對該數(shù)據(jù)布局策略說明文件進行解析,獲取每類數(shù)據(jù)應(yīng)該存儲到哪個存儲設(shè)備的信息,并基于該信息,給應(yīng)用程序運行過程中的數(shù)據(jù)分配相應(yīng)的存儲設(shè)備,從而將不同數(shù)據(jù)存儲到不同存儲設(shè)備上,充分發(fā)揮不同存儲設(shè)備的優(yōu)勢,由于數(shù)據(jù)布局策略說明文件不依賴于應(yīng)用程序,因此,不需要修改編譯器,并且對于已經(jīng)存在的應(yīng)用程序不需要重新編寫,可以兼容已經(jīng)存在的應(yīng)用程序,適應(yīng)性較好。
【專利附圖】
【附圖說明】
[0037]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0038]圖1為本發(fā)明實施例提供的一種存儲空間分配方法的流程圖;
[0039]圖2為本發(fā)明實施例提供的一種存儲空間分配設(shè)備的結(jié)構(gòu)示意圖;
[0040]圖3為本發(fā)明實施例提供的另一種存儲空間分配設(shè)備的結(jié)構(gòu)示意圖。
【具體實施方式】
[0041]為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0042]圖1為本發(fā)明實施例提供的一種存儲空間分配方法的流程圖。如圖1所示,本實施例的方法包括:
[0043]步驟101、獲取數(shù)據(jù)布局策略說明文件,所述數(shù)據(jù)布局策略說明文件包括應(yīng)用程序?qū)?yīng)的各數(shù)據(jù)類別與混合內(nèi)存中各存儲設(shè)備之間的第一映射關(guān)系,所述混合內(nèi)存包括至少兩類存儲設(shè)備。
[0044]在本實施例中,編程人員預(yù)先結(jié)合應(yīng)用程序,定義數(shù)據(jù)分布策略說明文件。在數(shù)據(jù)布局策略說明文件中,編程人員預(yù)先定義應(yīng)用程序所支持的每種數(shù)據(jù)類別與混合內(nèi)存中各存儲設(shè)備之間的映射關(guān)系,為便于區(qū)分,數(shù)據(jù)布局策略說明文件中定義的數(shù)據(jù)類別與存儲設(shè)備之間的映射關(guān)系稱為第一映射關(guān)系。簡單來說,通過數(shù)據(jù)布局策略說明文件可以獲知應(yīng)用程序中每類數(shù)據(jù)應(yīng)該存儲到混合內(nèi)存中哪個存儲設(shè)備。數(shù)據(jù)布局策略說明文件是一種獨立于應(yīng)用程序的文件。
[0045]可選的,可以根據(jù)編譯該應(yīng)用程序所劃分出的段(Section)和在加載應(yīng)用程序時為該應(yīng)用程序添加的段,確定應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別。例如,可以確定每個段對應(yīng)一種數(shù)據(jù)類別。假設(shè),編譯器對應(yīng)用程序進行編譯的結(jié)果包括兩個段,分別為數(shù)據(jù)段和代碼段,在加載該應(yīng)用程序時為該應(yīng)用程序添加兩個段:堆段和棧段,則該應(yīng)用程序?qū)?yīng)四種數(shù)據(jù)類另O,即該應(yīng)用程序中涉及四類數(shù)據(jù)。又例如,可以確定所有段中除數(shù)據(jù)段之外的其他每個段都對應(yīng)一種數(shù)據(jù)類別,而確定數(shù)據(jù)段中的每個變量對應(yīng)一種數(shù)據(jù)類別。假設(shè),編譯器對應(yīng)用程序進行編譯的結(jié)果包括兩個段,分別為數(shù)據(jù)段和代碼段,其中,數(shù)據(jù)段涉及四個變量,在加載應(yīng)用程序時為該應(yīng)用程序添加兩個段:堆段和棧段。則代碼段、堆段和棧段各自對應(yīng)一種數(shù)據(jù)類別,而數(shù)據(jù)段中的四個變量各自對應(yīng)一種數(shù)據(jù)類別,則該應(yīng)用程序一共對應(yīng)八種數(shù)據(jù)類別,即對應(yīng)八類數(shù)據(jù)。[0046]在確定應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別之后,可以編寫數(shù)據(jù)布局策略說明文件。
[0047]在本實施例中,混合內(nèi)存至少包括兩類存儲設(shè)備。混合內(nèi)存可以由兩類不同的存儲設(shè)備構(gòu)成,例如混合內(nèi)存可以由DRAM和NVM兩類存儲設(shè)備構(gòu)成。本實施例的混合內(nèi)存還可以由三類或三類以上不同類型的存儲設(shè)備構(gòu)成。
[0048]在本實施例中,無論是由兩類存儲設(shè)備構(gòu)成的混合內(nèi)存,還是由三類或三類以上不同存儲設(shè)備構(gòu)成的混合內(nèi)存,可以為每類存儲設(shè)備分配一個編號,編號可以唯一標(biāo)識一類存儲設(shè)備?;诖?,可以采用但不限于以下形式來存儲第一映射關(guān)系:
[0049]在數(shù)據(jù)布局策略說明文件中,一行定義一個數(shù)據(jù)類別與其應(yīng)該存放到的存儲設(shè)備的映射關(guān)系;預(yù)先定義每個數(shù)據(jù)類別的編號和存儲設(shè)備的編號,此時每行格式可為:數(shù)據(jù)類別的編號:存儲設(shè)備的編號。
[0050]在生成數(shù)據(jù)布局策略說明文件之后,數(shù)據(jù)布局策略說明文件會被存儲到某個位置,例如,可以存儲到存儲空間分配設(shè)備上的某個存儲位置。其中,通過數(shù)據(jù)布局策略說明文件的路徑信息可以獲取到數(shù)據(jù)布局策略說明文件。
[0051]在本實施例中,存儲空間分配設(shè)備可以在應(yīng)用程序的加載過程中,通過數(shù)據(jù)布局策略說明文件的路徑信息,獲取數(shù)據(jù)布局策略說明文件。
[0052]可選的,數(shù)據(jù)布局策略說明文件的路徑信息可以以應(yīng)用程序的命令行參數(shù)的形式提供給存儲空間分配設(shè)備?;诖耍鎯臻g分配設(shè)備可以在應(yīng)用程序的加載過程中,訪問應(yīng)用程序的命令行參數(shù)數(shù)組,從命令行參數(shù)數(shù)組中獲取數(shù)據(jù)布局策略說明文件的路徑信息,然后根據(jù)獲取的路徑信息獲取所述數(shù)據(jù)布局策略說明文件。
[0053]可選的,數(shù)據(jù)布局策略說明文件的路徑信息可以以應(yīng)用程序的環(huán)境變量的形式提供給存儲空間分配設(shè)備?;诖耍鎯臻g分配設(shè)備在應(yīng)用程序的加載過程中,訪問應(yīng)用程序的環(huán)境變量數(shù)組,從環(huán)境變量數(shù)組中獲取表征數(shù)據(jù)布局策略說明文件的路徑信息的環(huán)境變量值,然后根據(jù)該環(huán)境變量值獲取數(shù)據(jù)布局策略說明文件。
[0054]步驟102、對數(shù)據(jù)布局策略說明文件進行解析,獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息。
[0055]存儲空間分配設(shè)備在獲取數(shù)據(jù)布局策略說明文件之后,對數(shù)據(jù)布局策略說明文件進行解析,從而獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息。例如,存儲設(shè)備的標(biāo)識信息可以是為存儲設(shè)備分配的編號等。其中,存儲空間分配設(shè)備會存儲獲取的每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息。
[0056]步驟103、根據(jù)應(yīng)用程序中數(shù)據(jù)的虛擬地址,為應(yīng)用程序創(chuàng)建虛擬地址空間,并記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系。
[0057]在獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之后,存儲空間分配設(shè)備會根據(jù)應(yīng)用程序中數(shù)據(jù)的虛擬地址,為該應(yīng)用程序創(chuàng)建虛擬地址空間。其中,應(yīng)用程序中數(shù)據(jù)的虛擬地址是在編譯應(yīng)用程序的過程中確定的,對存儲空間分配設(shè)備來說是可以獲知的。其中,存儲空間分配設(shè)備可以根據(jù)應(yīng)用程序中數(shù)據(jù)的虛擬地址,確定該應(yīng)用程序的虛擬地址空間,另外還可以確定虛擬地址空間中該應(yīng)用程序所使用的地址空間?;诖?,存儲空間分配設(shè)備為應(yīng)用程序創(chuàng)建虛擬地址空間的過程包括:存儲空間分配設(shè)備根據(jù)應(yīng)用程序中數(shù)據(jù)的虛擬地址,為虛擬地址空間中該應(yīng)用程序所使用的地址空間創(chuàng)建頁表;另外,存儲空間分配設(shè)備還會根據(jù)應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,將虛擬地址空間中該應(yīng)用程序使用的地址空間劃分為進程虛擬內(nèi)存區(qū)(Virtual MemoryArea,簡稱為VMA),一種數(shù)據(jù)類別對應(yīng)一個VMA。應(yīng)用程序中數(shù)據(jù)的虛擬地址屬于應(yīng)用程序使用的地址空間中的虛擬地址。
[0058]另外,本實施例的存儲空間分配設(shè)備還會記錄應(yīng)用程序中數(shù)據(jù)的虛擬地址與數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的映射關(guān)系,這里的映射關(guān)系稱為第二映射關(guān)系。在此說明,這里的第二映射關(guān)系實際上也是虛擬地址與虛擬地址對應(yīng)的物理頁所在存儲設(shè)備的標(biāo)識信息之間的映射關(guān)系。
[0059]存儲空間分配設(shè)備記錄應(yīng)用程序中數(shù)據(jù)的虛擬地址與該數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系的一種可選實施方式包括:存儲空間分配設(shè)備確定該數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息;然后,將該數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,以記錄所述第二映射關(guān)系;再將該數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)存儲到該數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的VMA中。在該實施方式中,將虛擬地址對應(yīng)的物理頁所在存儲設(shè)備的標(biāo)識信息記錄到該虛擬地址所在VMA中的數(shù)據(jù)結(jié)構(gòu)中,從而記錄虛擬地址與虛擬地址對應(yīng)的物理頁所在存儲設(shè)備的標(biāo)識信息之間的映射關(guān)系。
[0060]存儲空間分配設(shè)備記錄應(yīng)用程序中數(shù)據(jù)的虛擬地址與該數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系的另一種可選實施方式包括:存儲空間分配設(shè)備確定該數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息;將該數(shù)據(jù)所述數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到該數(shù)據(jù)的虛擬地址對應(yīng)的頁表中,以記錄第二映射關(guān)系。在該實施方式中,將虛擬地址對應(yīng)的物理頁所在存儲設(shè)備的標(biāo)識信息記錄到該虛擬地址對應(yīng)的頁表中,從而記錄虛擬地址與虛擬地址對應(yīng)的物理頁所在存儲設(shè)備的標(biāo)識信息之間的映射關(guān)系O
[0061]在此說明,上述步驟101-步驟103可在應(yīng)用程序加載過程中完成。
[0062]步驟104、接收應(yīng)用程序運行過程中產(chǎn)生的缺頁中斷請求,所述缺頁中斷請求攜帶有所述應(yīng)用程序請求分配的物理頁對應(yīng)的虛擬地址。
[0063]在應(yīng)用程序被成功加載之后,應(yīng)用程序就會運行。在應(yīng)用程序的運行過程中,會訪問混合內(nèi)存中的存儲設(shè)備上的物理頁,存儲設(shè)備是以物理頁的形式進行管理的。具體的,應(yīng)用程序首先查詢要訪問虛擬地址對應(yīng)的頁表,如果頁表中沒有相對應(yīng)的物理頁(即應(yīng)用程序要訪問的物理頁不存在),就會發(fā)出缺頁中斷請求,在缺頁中斷請求中攜帶該虛擬地址,用以請求分配對應(yīng)的物理頁。本實施例的存儲空間分配設(shè)備會接收應(yīng)用程序運行過程中產(chǎn)生的缺頁中斷請求,該缺頁中斷請求攜帶有應(yīng)用程序請求分配的物理頁對應(yīng)的虛擬地址。應(yīng)用程序請求分配的物理頁對應(yīng)的虛擬地址是之前分配的應(yīng)用程序中的數(shù)據(jù)的虛擬地址中的一個。
[0064]步驟105、根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
[0065]在接收到缺頁中斷請求之后,存儲空間分配設(shè)備根據(jù)該物理頁對應(yīng)的虛擬地址,查詢之前記錄的數(shù)據(jù)的虛擬地址與數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系,從中獲取物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息,所獲取的存儲設(shè)備的標(biāo)識信息即為該物理頁所在的存儲設(shè)備的標(biāo)識信息。[0066]可選的,在使用數(shù)據(jù)結(jié)構(gòu)記錄第二映射關(guān)系的方式中,步驟105的實施方式包括:存儲空間分配設(shè)備根據(jù)物理頁對應(yīng)的虛擬地址,查詢該物理頁對應(yīng)的虛擬地址所在VMA中的數(shù)據(jù)結(jié)構(gòu),獲取物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為該物理頁所在存儲設(shè)備的標(biāo)識信息。
[0067]可選的,在使用頁表記錄第二映射關(guān)系的方式中,步驟105的實施方式包括:存儲空間分配設(shè)備根據(jù)物理頁對應(yīng)的虛擬地址,查詢物理頁對應(yīng)的虛擬地址對應(yīng)的頁表,獲取該物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為該物理頁所在的存儲設(shè)備的標(biāo)識息。
[0068]步驟106、根據(jù)所述物理頁所在的存儲設(shè)備的標(biāo)識信息,為所述應(yīng)用程序分配所述物理頁。
[0069]在獲取物理頁所在的存儲設(shè)備的標(biāo)識信息之后,存儲空間分配設(shè)備在物理頁所在存儲設(shè)備中為應(yīng)用程序分配該物理頁。這樣,應(yīng)用程序就可以訪問該物理頁了。
[0070]在此說明,本實施例的存儲空間分配設(shè)備所執(zhí)行的各操作具體可由存儲空間分配設(shè)備的操作系統(tǒng)執(zhí)行。
[0071]由上述可見,在本實施例中,在混合內(nèi)存的情況下,編程人員以感知方式定義獨立于應(yīng)用程序的數(shù)據(jù)布局策略說明文件,定義每類數(shù)據(jù)對應(yīng)的存儲設(shè)備,可以將不同類型的數(shù)據(jù)存儲到不同的存儲設(shè)備中,充分發(fā)揮各存儲設(shè)備自身的優(yōu)勢。例如,假設(shè)某一應(yīng)用程序?qū):投训脑L問頻率比例為1:5 ;對棧的讀寫比例約為45:1 ;對堆的讀寫比例5:1,該結(jié)果表明,該應(yīng)用程序?qū)Χ训脑L問要多于對棧的訪問,并且對棧中的數(shù)據(jù)讀次數(shù)要遠高于寫次數(shù);在這種情況下,堆中的數(shù)據(jù)更適合放到DRAM中,而棧中的數(shù)據(jù)適合放到NVM中以減少對NVM的寫次數(shù),則編程人員可以預(yù)先在數(shù)據(jù)布局策略說明文件中,定義棧對應(yīng)的數(shù)據(jù)類別與NVM的映射關(guān)系,并定義堆對應(yīng)的數(shù)據(jù)類別與DRAM的映射關(guān)系,這樣存儲空間分配設(shè)備就會按照該映射關(guān)系為棧中的數(shù)據(jù)分配NVM中的物理頁,而為堆中的數(shù)據(jù)分配DRAM中的物理頁。再例如,假設(shè)另一應(yīng)用程序?qū)5脑L問頻率占整體混合內(nèi)存訪問頻率的比例為75.6% ;對棧的讀寫比例為6:1 ;在堆中只讀數(shù)據(jù)占整個堆的比例超過35%,在這種情況下,棧中的數(shù)據(jù)更適合放到DRAM中,而堆中的數(shù)據(jù)更適合放到NVM中以減少對NVM的寫次數(shù);則編程人員可以預(yù)先在數(shù)據(jù)布局策略說明文件中,定義堆對應(yīng)的數(shù)據(jù)類別與NVM的映射關(guān)系,并定義棧對應(yīng)的數(shù)據(jù)類別與DRAM的映射關(guān)系,這樣存儲空間分配設(shè)備就會按照該映射關(guān)系為堆中的數(shù)據(jù)分配NVM中的物理頁,而為棧中的數(shù)據(jù)分配DRAM中的物理頁。由于充分考慮了應(yīng)用程序的需求,在各應(yīng)用場景下均能發(fā)揮各存儲設(shè)備的優(yōu)勢,不會發(fā)生在一些應(yīng)用程序下各存儲設(shè)備的優(yōu)勢無法發(fā)揮的問題。
[0072]進一步,由于本實施例中的數(shù)據(jù)布局策略說明文件是一種獨立于應(yīng)用程序的文件,與應(yīng)用程序無關(guān),因此不需要修改應(yīng)用程序,也不需要修改編譯器,實現(xiàn)相對簡單;再者,由于與應(yīng)用程序無關(guān),所以可以兼容已經(jīng)存在的應(yīng)用程序,具有較強的適應(yīng)性。
[0073]圖2為本發(fā)明實施例提供的一種存儲空間分配設(shè)備的結(jié)構(gòu)示意圖。如圖2所示,本實施例的設(shè)備包括:第一獲取模塊21、第二獲取模塊22、創(chuàng)建模塊23、記錄模塊24、接收模塊25、第三獲取模塊26和分配模塊27。
[0074]第一獲取模塊21,用于獲取數(shù)據(jù)布局策略說明文件,所述數(shù)據(jù)布局策略說明文件包括應(yīng)用程序?qū)?yīng)的各數(shù)據(jù)類別與混合內(nèi)存中各存儲設(shè)備之間的第一映射關(guān)系,所述混合內(nèi)存包括至少兩類存儲設(shè)備。
[0075]第二獲取模塊22,與第一獲取模塊21連接,用于對第一獲取模塊21獲取的數(shù)據(jù)布局策略說明文件進行解析,獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息。
[0076]創(chuàng)建模塊23,用于根據(jù)應(yīng)用程序中數(shù)據(jù)的虛擬地址,為應(yīng)用程序創(chuàng)建虛擬地址空間。
[0077]記錄模塊24,與第二獲取模塊22和創(chuàng)建模塊23連接,用于記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系。
[0078]接收模塊25,用于接收所述應(yīng)用程序運行過程中產(chǎn)生的缺頁中斷請求,所述缺頁中斷請求攜帶有所述應(yīng)用程序請求分配的物理頁對應(yīng)的虛擬地址。
[0079]第三獲取模塊26,與接收模塊25和記錄模塊24連接,用于根據(jù)接收模塊25接收的物理頁對應(yīng)的虛擬地址,查詢記錄模塊24記錄的第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
[0080]分配模塊27,與第三獲取模塊26連接,用于根據(jù)第三獲取模塊26獲取的物理頁所在的存儲設(shè)備的標(biāo)識信息,為所述應(yīng)用程序分配所述物理頁。
[0081]在一可選實施方式中,第一獲取模塊21具體可用于在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的命令行參數(shù)數(shù)組,從所述命令行參數(shù)數(shù)組中獲取所述數(shù)據(jù)布局策略說明文件的路徑信息,根據(jù)所述路徑信息獲取所述數(shù)據(jù)布局策略說明文件。
[0082]在一可選實施方式中,第一獲取模塊21具體可用于在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的環(huán)境變量數(shù)組,從所述環(huán)境變量數(shù)組中獲取表征所述數(shù)據(jù)布局策略說明文件的路徑信息的環(huán)境變量值,根據(jù)所述環(huán)境變量值獲取所述數(shù)據(jù)布局策略說明文件。
[0083]在一可選實施方式中,創(chuàng)建模塊23具體用于根據(jù)應(yīng)用程序中數(shù)據(jù)的虛擬地址,為該虛擬地址空間中應(yīng)用程序使用的地址空間創(chuàng)建頁表;根據(jù)應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,將所述虛擬地址空間中應(yīng)用程序使用的地址空間劃分為VMA。
[0084]基于上述,記錄模塊24具體可用于確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,以記錄所述第二映射關(guān)系,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)存儲到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的VMA中。相應(yīng)地,第三獲取模塊26具體可用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁對應(yīng)的虛擬地址所在VMA中的數(shù)據(jù)結(jié)構(gòu),獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
[0085]或者,在一可選實施方式中,記錄模塊24具體可用于確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)的虛擬地址對應(yīng)的頁表中,以記錄所述第二映射關(guān)系。相應(yīng)地,第三獲取模塊26具體可用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁對應(yīng)的虛擬地址對應(yīng)的頁表,獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
[0086]可選的,在第一獲取模塊21獲取數(shù)據(jù)布局策略說明文件之前,需要編寫數(shù)據(jù)布局策略說明文件。具體的,可以根據(jù)編譯所述應(yīng)用程序所劃分出的段和在加載所述應(yīng)用程序時為所述應(yīng)用程序添加的段,確定所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別;然后根據(jù)所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,別寫所述數(shù)據(jù)布局策略說明文件。
[0087]可選的,可以確定上述所有段中每個段對應(yīng)一個數(shù)據(jù)類別。
[0088]可選的,可以確定上述所有段中除數(shù)據(jù)段之外的其他每個段對應(yīng)一個數(shù)據(jù)類別,而確定所述數(shù)據(jù)段中的每個變量對應(yīng)一個數(shù)據(jù)類別。
[0089]本實施例提供的存儲空間分配設(shè)備的各功能模塊可用于執(zhí)行圖1所示存儲空間分配方法的流程,其具體工作原理不再贅述,詳見方法實施例的描述。
[0090]本實施例提供的存儲空間分配設(shè)備,可以基于編程人員預(yù)先定義的每種數(shù)據(jù)類別與混合內(nèi)存中存儲設(shè)備之間的存儲映射關(guān)系,生成數(shù)據(jù)布局策略說明文件,然后根據(jù)該數(shù)據(jù)布局策略說明文件為應(yīng)用程序中的數(shù)據(jù)分配存儲設(shè)備,可以充分發(fā)揮各類存儲設(shè)備的優(yōu)勢,而由于該數(shù)據(jù)布局策略說明文件獨立于應(yīng)用程序?qū)崿F(xiàn),所以不需要修改編譯器,并且不需要重新編寫應(yīng)用程序,可以兼容已經(jīng)存在的應(yīng)用程序,適應(yīng)性較好。
[0091]圖3為本發(fā)明實施例提供的另一種存儲空間分配設(shè)備的結(jié)構(gòu)示意圖。如圖3所示,本實施例的存儲空間分配設(shè)備包括:至少兩類存儲器31、處理器32和接收器33。
[0092]至少兩類存儲器31構(gòu)成混合內(nèi)存。至少兩類存儲器31可用于存放程序以及程序涉及的數(shù)據(jù)等。具體地,程序可以包括程序代碼,所述程序代碼包括計算機操作指令。至少兩類存儲器31可能包含NVM和DRAM。
[0093]處理器32,用于執(zhí)行存儲器31存放的程序,以用于獲取數(shù)據(jù)布局策略說明文件,所述數(shù)據(jù)布局策略說明文件包括應(yīng)用程序?qū)?yīng)的各數(shù)據(jù)類別與混合內(nèi)存中各存儲設(shè)備之間的第一映射關(guān)系,對獲取的數(shù)據(jù)布局策略說明文件進行解析,獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息,根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述應(yīng)用程序創(chuàng)建虛擬地址空間,并記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系,以及在接收器33接收到缺頁中斷請求后,根據(jù)接收器33接收的缺頁中斷請求包括的物理頁對應(yīng)的虛擬地址,查詢記錄的第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息,根據(jù)該物理頁所在的存儲設(shè)備的標(biāo)識信息,為所述應(yīng)用程序分配所述物理頁。
[0094]接收器33,用于接收所述應(yīng)用程序運行過程中產(chǎn)生的缺頁中斷請求,所述缺頁中斷請求攜帶有所述應(yīng)用程序請求分配的物理頁對應(yīng)的虛擬地址。
[0095]在一可選實施方式中,處理器32用于獲取數(shù)據(jù)布局策略說明文件包括:處理器32具體用于在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的命令行參數(shù)數(shù)組,從所述命令行參數(shù)數(shù)組中獲取所述數(shù)據(jù)布局策略說明文件的路徑信息,根據(jù)所述路徑信息獲取所述數(shù)據(jù)布局策略說明文件?;蛘?,
[0096]處理器32用于獲取數(shù)據(jù)布局策略說明文件包括:處理器32具體用于在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的環(huán)境變量數(shù)組,從所述環(huán)境變量數(shù)組中獲取表征所述數(shù)據(jù)布局策略說明文件的路徑信息的環(huán)境變量值,根據(jù)所述環(huán)境變量值獲取所述數(shù)據(jù)布局策略說明文件。
[0097]處理器32用于根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為應(yīng)用程序創(chuàng)建虛擬地址空間包括:處理器32具體用于根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述虛擬地址空間中所述應(yīng)用程序使用的地址空間創(chuàng)建頁表;根據(jù)所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,將所述虛擬地址空間中所述應(yīng)用程序使用的地址空間劃分為進程虛擬內(nèi)存區(qū)VMA。
[0098]基于上述,處理器32用于記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系包括:處理器32具體可用于確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,以記錄所述第二映射關(guān)系,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)存儲到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的VMA中。相應(yīng)地,處理器32用于根據(jù)該物理頁所在的存儲設(shè)備的標(biāo)識信息,為所述應(yīng)用程序分配所述物理頁包括:處理器32具體用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁對應(yīng)的虛擬地址所在VMA中的數(shù)據(jù)結(jié)構(gòu),獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。或者,
[0099]處理器32用于記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系包括:處理器32具體可用于確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)的虛擬地址對應(yīng)的頁表中,以記錄所述第二映射關(guān)系。相應(yīng)地,處理器32用于根據(jù)該物理頁所在的存儲設(shè)備的標(biāo)識信息,為所述應(yīng)用程序分配所述物理頁包括:處理器32具體可用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁對應(yīng)的虛擬地址對應(yīng)的頁表,獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
[0100]可選的,處理器32獲取數(shù)據(jù)布局策略說明文件之前,需要編寫數(shù)據(jù)布局策略說明文件。具體的,可以根據(jù)編譯所述應(yīng)用程序所劃分出的段和在加載所述應(yīng)用程序時為所述應(yīng)用程序添加的段,確定所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別;然后根據(jù)所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,別寫所述數(shù)據(jù)布局策略說明文件。
[0101]可選的,可以確定上述所有段中每個段對應(yīng)一個數(shù)據(jù)類別。
[0102]可選的,可以確定上述所有段中除數(shù)據(jù)段之外的其他每個段對應(yīng)一個數(shù)據(jù)類別,而確定所述數(shù)據(jù)段中的每個變量對應(yīng)一個數(shù)據(jù)類別。
[0103]進一步,本實施例的存儲空間分配設(shè)備還可以包括:發(fā)送器34,負責(zé)發(fā)送本實施例的存儲空間分配設(shè)備的數(shù)據(jù)。
[0104]可選的,在實現(xiàn)上,如果存儲器31、處理器32、接收器33和發(fā)送器34相互獨立實現(xiàn),則存儲器31、處理器32、接收器33和發(fā)送器34可以通過總線相互連接并完成相互間的通信。所述總線可以是工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(Industry Standard Architecture,簡稱為ISA)總線、外部設(shè)備互連(PeripheralComponent,簡稱為PCI)總線或擴展工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(Extended IndustryStandard Architecture,簡稱為EISA)總線等。所述總線可以分為地址總線、數(shù)據(jù)總線、控制總線等。為便于表示,圖3中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。
[0105]可選的,如果存儲器31、處理器32、接收器33和發(fā)送器34集成在一塊芯片上實現(xiàn),則存儲器31、處理器32、接收器33和發(fā)送器34可以通過內(nèi)部總線完成相互間的通信。
[0106]本實施例提供的存儲空間分配設(shè)備可用于執(zhí)行圖1所示存儲空間分配方法的流程,其具體工作原理不再贅述,詳見方法實施例的描述。
[0107]本實施例提供的存儲空間分配設(shè)備,可以基于編程人員預(yù)先定義的每種數(shù)據(jù)類別與混合內(nèi)存中存儲設(shè)備之間的存儲映射關(guān)系,生成數(shù)據(jù)布局策略說明文件,然后根據(jù)該數(shù)據(jù)布局策略說明文件為應(yīng)用程序中的數(shù)據(jù)分配存儲設(shè)備,可以充分發(fā)揮各類存儲設(shè)備的優(yōu)勢,而由于該數(shù)據(jù)布局策略說明文件獨立于應(yīng)用程序?qū)崿F(xiàn),所以不需要修改編譯器,并且不需要重新編寫應(yīng)用程序,可以兼容已經(jīng)存在的應(yīng)用程序,適應(yīng)性較好。
[0108]本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼和數(shù)據(jù)的介質(zhì)。
[0109]最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。
【權(quán)利要求】
1.一種存儲空間分配方法,其特征在于,包括: 獲取數(shù)據(jù)布局策略說明文件,所述數(shù)據(jù)布局策略說明文件包括應(yīng)用程序?qū)?yīng)的各數(shù)據(jù)類別與混合內(nèi)存中各存儲設(shè)備之間的第一映射關(guān)系,所述混合內(nèi)存包括至少兩類存儲設(shè)備; 對所述數(shù)據(jù)布局策略說明文件進行解析,獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息; 根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述應(yīng)用程序創(chuàng)建虛擬地址空間,并記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系; 接收所述應(yīng)用程序運行過程中產(chǎn)生的缺頁中斷請求,所述缺頁中斷請求攜帶有所述應(yīng)用程序請求分配的物理頁對應(yīng)的虛擬地址; 根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息; 根據(jù)所述物理頁所在的存儲設(shè)備的標(biāo)識信息,為所述應(yīng)用程序分配所述物理頁。
2.根據(jù)權(quán)利要求1所述的存儲空間分配方法,其特征在于,所述獲取數(shù)據(jù)布局策略說明文件包括: 在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的命令行參數(shù)數(shù)組,從所述命令行參數(shù)數(shù)組中獲取所述數(shù)據(jù)布局策略說明文件的路徑信息; 根據(jù)所述路徑信息獲取所述數(shù)據(jù)布局策略說明文件。·
3.根據(jù)權(quán)利要求1所述的存儲空間分配方法,其特征在于,所述獲取數(shù)據(jù)布局策略說明文件包括: 在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的環(huán)境變量數(shù)組,從所述環(huán)境變量數(shù)組中獲取表征所述數(shù)據(jù)布局策略說明文件的路徑信息的環(huán)境變量值; 根據(jù)所述環(huán)境變量值獲取所述數(shù)據(jù)布局策略說明文件。
4.根據(jù)權(quán)利要求1或2或3所述的存儲空間分配方法,其特征在于,所述根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述應(yīng)用程序創(chuàng)建虛擬地址空間包括: 根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述虛擬地址空間中所述應(yīng)用程序使用的地址空間創(chuàng)建頁表; 根據(jù)所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,將所述虛擬地址空間中所述應(yīng)用程序使用的地址空間劃分為進程虛擬內(nèi)存區(qū)VMA。
5.根據(jù)權(quán)利要求4所述的存儲空間分配方法,其特征在于,所述記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系包括: 確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息; 將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,以記錄所述第二映射關(guān)系; 將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)存儲到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的VMA中; 所述根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息包括:根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁的虛擬地址所在VMA中的數(shù)據(jù)結(jié)構(gòu),獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
6.根據(jù)權(quán)利要求4所述的存儲空間分配方法,其特征在于,所述記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系包括: 確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息; 將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)的虛擬地址對應(yīng)的頁表中,以記錄所述第二映射關(guān)系; 所述根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息包括: 根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁對應(yīng)的虛擬地址對應(yīng)的頁表,獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
7.根據(jù)權(quán)利要求1-6任一項所述的存儲空間分配方法,其特征在于,所述獲取數(shù)據(jù)布局策略說明文件之前包括: 根據(jù)編譯所述應(yīng)用程序所劃分出的段和在加載所述應(yīng)用程序時為所述應(yīng)用程序添加的段,確定所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別; 根據(jù)所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,編寫所述數(shù)據(jù)布局策略說明文件。
8.根據(jù)權(quán)利要求7所述的存儲空間分配方法,其特征在于,所述根據(jù)編譯所述應(yīng)用程序所劃分出的段和在加載所 述應(yīng)用程序時為所述應(yīng)用程序添加的段,確定所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別包括: 確定每個段對應(yīng)一個數(shù)據(jù)類別。
9.根據(jù)權(quán)利要求7所述的存儲空間分配方法,其特征在于,所述根據(jù)編譯所述應(yīng)用程序所劃分出的段和在加載所述應(yīng)用程序時為所述應(yīng)用程序添加的段,確定所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別包括: 確定所有段中除數(shù)據(jù)段之外的其他每個段對應(yīng)一個數(shù)據(jù)類別; 確定所述數(shù)據(jù)段中的每個變量對應(yīng)一個數(shù)據(jù)類別。
10.一種存儲空間分配設(shè)備,其特征在于,包括: 第一獲取模塊,用于獲取數(shù)據(jù)布局策略說明文件,所述數(shù)據(jù)布局策略說明文件包括應(yīng)用程序?qū)?yīng)的各數(shù)據(jù)類別與混合內(nèi)存中各存儲設(shè)備之間的第一映射關(guān)系,所述混合內(nèi)存包括至少兩類存儲設(shè)備; 第二獲取模塊,用于對所述數(shù)據(jù)布局策略說明文件進行解析,獲取每種數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息; 創(chuàng)建模塊,用于根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述應(yīng)用程序創(chuàng)建虛擬地址空間; 記錄模塊,用于記錄所述數(shù)據(jù)的虛擬地址與所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息之間的第二映射關(guān)系; 接收模塊,用于接收所述應(yīng)用程序運行過程中產(chǎn)生的缺頁中斷請求,所述缺頁中斷請求攜帶有所述應(yīng)用程序請求分配的物理頁對應(yīng)的虛擬地址;第三獲取模塊,用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述第二映射關(guān)系,獲取所述物理頁所在的存儲設(shè)備的標(biāo)識信息; 分配模塊,用于根據(jù)所述物理頁所在的存儲設(shè)備的標(biāo)識信息,為所述應(yīng)用程序分配所述物理頁。
11.根據(jù)權(quán)利要求10所述的存儲空間分配設(shè)備,其特征在于,所述第一獲取模塊具體用于在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的命令行參數(shù)數(shù)組,從所述命令行參數(shù)數(shù)組中獲取所述數(shù)據(jù)布局策略說明文件的路徑信息,根據(jù)所述路徑信息獲取所述數(shù)據(jù)布局策略說明文件。
12.根據(jù)權(quán)利要求10所述的存儲空間分配設(shè)備,其特征在于,所述第一獲取模塊具體用于在所述應(yīng)用程序的加載過程中,訪問所述應(yīng)用程序的環(huán)境變量數(shù)組,從所述環(huán)境變量數(shù)組中獲取表征所述數(shù)據(jù)布局策略說明文件的路徑信息的環(huán)境變量值,根據(jù)所述環(huán)境變量值獲取所述數(shù)據(jù)布局策略說明文件。
13.根據(jù)權(quán)利要求10或11或12所述的存儲空間分配設(shè)備,其特征在于,所述創(chuàng)建模塊具體用于根據(jù)所述應(yīng)用程序中數(shù)據(jù)的虛擬地址,為所述虛擬地址空間中所述應(yīng)用程序使用的地址空間創(chuàng)建頁表;根據(jù)所述應(yīng)用程序?qū)?yīng)的數(shù)據(jù)類別,將所述虛擬地址空間中所述應(yīng)用程序使用的地址空間劃分為進程虛擬內(nèi)存區(qū)VMA。
14.根據(jù)權(quán)利要求12所述的存儲空間分配設(shè)備,其特征在于,所述記錄模塊具體用于確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,以記錄所述第二映射關(guān)系,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的數(shù)據(jù)結(jié)構(gòu)存儲到所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的VMA 中; 所述第三獲取模塊具體用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁的虛擬地址所在VMA中的數(shù)據(jù)結(jié)構(gòu),·獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
15.根據(jù)權(quán)利要求12所述的存儲空間分配設(shè)備,其特征在于,所述記錄模塊具體用于確定所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息,將所述數(shù)據(jù)所屬數(shù)據(jù)類別對應(yīng)的存儲設(shè)備的標(biāo)識信息記錄到所述數(shù)據(jù)的虛擬地址對應(yīng)的頁表中,以記錄所述第二映射關(guān)系; 所述第三獲取模塊具體用于根據(jù)所述物理頁對應(yīng)的虛擬地址,查詢所述物理頁對應(yīng)的虛擬地址對應(yīng)的頁表,獲取所述物理頁對應(yīng)的虛擬地址對應(yīng)的存儲設(shè)備的標(biāo)識信息作為所述物理頁所在的存儲設(shè)備的標(biāo)識信息。
【文檔編號】G06F12/02GK103853665SQ201210508858
【公開日】2014年6月11日 申請日期:2012年12月3日 優(yōu)先權(quán)日:2012年12月3日
【發(fā)明者】魏巍, 蔣德鈞, 夏飛, 熊勁 申請人:華為技術(shù)有限公司, 中國科學(xué)院計算技術(shù)研究所