使用bpram來布局和執(zhí)行操作系統(tǒng)的制作方法
【專利說明】使用BPRAM來布局和執(zhí)行操作系統(tǒng)
[0001]背景
[0002]各計算機系統(tǒng)在它們被打開時都會經(jīng)歷引導(dǎo)階段,該引導(dǎo)階段為使用準(zhǔn)備計算機并接管硬件對操作系統(tǒng)的控制。一般來說,硬件包括一些初始化該硬件的固件,諸如基本輸入/輸出系統(tǒng)(B1S)和擴展固件接口(EFI)。固件隨后一般關(guān)注盤驅(qū)動器以標(biāo)識要運行的主引導(dǎo)記錄(MBR)或其他第一指令集。這些指令可調(diào)用引導(dǎo)加載器,該引導(dǎo)加載器隨后加載并初始化操作系統(tǒng)(或潛在地提供操作系統(tǒng)的從其引導(dǎo)計算機系統(tǒng)的菜單)。類似地,一旦操作系統(tǒng)被加載,應(yīng)用就也經(jīng)歷初始化階段,在初始化階段期間,與應(yīng)用相關(guān)聯(lián)的軟件和數(shù)據(jù)模塊被加載、存儲器狀態(tài)被(例如用資源或其他數(shù)據(jù))初始化等等。
[0003]這些引導(dǎo)和初始化過程通常是耗時的。不僅復(fù)雜的硬件可花費時間來初始化并到達操作狀態(tài),而且軟件也要花費時間來從盤加載并花費時間來運行以執(zhí)行各種初始化任務(wù)。計算機系統(tǒng)的用戶無法使用系統(tǒng)或應(yīng)用,直到該過程完成,因此時間被浪費了。此外,在諸如將計算機從睡眠狀態(tài)、低功率狀態(tài)或休眠喚醒之類的其他時段期間,系統(tǒng)可執(zhí)行相似的類引導(dǎo)過程,該類引導(dǎo)過程延遲了用戶對計算機系統(tǒng)的使用。對于移動設(shè)備、游戲控制臺、路由器和其他設(shè)備(它們被內(nèi)部地實現(xiàn)為計算機系統(tǒng),雖然消費者可能將它們看成為集成的消費者電子設(shè)備)而言,用于引導(dǎo)的時間可顯著地降低該設(shè)備的可用性。
[0004]在標(biāo)準(zhǔn)操作系統(tǒng)中,諸如內(nèi)核之類幾乎不被更新的恒定代碼以與用戶應(yīng)用代碼相同的方式從傳統(tǒng)驅(qū)動器中被讀出。這導(dǎo)致小于優(yōu)化引導(dǎo)時間,因為操作系統(tǒng)經(jīng)由復(fù)雜的加載序列將其自身從硬盤驅(qū)動器或其他相對慢速的資源帶入操作狀態(tài)。即使使用現(xiàn)代的基于閃存的盤驅(qū)動器,用于加載軟件代碼并設(shè)置初始配置的讀寫數(shù)量也可消耗用戶可察覺的時間量。這對于可涉及訪問和加載許多庫并隨后用數(shù)據(jù)來初始化這些庫所指定的存儲器區(qū)域的應(yīng)用而言同樣正確。該數(shù)據(jù)中的大部分都是每次操作系統(tǒng)或應(yīng)用加載時都相同的恒定數(shù)據(jù)。過去的技術(shù)已關(guān)注在現(xiàn)有的、字節(jié)不可尋址的硬盤驅(qū)動器上重新排列該數(shù)據(jù)的方式(該方式仍涉及可察覺的延遲),或關(guān)注在應(yīng)用被用戶請求之前盡早執(zhí)行普通初始化序列(參見例如微軟 ? WINDOWS? Prefetch 和 SuperFetch 特征)。
[0005]概述
[0006]本文中描述了通過以下方式來加速計算機系統(tǒng)引導(dǎo)時間和/或應(yīng)用初始化時間的軟件布局系統(tǒng):將恒定數(shù)據(jù)和可執(zhí)行代碼移入非易失性的高性能存儲器(例如,ReRAM或PCM)中,而將改變數(shù)據(jù)保留在易失性存儲(諸如,DRAM)上。該系統(tǒng)確定操作系統(tǒng)或應(yīng)用的哪些組件和方面是恒定的并且不遭受改變或遭受最少的改變。該系統(tǒng)從此信息構(gòu)建高性能存儲器ReRAM/PCM高速緩存以提供對這些被頻繁使用的組件(包括內(nèi)核)的更快速訪問。結(jié)果是內(nèi)核或應(yīng)用代碼和數(shù)據(jù)結(jié)構(gòu)關(guān)于存儲器取回具有高性能訪問和執(zhí)行時間。對于應(yīng)用而言,該系統(tǒng)可執(zhí)行類似的過程。軟件應(yīng)用還經(jīng)歷常見的啟動序列來初始化可使用本文中描述的技術(shù)來預(yù)測和加速的過程數(shù)據(jù)結(jié)構(gòu)、線程、資源等。在一些情況下,諸如在高性能高速緩存為字節(jié)直接可尋址的情況下,該系統(tǒng)甚至可直接從該高速緩存引導(dǎo)或執(zhí)行。因此,該軟件布局系統(tǒng)提供了更快的方式來為正常操作準(zhǔn)備操作系統(tǒng)和應(yīng)用,并降低了在初始化上所花的時間。
[0007]提供本概述是為了以簡化的形式介紹將在以下詳細描述中進一步描述的概念選擇。本概述并不旨在標(biāo)識所要求保護主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護主題的范圍。
[0008]附圖簡述
[0009]圖1是示出一個實施例中的軟件布局系統(tǒng)的各組件的框圖。
[0010]圖2是示出一個實施例中的軟件布局系統(tǒng)用于檢查操作系統(tǒng)內(nèi)核以標(biāo)識要預(yù)布局在BPRAM中的代碼和數(shù)據(jù)的處理的流程圖。
[0011 ]圖3是示出一個實施例中的軟件布局系統(tǒng)用于從BPRAM初始化操作系統(tǒng)內(nèi)核的處理的流程圖。
[0012]圖4是示出一個實施例中的軟件布局系統(tǒng)用于檢查應(yīng)用以標(biāo)識要預(yù)布局在BPRAM中的代碼和數(shù)據(jù)的處理的流程圖。
[0013]圖5是示出一個實施例中的軟件布局系統(tǒng)用于從BPRAM初始化應(yīng)用的處理的流程圖。
[0014]圖6是示出一個實施例中的各種類型的存儲與軟件布局系統(tǒng)所使用的數(shù)據(jù)的關(guān)系的框圖。
[0015]詳細描述
[0016]本文中描述了通過以下方式來加速計算機系統(tǒng)引導(dǎo)時間和/或應(yīng)用初始化時間的軟件布局系統(tǒng):將恒定數(shù)據(jù)和可執(zhí)行代碼移入非易失性的高性能存儲器(例如,ReRAM或PCM)中,而將改變數(shù)據(jù)保留在易失性存儲(諸如,DRAM)上。該系統(tǒng)確定操作系統(tǒng)或應(yīng)用的哪些組件和方面是恒定的并且不遭受改變或遭受最少的改變。該系統(tǒng)從此信息構(gòu)建高性能存儲器ReRAM/PCM高速緩存以提供對這些被頻繁使用的組件(包括內(nèi)核)的更快速訪問。例如,該系統(tǒng)可將內(nèi)核數(shù)據(jù)結(jié)構(gòu)和代碼保持在非易失性和高性能ReRAM中,而將動態(tài)/改變數(shù)據(jù)保留在易失性DRAM存儲器中。結(jié)果是內(nèi)核或應(yīng)用代碼和數(shù)據(jù)結(jié)構(gòu)關(guān)于存儲器取回具有高性能訪問和執(zhí)行時間。
[0017]該系統(tǒng)可對應(yīng)用執(zhí)行類似的過程。軟件應(yīng)用還經(jīng)歷常見的啟動序列來初始化過程數(shù)據(jù)結(jié)構(gòu)、線程、資源等,這些啟動序列可使用本文中描述的技術(shù)來預(yù)測和加速。例如,該系統(tǒng)可標(biāo)識應(yīng)用的啟動序列中的引用幾乎不改變的數(shù)據(jù)的各部分,并可將該數(shù)據(jù)高速緩存非易失性、高性能存儲器高速緩存中,其中每次該應(yīng)用啟動時該數(shù)據(jù)都可被訪問。在一些實施例中,該系統(tǒng)還以供快速轉(zhuǎn)移到存儲器中以使得內(nèi)核或過程變得活躍的方式來對數(shù)據(jù)進行布局。例如,該系統(tǒng)可確定操作系統(tǒng)或應(yīng)用在操作期間在存儲器中的最終布局,將那個布局的圖像存儲在高性能高速緩存中,并隨后在下一次操作系統(tǒng)或應(yīng)用被選擇啟動時,該系統(tǒng)可使用直接存儲器存取(DMA)或其他高性能復(fù)制技術(shù)來將預(yù)布局引導(dǎo)/初始化圖像轉(zhuǎn)移到存儲器中以供執(zhí)行。在一些情況下,諸如在高性能高速緩存為字節(jié)直接可尋址的情況下,該系統(tǒng)甚至可直接從該高速緩存引導(dǎo)或執(zhí)行。因此,軟件布局系統(tǒng)提供為正常操作準(zhǔn)備操作系統(tǒng)和應(yīng)用的更快方式并降低了在初始化上所花的時間。
[0018]如本文中所描述的,軟件布局系統(tǒng)在兩個概念階段中操作:布局和啟動。在布局階段期間,該系統(tǒng)分析一個或多個操作系統(tǒng)或應(yīng)用以確定操作系統(tǒng)或應(yīng)用如何初始化其自身。該系統(tǒng)可使用本領(lǐng)域公知的各種靜態(tài)和動態(tài)分析技術(shù)來分析二進制的可執(zhí)行文件、存儲器內(nèi)數(shù)據(jù)、實況執(zhí)行或其他信息以標(biāo)識操作系統(tǒng)或應(yīng)用在啟動期間所使用的指令和數(shù)據(jù)。例如,MICROSOFT? WINDOWS?操作系統(tǒng)所使用的可移植可執(zhí)行文件格式(PE)包含可被標(biāo)記為只讀或讀/寫的數(shù)據(jù)部分,并且該軟件布局系統(tǒng)可使用此信息來將這些只讀部分放置在ReRAM或另一高速緩存中。該系統(tǒng)還可跟蹤歷史改變信息來構(gòu)建關(guān)于哪些指令或數(shù)據(jù)幾乎不改變的圖片。此幾乎不改變的數(shù)據(jù)隨后被定向用于從更快速的存儲(諸如ReRAM)中加載。該系統(tǒng)創(chuàng)建描述分析的結(jié)果且提供軟件指令和/或數(shù)據(jù)的布局圖像或其他數(shù)據(jù)結(jié)構(gòu)以供使用更快速的存儲器來進行存儲。
[0019]在啟動階段期間,該系統(tǒng)利用先前執(zhí)行的布局工作來使得操作系統(tǒng)或應(yīng)用的啟動更快。這可包括定向B1S或其他啟動指令以從ReRAM高速緩存直接訪問初始化圖像,或者可包括用于使用DMA或其他快速轉(zhuǎn)移方法來將準(zhǔn)備執(zhí)行的圖像從高速緩存復(fù)制到易失性存儲器中以進行傳統(tǒng)執(zhí)行的指令。由于與加載許多圖像碎片相比,這樣的轉(zhuǎn)移更快,因此存在初始化過程的顯著加速以及關(guān)于應(yīng)用何時準(zhǔn)備好被用戶使用的時間方面的降低。
[0020]在任何現(xiàn)代操作系統(tǒng)中,數(shù)據(jù)要么是可變得要么是不可變的。諸如應(yīng)用的堆內(nèi)包含的數(shù)據(jù)之類的數(shù)據(jù)通常是可變的,因為它在應(yīng)用執(zhí)行期間改變。可執(zhí)行圖像(軟件代碼)和全局常量是不可變數(shù)據(jù)的示例。目前,可變和不可變數(shù)據(jù)兩者都被保持在耐久存儲(諸如閃存或硬盤驅(qū)動器)中,并且在執(zhí)行期間被高速緩存在DRAM中使得它對應(yīng)用而言是可訪問的。硬盤驅(qū)動器和閃存通常是字節(jié)不可尋址的,因此執(zhí)行通常無法從這樣的設(shè)備直接進行。這是為什么這樣的數(shù)據(jù)首先被復(fù)制到DRAM(其是字節(jié)可尋址的)原因,在DRAM中可通過執(zhí)行軟件代碼來執(zhí)行并訪問這樣的數(shù)據(jù)。
[0021]一般來說,目前的存儲器分層結(jié)構(gòu)在慢速、持久、批量存取技術(shù)和快速、字節(jié)可尋址、非持久技術(shù)之間具有區(qū)分。字節(jié)可尋址的持久存儲器技術(shù)(諸如,相變存儲器、ReRAM或憶阻器)通過提供即字節(jié)可尋址又持久的存儲來提供橋接DRAM和持久存儲之間的間隙的存儲器。在本文中將這些技術(shù)稱為BPRAM(字節(jié)可尋址的持久隨機存取存儲器)。這些不同的存儲器技術(shù)全部都具有變化的性能以及耐久性(耗損)保證,但它們引入了可在現(xiàn)代計算機中使用的一種新型存儲器。使用BPRAM來存儲不可變對象可改善性能、釋放DRAM并節(jié)省功率,并且該軟件布局系統(tǒng)標(biāo)識應(yīng)用或操作系統(tǒng)內(nèi)可被迀移到BPRAM中以得到這些優(yōu)點的數(shù)據(jù)結(jié)構(gòu)。
[0022]由對BPRAM的這種使用所引入的一個新的考慮是耗損。由于在耗損之前向BPRAM設(shè)備寫入的次數(shù)通常遠小于DRAM或硬盤,因此通常需要關(guān)注以確保該數(shù)據(jù)不會由于該技術(shù)耗損而被丟失。因此,對BPRAM的最簡單使用是首先使得該BPRAM在與DRAM并排的存儲器總線上可用。接著,可考慮僅將應(yīng)用可執(zhí)行代碼放在可用的持久存儲器上。不是從較慢速的批量存儲中提取應(yīng)用二進制代碼并將這些二進制代碼高速緩存在易失性存儲器中,這些可執(zhí)行代碼可被簡單地存儲在BPRAM中并直接從BPRAM執(zhí)行。由于可執(zhí)行代碼與應(yīng)用數(shù)據(jù)相比被不頻繁得多地更新,因此可以肯定BPRAM將具有長生存期。一個問題可能是執(zhí)行將變慢,因為BPRAM通常比DRAM更慢,然而CPU預(yù)取和高速緩存可隱藏大多數(shù)差異,并且BPRAM可比硬盤驅(qū)動器快得多。BPRAM中高速緩存的可執(zhí)行代碼可包括任何類型的二進制碼,包括應(yīng)用、二進制代碼、動態(tài)鏈接庫(DLL)或構(gòu)成操作系統(tǒng)的組件。
[0023]除了簡單地高速緩存可執(zhí)行代碼外,計算環(huán)境的其他部分也可被高速緩存在BPRAM中。例如,當(dāng)代碼被編譯時,被定義為“常量”或“只讀”(如用可執(zhí)行格式來標(biāo)記或通過另一種方法來確定)的數(shù)據(jù)可被放置在BPRAM中而非被保持在DRAM中。使用大量靜態(tài)數(shù)據(jù)來進行計算的應(yīng)用可釋放DRAM并改為將那些數(shù)據(jù)結(jié)構(gòu)放置在BPRAM中。
[0024]最后,運行時可被設(shè)計成將數(shù)據(jù)結(jié)構(gòu)迀移到BPRAM中以及將數(shù)據(jù)結(jié)構(gòu)從BPRAM中迀移出,這取決于它們的存取模式。例如,散列表可真正地被表示成狀態(tài)機,其中該散列表被頻繁地更新、隨后被讀取者排他地訪問、并隨后被再次更新。這些類型的存取模式可意味著數(shù)據(jù)結(jié)構(gòu)可在它被讀取者訪問的同時被放在BPRAM中。然而,當(dāng)應(yīng)用嘗試