亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

將數(shù)據(jù)存儲到虛擬高速存儲系統(tǒng)中的系統(tǒng)和方法

文檔序號:6351983閱讀:177來源:國知局
專利名稱:將數(shù)據(jù)存儲到虛擬高速存儲系統(tǒng)中的系統(tǒng)和方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)字計算機系統(tǒng)領(lǐng)域。尤其是,但不限于,本發(fā)明公開了一種用于數(shù)字存儲系統(tǒng)的服務(wù)于快速訪問請求的技術(shù)。
背景技術(shù)
大多數(shù)目前的計算機系統(tǒng)都包括至少一個處理計算機指令的處理器以及存儲所 述處理器所處理的指令和數(shù)據(jù)的主存儲系統(tǒng)。該主存儲系統(tǒng)通常是用一般稱作DRAM的動態(tài)隨機存取存儲器的某種形式來實現(xiàn)。DRAM裝置具有非常高的存儲密度(所用集成電路每塊區(qū)域上存儲的數(shù)據(jù)量)、利用低功率以及相對廉價的成本。因此,DRAM裝置被用于構(gòu)造計算機系統(tǒng)的大的主存儲系統(tǒng)。計算機處理器的工作速度不斷增加。具體而言,減小半導(dǎo)體晶體管的尺寸和降低這些晶體管的工作電壓,以便讓處理器時鐘以更快的速度運行。但是,給這些更快的處理器提供數(shù)據(jù)的DRAM主存儲系統(tǒng)的性能還沒有跟上這些不斷加快的處理器。因此,基于DRAM的主存儲系統(tǒng)成了計算機性能的瓶頸。為了緩解這個問題,通常使用基于較大的靜態(tài)隨機存取存儲器(SRAM)的高速緩沖沖存儲系統(tǒng)。SRAM裝置的工作速度比DRAM裝置的工作速度快很多,但是存儲密度較低、能耗較多、更為昂貴。此外,只有在出現(xiàn)高速緩沖“命中”(所需要的數(shù)據(jù)在高速緩沖存儲系統(tǒng)中)時,高速緩沖存儲系統(tǒng)才可以提高速度。當出現(xiàn)高速緩沖錯失時,必須從低速的DRAM存儲系統(tǒng)中取出數(shù)據(jù)。在一些快速性能需要得到保證的應(yīng)用中,使用高速緩沖存儲系統(tǒng)便不夠用。因此,需要提高存儲系統(tǒng)的速度,讓存儲系統(tǒng)能夠盡可能快地處理存儲的讀寫操作。


在沒有必要按照比例繪出的圖中,在幾個視圖中,相同的標號描述基本上類似的部件。相同標號不同字母后綴代表基本上類似的部件的不同實例。附圖總的來說是通過示例而不是用限制來圖解各種實施例。圖I示出了以計算機系統(tǒng)為示例形式的機器的圖解表示,在所述計算機系統(tǒng)中可以執(zhí)行一組指令,讓所述機器執(zhí)行此處所討論的一種或多種方法。圖2示出了現(xiàn)有的虛擬存儲系統(tǒng)的概念圖,現(xiàn)有的虛擬存儲系統(tǒng)建立的主存儲系統(tǒng)的外觀比實際可用的大。圖3A示出了交叉存儲系統(tǒng)。圖3B示出了說明使用圖3A的交叉存儲系統(tǒng)的時序圖。
圖4A示出了具有多個獨立的存儲庫的存儲系統(tǒng)。圖4B示出了說明使用圖4A的多庫存儲系統(tǒng)的時序圖。圖5示出了使用附加的物理存儲讓較小的虛擬存儲空間提供較好的性能的虛擬存儲系統(tǒng)的概念圖。圖6A示出了虛擬存儲系統(tǒng)的第一種實施方式的方塊圖。圖6B示出了虛擬存儲系統(tǒng)的第二種實施方式的方塊圖。圖7A示出了虛擬存儲系統(tǒng)同時接收讀和寫操作的初始開始狀態(tài)。圖7B示出了圖7A的虛擬存儲系統(tǒng)在處理完所述讀和寫操作之后的狀態(tài)。 圖7C示出了圖7B的虛擬存儲系統(tǒng)接收另一組同時的讀和寫操作。圖7D示出了圖7C的虛擬存儲系統(tǒng)在處理完所述讀和寫操作之后的狀態(tài)。圖8示出了描述圖6A的虛擬存儲系統(tǒng)如何工作的流程圖。圖9示出了在每個存儲行存儲一個以上的元素的虛擬存儲系統(tǒng)的實施方式的另一個方塊圖。圖10示出了虛擬存儲映射表的展開視圖。圖IlA示出了在編碼的存儲映射表中建立關(guān)系的固定模式。圖IlB示出了使用圖IlA的固定模式對存儲映射表的行進行編碼的例子。圖IlC示出了在編碼的存儲映射表內(nèi)建立關(guān)系的固定模式。圖IlD示出了使用圖IlC的固定模式對存儲映射表行進行編碼的例子。圖12A示出了在編碼的存儲映射表內(nèi)建立關(guān)系的固定模式。圖12B示出了使用圖12A的固定模式對存儲映射表的行進行編碼的例子。圖12C示出了在編碼后的存儲映射表中建立關(guān)系的固定模式。圖12D示出了使用圖12C的固定模式對存儲映射表的行進行編碼的例子。圖12E示出了對圖12C和12D的行模式進行編碼的替換示例。圖13A示出了包含有用于提高速度的復(fù)制虛擬存儲表的虛擬存儲系統(tǒng)。圖13B示出了與用作正常存儲的存儲庫其余部分在同一個物理存儲系統(tǒng)內(nèi)實現(xiàn)的虛擬映射表。圖13C示出了包含以乒-乓方式工作的兩組不同的復(fù)制虛擬存儲表的虛擬存儲系統(tǒng)。圖14A示出了同時處理一個讀和兩個寫操作的虛擬存儲系統(tǒng)的初始狀態(tài)。圖14B示出了圖14A的虛擬存儲處理一個讀和兩個同時的寫操作之后的虛擬存儲。圖14C示出了圖14B的虛擬存儲系統(tǒng)接收又一個讀和另兩個寫操作。圖14D示出了圖14C的虛擬存儲系統(tǒng)處理完圖14C的一個讀和兩個寫操作之后的狀態(tài)。圖15A示出了處理同時的讀和寫操作并利用不對稱的存儲操作的虛擬存儲系統(tǒng)的時序圖,其中讀操作占用的時間是寫操作的一半。圖15B示出了處理附加的第二個寫操作的圖15A的虛擬存儲系統(tǒng)的時序圖。圖15C示出了處理同時的讀和寫操作并利用彼此不是彼此的偶數(shù)倍的非對稱存儲操作的虛擬存儲系統(tǒng)的時序圖。
圖15D示出了圖15C的時序圖,其中通過增加另一個額外的存儲庫處理額外的寫操作。圖15E不出了圖15D的時序圖,其中不需要另一個額外的存儲庫就可以處理一個額外的寫操作。圖15F示出了通過在同一個存儲周期、在讀操作之后按順序進行寫操作以實現(xiàn)分數(shù)性能增加的虛擬存儲系統(tǒng)的時序圖。圖15G示出了圖15F的時序圖,其中已經(jīng)移動了并行的寫操作來降低映射表存儲性能需要。圖15H示出了圖15G的時序圖,其中增加了另一個并行的寫操作。 圖151示出了具有非對稱的讀和寫操作的虛擬存儲系統(tǒng)的時序圖。圖15J示出了圖151的時序圖,其中在兩個讀操作之后,按順序增加了第三個寫操作,以獲得分數(shù)性能增益。圖15K示出了每個存儲周期處理3次讀和3次寫的虛擬存儲系統(tǒng)的時序圖。圖15L示出了在6納秒存儲周期、用3個額外的庫處理2次讀和2次寫的虛擬存儲系統(tǒng)的時序圖。圖15M示出了在6納秒存儲周期、用3個額外的庫處理4次讀和4次寫的虛擬存儲系統(tǒng)的時序圖。圖16示出了同時處理一個讀和一個寫操作的虛擬存儲系統(tǒng)的初始狀態(tài),其中寫操作的優(yōu)先級高于讀操作。圖17A示出了使用圖16的教導(dǎo)構(gòu)造的虛擬存儲系統(tǒng)接收初始的存儲寫操作的初始狀態(tài)。圖17B示出了圖17A的虛擬存儲系統(tǒng)處理初始的寫操作之后的狀態(tài)。圖17C示出了圖17B的虛擬存儲系統(tǒng)接收另一個存儲寫操作的狀態(tài)。圖17D示出了圖17C的虛擬存儲系統(tǒng)處理完寫操作之后的狀態(tài)。圖17E示出了圖17A聚集有數(shù)據(jù)值的虛擬存儲系統(tǒng)接收讀和寫操作的狀態(tài)。圖17F示出了圖17E的虛擬存儲系統(tǒng)在處理所述寫操作和讀操作之后的狀態(tài)。圖18示出了一個不受限制的虛擬存儲系統(tǒng),其中任何虛擬地址可以被放在任何物理地址。圖19示出了通過使用寫緩沖區(qū)避免任何存儲庫沖突降低性能的存儲系統(tǒng)。圖20示出了具有一個比主存儲庫小且可以包括一個寫緩沖區(qū)的額外的存儲庫的虛擬存儲系統(tǒng)。發(fā)明的詳細描述接下來的詳細描述包括對附圖的參考,附圖形成詳細描述的一部分。附圖展示根據(jù)示例實施例的圖示。對這些實施例,在這里也稱作“示例”,進行了足夠詳細的描述,使本領(lǐng)域技術(shù)人員能夠?qū)嵺`本發(fā)明。要實踐本發(fā)明,并不需要示例實施例中的具體細節(jié),這點對本領(lǐng)域技術(shù)人員而言是顯而易見的。例如,雖然一些示例實施例是參考分組交換網(wǎng)絡(luò)中所用的計算機處理系統(tǒng)進行公開的,但是該教導(dǎo)可以用于許多別的環(huán)境。因此,任何使用數(shù)字存儲的數(shù)字系統(tǒng)都可以從當前公開的內(nèi)容的教導(dǎo)得到益處。在不脫離所要求保護的范圍內(nèi),示例實施例可以進行組合、可以應(yīng)用其它實施例或者可以做出結(jié)構(gòu)上的、邏輯和電的改變。因此,接下來的詳細描述不是進行限制,其范圍由所附的權(quán)利要求和它們的等同物進行限定。在這篇文獻中,像在專利文獻中常見的一樣,使用措詞“一個”來包括一個或者一個以上。在這篇文獻中,除非另有指出,措詞“或者”用來指非排他的,或者使“A或者B”包括“A但非B”、“B但非A”以及“A和B”。此外,在這篇文獻中所提到的所有出版物、專利和專利文獻,通過引用將它們整體包含在此處,就像是通過引用分別包含在此處一樣。當這篇文獻和那些通過引用包含在此處的文獻之間有用法矛盾的情況時,在所包括的文獻中的用法應(yīng)當視為是對這篇文獻中的用法的補充;對于無法相容的矛盾之處,以這篇文獻中的用法為準。計算機系統(tǒng)當前公開的內(nèi)容涉及數(shù)字計算機系統(tǒng)。圖I示出了以計算機系統(tǒng)100為示例形式
的機器的示意圖,該計算機系統(tǒng)100可以用來實施當前的公開內(nèi)容。在圖I的計算機系統(tǒng)100內(nèi)有一組指令124,可以執(zhí)行這一組指令使所述機器執(zhí)行本申請中所描述的一種或多種方法。在組網(wǎng)的布局中,圖I的機器可以以服務(wù)器機器或者客戶端機器的身份在客戶端-服務(wù)器網(wǎng)絡(luò)環(huán)境中工作,或者作為對等(或者分布式)網(wǎng)絡(luò)環(huán)境中的對等機器。所述機器可以是個人計算機(PC)、平板電腦、機頂盒(STB)、個人數(shù)字助理(PDA)、移動電話、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)服務(wù)器、網(wǎng)絡(luò)路由器、網(wǎng)絡(luò)交換機、網(wǎng)橋或者任何能夠執(zhí)行一組(有序或無序)能夠被所述機器具體運行的計算機指令的機器。此外,雖然圖中示出的只是一臺機器,但是術(shù)語“機器”還應(yīng)當包括單獨或者聯(lián)合起來執(zhí)行一組(或多組)進行本申請所描述的一種或多種方法的指令的機器集合。圖I所示的計算機系統(tǒng)100包括處理器102 (例如,中央處理單元(CPU))、圖形處理單元(GPU)或者兩者皆有)以及主存儲器104和靜態(tài)存儲106,彼此之間通過總線108進行通信。計算機系統(tǒng)100還可以包括一個視頻顯示適配器110,用于驅(qū)動諸如液晶顯示器(IXD)或者陰極射線管(CRT)之類的視頻顯示系統(tǒng)115。計算機系統(tǒng)100還包括字母數(shù)字輸入裝置112 (例如,鍵盤)、光標控制裝置114 (例如,鼠標或者軌跡球)、光盤驅(qū)動單元116、信號發(fā)生裝置118 (例如,揚聲器)和網(wǎng)絡(luò)接口裝置120。請注意,圖I中示出的所述部件并非所有都會出現(xiàn)在任一實施例中。例如,計算機服務(wù)器系統(tǒng)可能沒有視頻顯示適配器110或者視頻顯示系統(tǒng)115,如果那個服務(wù)器是通過網(wǎng)絡(luò)接口裝置120來控制的話。光盤驅(qū)動單元116包括可機讀的介質(zhì)122,在可機讀介質(zhì)122上存儲有一組或多組計算機指令和數(shù)據(jù)結(jié)構(gòu)(例如,指令124,其也稱作“軟件”),包含此處描述的一種或多種方法或功能或者被此處描述的一種或多種方法或功能所使用。指令124還可以完全或者部分存儲在和處理器102相關(guān)聯(lián)的主存儲器104內(nèi)和/或者在高速緩沖存儲器103內(nèi)。與處理器102相關(guān)聯(lián)的主存儲器104和高速緩沖存儲器103還可組成可機讀的介質(zhì)。指令124還可以經(jīng)由網(wǎng)絡(luò)接口裝置120在計算機網(wǎng)絡(luò)126上發(fā)送或者接收。這樣的傳輸可以使用諸多已知傳輸協(xié)議中的任一個,比如已知的文件傳輸協(xié)議(FTP)來產(chǎn)生。雖然在一個示例實施例中,所示的可機讀介質(zhì)122是單個介質(zhì),但是應(yīng)當認為術(shù)語“可機讀介質(zhì)”包括存儲一組或多組指令的單個介質(zhì)或者多個介質(zhì)(例如,集中式或者分布式數(shù)據(jù)庫,和/或相關(guān)聯(lián)的高速緩沖和服務(wù)器)。術(shù)語“可機讀介質(zhì)”還應(yīng)當被認為是包括任何能夠存儲、編碼或者攜帶一組由所述機器來執(zhí)行的指令以及使所述機器執(zhí)行此處所描述的一種或多種方法的介質(zhì),或者是能夠存儲、編碼或者攜帶由這樣一組指令來利用或者與這樣一組指令相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)的介質(zhì)。術(shù)語“可機讀介質(zhì)”應(yīng)當相應(yīng)地被認為是包括、但不限于固態(tài)存儲、光學介質(zhì)和磁介質(zhì)。為了本說明書的目的,術(shù)語“模塊”包括實現(xiàn)特定功能、操作、步驟或者工序的可識別的一部分代碼、計算的或者可執(zhí)行的指令、數(shù)據(jù)或者計算對象。一個模塊不必用軟件來實現(xiàn);模塊可以用軟件、硬件/電路或者軟件和硬件的結(jié)合體來實現(xiàn)。傳統(tǒng)的虛擬存儲參見圖I的示例計算機系統(tǒng)100,處理器102執(zhí)行的指令124通常是從主存儲器104取出的指令124或者是從處理器102本身內(nèi)的芯片上(on-chip)高速緩沖存儲器103取出的指令124。但是,希望創(chuàng)建較大的計算機程序以及處理越來越大的數(shù)據(jù)集,給計算機程序員造成了難題,因為計算機程序員最終會用光主存儲器104中的可用存儲空間。為了解決主存儲量有限的問題,虛擬存儲的概念應(yīng)運而生。 有虛擬存儲的話,給計算機程序員提供了要打交道的、“虛擬存儲”非常大的地址空間。但是,事實上,帶有虛擬存儲的計算機系統(tǒng)實際上并不會包含太多需要來表示整個虛擬存儲地址的物理半導(dǎo)體存儲器。相反,實際上,在用集成電路實現(xiàn)的計算機系統(tǒng)存儲中,虛擬地址空間只有一個子集可用。其余的虛擬存儲空間用較慢的長期存儲系統(tǒng)存儲,比如用磁盤。在圖2中呈現(xiàn)的是虛擬存儲系統(tǒng)220的概念圖。參考圖2,虛擬存儲系統(tǒng)220包括代表所有可供計算機程序員使用的虛擬存儲的大虛擬存儲地址空間225。處理器210通過虛擬存儲系統(tǒng)控制器221來使用虛擬地址,從而訪問大虛擬存儲地址空間225中的指令和數(shù)據(jù)。虛擬存儲系統(tǒng)控制器221負責處理所有到所述虛擬存儲系統(tǒng)的存儲訪問請求。(請注意,處理器210還可以包括芯片上高速緩沖存儲202,它代表所述可用存儲的一個小子集的復(fù)本)。在有虛擬存儲系統(tǒng)220時,在所述計算機系統(tǒng)的實際物理主存儲器204中,實際物理上代表的是當前需要的大虛擬地址空間225的指令和數(shù)據(jù)子集。虛擬存儲控制器221負責將虛擬存儲地址翻譯成物理主存儲器204內(nèi)的物理存儲地址。這個物理主存儲器204通常的是用半導(dǎo)體存儲裝置來實現(xiàn),比如用動態(tài)隨機存取存儲裝置。所有其它已經(jīng)裝載到虛擬存儲地址空間225內(nèi)、但是沒有表現(xiàn)在物理主存儲器204內(nèi)的計算機指令和數(shù)據(jù)被存儲在長期存儲系統(tǒng)216內(nèi)。在通常的個人計算機系統(tǒng)中,這個長期存儲器通常是用圖I中描繪的硬盤驅(qū)動單元116來提供。(其它系統(tǒng)可以使用替換的比如閃存作為長期存儲系統(tǒng)。)請注意,虛擬地址空間225可能會大于長期存儲系統(tǒng)216中當前分配給和虛擬存儲系統(tǒng)220 —起使用的那部分,因為處理器210可能還沒有訪問所述虛擬存儲地址空間的某些部分,因此,虛擬存儲器未被訪問的那部分區(qū)域的狀態(tài)還不確定。但是,當處理器210訪問虛擬地址空間那些以前未觸及的部分時,那么虛擬存儲系統(tǒng)221將從長期存儲系統(tǒng)中分配附加的長期存儲空間216,以便處理虛擬存儲地址空間225的那些新近被訪問的區(qū)域。許多虛擬存儲系統(tǒng)分配長期存儲器與所述虛擬存儲地址空間的整個大小相等的一個區(qū)域,以確??偸怯凶銐虻拈L期存儲器可供虛擬存儲系統(tǒng)220所用。虛擬存儲系統(tǒng)控制器221負責確保當前所需的、來自于虛擬存儲地址空間225的指令和數(shù)據(jù)載入物理主存儲器204中。如果所需的虛擬存儲地址空間225的一個分區(qū)(section)當前沒有被表現(xiàn)在物理主存儲器204中,那么虛擬存儲系統(tǒng)控制器221從長期存儲系統(tǒng)216讀取虛擬存儲地址空間的那個分區(qū),并將它導(dǎo)入實際的主存儲器204中。為了給所需的虛擬地址空間的一個新分區(qū)騰出空間,虛擬存儲系統(tǒng)控制器221會將當前表現(xiàn)在實際主存儲器204中的一個分區(qū)的指令和數(shù)據(jù)移出長期存儲器216。這個將存儲分區(qū)移入和移出所述主存儲系統(tǒng)的技術(shù)通常稱作“交換(swapping)”。存在有許多算法幫助確定存儲的哪個特殊分區(qū)會最不可能被立刻訪問,以減少必須要進行的交換次數(shù)。如上文提到的,虛擬存儲的概念,在從長期存儲器216分配的附加的存儲空間的幫助下,讓小量的實際物理主存儲器204表示大得多的虛擬存儲地址空間225。但是,代表比可用的實際物理存儲地址空間大很多的虛擬存儲地址空間的這個能力需要代價。具體而言,整個存儲系統(tǒng)的平均性能會變慢,因為當所需要的虛 擬存儲地址空間225的分區(qū)當前沒有表現(xiàn)在主存儲器204中時,必須要訪問較慢的長期存儲系統(tǒng)216內(nèi)的數(shù)據(jù)。高速存儲技術(shù)對于一些要求高的應(yīng)用,因為需要高帶寬存儲,使用長期存儲器不是一個可行的選項。例如,在高速網(wǎng)絡(luò)裝置中,比如網(wǎng)絡(luò)路由器中,該網(wǎng)絡(luò)路由器必須要快速將來自于第一數(shù)據(jù)通信鏈路的進來的數(shù)據(jù)包存入存儲系統(tǒng)。所述路由器必須稍后從所述存儲系統(tǒng)中讀回所存儲的數(shù)據(jù)包,以在另一個數(shù)據(jù)通信鏈路上傳輸。數(shù)據(jù)包的這些寫和讀都必須都要高速進行,以保持數(shù)據(jù)通信鏈路填滿數(shù)據(jù)。因此,虛擬存儲系統(tǒng)不能用在這樣的應(yīng)用中。因此,對于特定的應(yīng)用,比如上文描述的包路由應(yīng)用,每個存儲位置都需要使用一個快速存儲響應(yīng)來存儲數(shù)據(jù)。對于這些需要一致的快速存儲性能的應(yīng)用,可以用實際的物理存儲裝置來構(gòu)造整個存儲系統(tǒng)。通過這種方式,每個存儲位置將能夠以用于構(gòu)造所述存儲系統(tǒng)的集成電路存儲裝置的全部速度存儲和調(diào)用數(shù)據(jù)。但是,即使是帶有用傳統(tǒng)的動態(tài)隨機存取存儲裝置構(gòu)造的整個主計算機存儲系統(tǒng);該存儲系統(tǒng)仍不能給一些要求非常高的應(yīng)用提供所希望的存儲性能?,F(xiàn)代處理器和數(shù)字通信鏈路非常高的速度造成存儲系統(tǒng)成為限制整個計算機系統(tǒng)性能增加的性能瓶頸。需要新技術(shù)來滿足特定計算機應(yīng)用的極高的存儲性能需求。參考圖2,一個顯而易見的解決方案是大大增加在處理器210內(nèi)實現(xiàn)的芯片上高速緩沖存儲202的大小。如果通過用芯片上高速緩沖存儲202內(nèi)的有限地址空間可以滿足特定應(yīng)用的所有高速存儲需求,那么就可以使用這項技術(shù)。但是,因為許多原因,這并不是一個完全讓人滿意的方案。具有非常大的芯片上高速緩沖存儲202的計算機處理器需要大尺寸的集成電路芯片,使得處理器的產(chǎn)量(一批做成的集成電路中完全可操作的集成電路的百分比)下降。此外,當處理器電路的集成電路芯片面積較小時,處理器電路不能做得太復(fù)雜。由于它的限制,用非常大的高速緩沖存儲系統(tǒng)構(gòu)造的計算機處理器將是利基產(chǎn)品,因而會昂貴,因為那樣的處理器不會有大市場。但是,這個方案最大的問題是,許多應(yīng)用會只需要比用芯片上高速緩沖存儲202來實現(xiàn)的大很多的存儲地址空間。因此,需要有提高主存儲系統(tǒng)的性能的新技術(shù)。另一種可以使用的技術(shù)是用存儲設(shè)計來構(gòu)造一個完整的存儲系統(tǒng),比如用靜態(tài)隨機存取存儲器(SRAM),提供可能的最佳存儲性能。這項技術(shù)已經(jīng)用在一些需要最優(yōu)的存儲性能的應(yīng)用中。但是,這不是所希望要的方案,因為SRAM裝置價格昂貴、存儲密度低、并且消耗大量的電能。因此,需要技術(shù)從高密度存儲裝置,比如DRAM,獲得較好的性能。
交錯的存儲庫DRAM存儲裝置的一個共同屬性是,當向存儲裝置做出第一存儲請求時,那個DRAM存儲裝置將會快速響應(yīng)。但是,如果向同一個存儲裝置內(nèi)的任何存儲地址做出立即、連續(xù)的存儲請求,所述存儲裝置將不能夠像響應(yīng)所述第一個存儲請求那樣快。這樣的原因是因為,在存儲內(nèi)部,存儲必須要執(zhí)行某種類型的維護行為來完成首個存儲訪問周期。例如,在有DRAM裝置的情況下,在對接下來的存儲請求作出響應(yīng)之前,DRAM存儲裝置必須對從所述存儲矩陣中讀出的存儲行進行刷新。存儲系統(tǒng),通過將所述存儲地址空間組織成各種獨立的存儲庫,其中每個存儲庫都是由不同的存儲裝置構(gòu)造的,可以利用存儲裝置在完成一個完整的存儲周期之前用數(shù)據(jù)來響應(yīng)的事實。然后,這些存儲庫以一種方式交錯,使得大多數(shù)連續(xù)的存儲訪問請求訪問一個不同的存儲庫。通過這種方式,所述計算機系統(tǒng)將會享受給大多數(shù)存儲訪問的初始存儲訪問以快速的存儲響應(yīng)。只要在準備好接下來的訪問之前完成存儲的刷新所用的時間小于 發(fā)起一個讀周期之后對數(shù)據(jù)響應(yīng)的時間,每個存儲庫便準備好用快速響應(yīng)時間對每隔一個的存儲請求做出響應(yīng)。圖3A示出了一個簡單的雙向交錯存儲系統(tǒng)的例子。在圖3A的雙向交錯存儲中有兩個存儲庫庫O和庫I。這兩個存儲庫是獨立的,使得當庫O當前正忙著完成存儲操作時,庫I會立即可用于對一個存儲訪問做出快速響應(yīng)。(類似地,當庫I當前忙著完成存儲操作時,庫O將會可用。)所述存儲系統(tǒng)的尋址方案是交錯的,使得每個緊接著的地址與前一個地址是在不同的存儲庫中。因此,如圖3A所示,地址O在庫O中,地址I在庫I中,地址2在庫O中,地址3在庫I中,諸如此類。當執(zhí)行計算機程序時,所述計算機系統(tǒng)內(nèi)的處理器通常需要讀入在存儲中按順序組織好的計算機指令。因此,當從圖3A的存儲系統(tǒng)連續(xù)地讀取存儲地址時,每個連續(xù)的存儲訪問將與前一個存儲訪問的存儲庫不同。首先讀取庫O中的地址O,然后讀取庫I中的地址1,然后讀取庫O中的地址2,然后讀取庫I中的地址3,諸如此類。因為所述兩個存儲庫是獨立的,所以當一個存儲庫仍然忙著完成前一個存儲訪問操作時,出現(xiàn)到不同的一個存儲庫的訪問。因此,如圖3B所示,所述存儲訪問可以是交錯的,極大地提高所述存儲系統(tǒng)的性能。參考圖3B,所述處理器可能先在時間331請求地址O。庫O在時間332用地址O處的數(shù)據(jù)來響應(yīng)。但是在時間332,庫O不能立即接受另一個存儲請求,因為庫O必須執(zhí)行某個內(nèi)部行為(比如存儲刷新)。但是,因為下一個按順序的存儲訪問是到不繁忙的存儲庫I內(nèi)的地址1,所以到地址I的請求可以立即在時間361發(fā)出。當庫I正在響應(yīng)到地址I的存儲請求時,庫O正在完成在對地址O的訪問之后所需的內(nèi)部操作。當庫I在時間351用地址I的數(shù)據(jù)來響應(yīng)時,庫O將會在時間333準備好另一個存儲請求。因此,所述計算機處理器可以在時間333發(fā)出到地址2的存儲訪問請求。因此,可以用一個交錯的存儲系統(tǒng)來幫助掩蔽DRAM裝置的整個讀周期。交錯存儲這項技術(shù)只提供性能的改進,只要你在每次存儲訪問之后訪問一個不同的存儲庫。如果緊接下來的存儲訪問請求是到剛被訪問的同一個存儲庫,那么將不會達到性能的改善。例如,如果在時間353從存儲地址5獲得數(shù)據(jù)之后,所述處理器然后需要訪問存儲地址1(比如,如果有一個程序循環(huán)返回到地址位置1),那么,在試圖訪問位于同一個存儲庫中的存儲地址I之前,所述處理器必須等待庫I完成與前一個到存儲地址5的存儲訪問相關(guān)聯(lián)的內(nèi)部行為。如果所述處理器當時立即訪問了庫I中的另一個存儲地址,比如存儲地址9,那么所述存儲系統(tǒng)將再次必須等待庫I完成前一個到地址I的存儲訪問。這樣,將不再有與庫O重疊的存儲訪問。因此,當有到同一個存儲庫的連續(xù)存儲訪問時,交錯存儲的優(yōu)勢便失去了。為了提高交錯系統(tǒng)中存儲操作的性能,計算機程序員可以試著以一種方式寫計算機程序,避免當訪問程序數(shù)據(jù)時連續(xù)訪問同一個存儲庫。雖然這是有可能的,但是對計算機程序員而言,仔細編寫他們的計算機代碼來解決這樣的限制很難且耗時。此外,大部分計算機軟件的開發(fā)是用高級計算機語言,比如C、C++、Pascal、FORTRAN等等。這些高級編程語言缺少一些處理這樣的存儲庫限制的特征,使得要用難用的匯編語言來編程。并行訪問獨立的存儲庫如前參考圖3A和3B所述,不同的存儲庫操作可以完全獨立于彼此。因此,兩個完 全獨立的存儲訪問操作可以同時在兩個不同的存儲庫上進行。這樣,通過同時給存儲的多個消費者提供服務(wù),可以造出高速存儲系統(tǒng),實現(xiàn)它們的高存儲帶寬。通過讓一個存儲系統(tǒng)的兩個不同用戶同時訪問獨立的存儲庫,使所述存儲系統(tǒng)的有效存儲帶寬加倍。圖4A示出了具有四個獨立的存儲庫(存儲庫0、1、2和3)的存儲系統(tǒng)示例,它允許從兩個不同的存儲用戶411和存儲用戶412接收多個存儲請求。只要所述兩個存儲用戶(411和412)訪問不同的存儲庫,那么那兩個存儲用戶可以同步共享所述存儲系統(tǒng)而沒有停頓。因此,如圖4B的時序圖所圖示的,在存儲用戶412訪問存儲地址101時,存儲用戶411可以訪問存儲地址000。然后,在存儲用戶412訪問存儲地址304時,存儲用戶411可以訪問存儲地址202。但是,如果兩個存儲用戶(411和412)試圖要訪問同一個存儲庫,那么至少有一個存儲用戶必須要停頓。例如,在圖4B所示的第四個數(shù)據(jù)周期,存儲用戶411訪問存儲地址105,而存儲用戶412試圖訪問存儲地址101。由于存儲地址105和存儲地址101是在同一個存儲庫(存儲庫I)中,那么必須推遲所述兩個存儲用戶(411或者412)中的一個。在圖4B的例子中,存儲用戶411有優(yōu)先級,使得存儲用戶412被停頓,因為它對存儲地址101的存儲訪問要等到存儲用戶411完成它對存儲地址105的訪問時才能完成。前面圖4A所公開的存儲系統(tǒng)的描述參考的是兩個單獨的存儲用戶存儲用戶411和存儲用戶412。但是,圖4A中所公開的存儲系統(tǒng)可以易于由工作速度是存儲用戶411和存儲用戶412的兩倍的單個的存儲用戶來使用。如果處理器410的工作速度是存儲用戶411和412的時鐘速度的兩倍工作,那么處理器410將能夠在存儲用戶411和412所用的單個時鐘周期內(nèi)發(fā)出兩個存儲請求。這兩個存儲請求可以被同時呈現(xiàn)給存儲系統(tǒng)控制器421。因此,從存儲系統(tǒng)控制器221的角度來看,單個實體以所述速度的兩倍的速度發(fā)出存儲請求非常類似于兩個實體以正常速度發(fā)出存儲請求。為了使圖4A中圖示的存儲系統(tǒng)的存儲帶寬最大,編寫這樣一個系統(tǒng)的程序員應(yīng)當仔細構(gòu)造他們的計算機代碼,使存儲庫的沖突最小。但是,如之前所說的,制造這樣的限制使這樣一個系統(tǒng)的編程困難且耗時。如前所說,高級編程語言不具有讓程序員確保注意到這些限制的特征。在理想的存儲系統(tǒng)中,多個不同的實體可以同時訪問那個存儲系統(tǒng)的任何地址位置。在這個理想的系統(tǒng)中,同時到任何存儲位置的存儲訪問不會造成任何存儲庫的沖突,使所述系統(tǒng)停頓。并且,這個理想的系統(tǒng)不會造成任何特殊的編程限制,使得程序員可以使用高級編程語言而不用擔心什么時候會出現(xiàn)或不會出現(xiàn)存儲沖突。高速存儲系統(tǒng)的新示例為了構(gòu)造一個更接近于理想的存儲系統(tǒng)的、讓多個實體用非常少的限制來訪問存儲的真實存儲系統(tǒng),本發(fā)明引入了 “虛擬存儲系統(tǒng)”。該虛擬存儲系統(tǒng)在沒有給該虛擬存儲系統(tǒng)的用戶造成任何具體的編程限制的情況下實現(xiàn)了這個目標。當前公開的虛擬存儲系統(tǒng)允許對同一個明顯的存儲庫同時進行讀和寫操作,受到的通常的不利后果與存儲庫沖突相關(guān)。虛擬存儲系統(tǒng)以一種類似于參考圖2所公開的現(xiàn)有的虛擬存儲的方式工作。與現(xiàn)有的虛擬存儲一樣,本發(fā)明的高速虛擬存儲系統(tǒng)讓計算機程序員在虛擬存儲地址空間工作,而不必擔心所述虛擬存儲系統(tǒng)如何在實際的物理存儲地址空間處理數(shù)據(jù)的存儲和獲取的具體細節(jié)。相反,虛擬存儲控制器將向虛擬存儲地址空間做出的所有存儲訪問請求轉(zhuǎn)換·到物理存儲地址空間。但是,所述虛擬存儲控制器以一種方式實現(xiàn)這種地址空間的轉(zhuǎn)換,避免了許多存儲庫沖突影響正在使用所述虛擬存儲系統(tǒng)的實體的性能。因此,從發(fā)送存儲訪問請求到所述虛擬存儲系統(tǒng)的實體這方面來看,實現(xiàn)了存儲性能的最優(yōu)化。在這些場景的背后,虛擬存儲控制器使用一組地址空間映射表,將在虛擬地址空間內(nèi)做出的存儲請求轉(zhuǎn)換到實際的物理地址空間,所述地址空間映射表確保沒有會降低所述實體(們)訪問所述虛擬存儲系統(tǒng)的性能的存儲庫沖突。為了達到這個目標,所述虛擬存儲控制器將所述虛擬存儲地址空間映射到較大的物理地址空間。使用所述較大的物理存儲地址空間,所述虛擬存儲系統(tǒng)不會讓該虛擬存儲系統(tǒng)的使用者看到任何潛在的存儲庫沖突的效果。因此,雖然傳統(tǒng)的虛擬存儲系統(tǒng)(比如參考圖2所公開的虛擬存儲系統(tǒng))將較大的虛擬地址空間225映射到較小的物理存儲地址空間204,目的是實現(xiàn)出現(xiàn)較大的存儲空間;本發(fā)明的虛擬存儲系統(tǒng)以一種方式將較小的虛擬地址空間映射到較大的物理存儲地址空間,實現(xiàn)了存儲性能的改進。圖5示出了使用本發(fā)明教導(dǎo)的基本虛擬存儲系統(tǒng)500的概念圖。在圖5所公開的存儲系統(tǒng)中,存儲用戶511和存儲用戶512訪問同一個虛擬存儲系統(tǒng)500。在有圖4A所公開的存儲系統(tǒng)的情況下,到虛擬存儲系統(tǒng)500的同時出現(xiàn)的存儲請求,可以是來自于以兩個單個實體的速度的兩倍的速度工作的單個實體。因此,以存儲用戶511和存儲用戶512的時鐘速度的兩倍速度工作的處理器510能夠發(fā)出兩個連續(xù)的存儲請求,這兩個連續(xù)的存儲請求顯示為虛擬存儲系統(tǒng)500同時收到兩個存儲請求。所有到虛擬存儲系統(tǒng)500的存儲訪問請求都是由虛擬存儲系統(tǒng)控制器521來處理。虛擬存儲系統(tǒng)控制器521接收含有虛擬存儲地址的存儲訪問請求(讀、寫或者其它存儲命令),將(在虛擬存儲地址空間504內(nèi)的)所有虛擬存儲地址轉(zhuǎn)換成在較大的物理存儲地址空間520內(nèi)的實際物理存儲地址,然后使用物理存儲地址空間520內(nèi)的物理地址來訪問所請求的信息。虛擬存儲系統(tǒng)控制器521在虛擬存儲系統(tǒng)控制器521里的一個或多個虛擬存儲表523的幫助下,進行這種從虛擬到物理地址空間的轉(zhuǎn)換。所述虛擬到物理地址空間的轉(zhuǎn)換其結(jié)果是,來自于存儲用戶511和存儲用戶512的、通常地會在現(xiàn)有的存儲系統(tǒng)(比如圖4A圖示的系統(tǒng))中造成降低性能的存儲庫沖突的存儲訪問請求模式不會造成存儲用戶511和存儲用戶512方面的存儲庫沖突。所有潛在的存儲庫沖突都通過使用各種技術(shù)消除了。虛擬存儲系統(tǒng)500和通常的現(xiàn)有存儲系統(tǒng)之間的一個重要差別是存儲系統(tǒng)中“摻了”附加的存儲裝置。這些附加的存儲裝置使虛擬存儲系統(tǒng)500的物理地址空間520比虛擬存儲地址空間大。虛擬存儲系統(tǒng)的內(nèi)部組織 圖6A示出了根據(jù)本發(fā)明教導(dǎo)的虛擬存儲系統(tǒng)600的第一實施例的方塊圖。如先前在圖5的概念圖中所描繪的,虛擬存儲系統(tǒng)600主要是由虛擬存儲系統(tǒng)控制器621和物理存儲陣列620所組成。在圖6A和接下來的描述中所描繪的例子將提供具體數(shù)目的存儲庫、存儲地址等等。但是,對本領(lǐng)域技術(shù)人員顯而易見的是,這些僅是這一個示例實施方式的數(shù)目??梢杂脭?shù)目非常不同的存儲庫、存儲地址等等來構(gòu)造各種不同的存儲系統(tǒng)的大小。參考圖6A,物理存儲陣列620被組織成五個獨立的存儲庫(庫A至E),每個庫具有100個行。為了便于解釋,這篇文獻將用10為基值的(十進制)數(shù),但是大多實際的實施方式在基值為2的(二進制)地址系統(tǒng)會使用2的偶數(shù)倍。在圖6A的虛擬存儲系統(tǒng)600的實施例中,具有五個存儲庫,每個存儲庫有100行,在物理存儲620中有500個獨一無二的物理存儲地址。如在圖5的概念圖中所顯示的,虛擬存儲系統(tǒng)600將虛擬存儲地址空間呈現(xiàn)給應(yīng)用比實際物理地址空間小的虛擬存儲系統(tǒng)600的用戶。因此,在圖6A的實施例中,包括有虛擬存儲地址000至399的初始虛擬存儲地址空間604 (被虛線所構(gòu)成的矩形所包圍),在物理存儲庫A至D內(nèi)表示。物理存儲庫E并不是開始時就表示任何一個虛擬存儲位置,使得存儲庫E的存儲位置被標記為“空”。如圖6A所示,這篇文獻將說明當前正被物理存儲位置表示為在物理存儲位置的方框內(nèi)的三位數(shù)虛擬存儲地址的虛擬存儲地址。例如,在庫B的00行處的物理存儲位置開始時表示虛擬存儲地址100,使得‘100’在方框內(nèi)的存儲庫B的00行處。如這篇文獻稍后所呈現(xiàn)的,各種虛擬存儲地址的實際位置將在物理存儲空間620內(nèi)移動。因此,圖6A中所描繪的虛擬存儲地址空間604的組織結(jié)構(gòu)僅呈現(xiàn)許多可能狀態(tài)中的一個。虛擬存儲系統(tǒng)控制器621負責處理來自于存儲用戶610的所有虛擬存儲訪問請求。存儲系統(tǒng)控制器621將虛擬存儲地址(在圖6A中是000至399)轉(zhuǎn)換成物理存儲620內(nèi)的實際物理存儲地址(在圖6A中由存儲庫字母和在所述存儲庫內(nèi)的行來識別)。為了完成這個虛擬到物理地址的轉(zhuǎn)換任務(wù),存儲系統(tǒng)控制器621使用至少一個虛擬存儲映射表623。在圖6A的第一虛擬存儲系統(tǒng)實施例中,虛擬存儲地址被分成最高位(三位虛擬地址中的第一位)和兩個最低位(三位虛擬地址中的后兩位)。在圖6A的具體實施例中,虛擬存儲系統(tǒng)使用虛擬存儲地址的最低位(所述虛擬存儲地址的后兩位)作為在物理存儲系統(tǒng)內(nèi)的物理行標記。因此,沒有必要轉(zhuǎn)換所述虛擬存儲地址的兩個最低位,因為它們與所述物理存儲地址的兩個最低位相同。虛擬存儲地址的最高位仍舊必須要被轉(zhuǎn)換成物理存儲地址。在圖6A的系統(tǒng)中,虛擬存儲地址的最高位被轉(zhuǎn)換到物理存儲庫。為了進行該轉(zhuǎn)換,虛擬存儲映射表623包括多個行和多個列,所述行的數(shù)目等于所述存儲庫中的行的數(shù)目,所述列的數(shù)目等于可能的最高地址位的數(shù)目(在從000到399的虛擬地址空間例子中是0、1、2和3)。為了從虛擬存儲地址轉(zhuǎn)換到物理存儲位置,虛擬存儲系統(tǒng)控制器621檢查虛擬存儲映射表623中與虛擬存儲地址的兩個最低位有相同的行并且與虛擬存儲地址的最高位有相同的列的條目。例如,要將虛擬地址304轉(zhuǎn)換到物理存儲位置,虛擬存儲系統(tǒng)控制器621查看‘3’列和‘04’行,獲得‘D’作為當前表現(xiàn)虛擬地址304 (在04行)的存儲庫。除了 O至3列之外,圖6A的虛擬存儲映射表623的實施例還包括標記為“e”的列。這一列用來識別存儲庫在指定的行包含有空的存儲位置。例如,虛擬存儲映射表623中的‘e,列的‘02’行列出 ’為具有空位置的存儲庫。但是,這一列不需要實現(xiàn),因為通過判斷存儲庫標記(A、B、C、D或E)沒有出現(xiàn)在同一行的O至3列,可以推斷出存儲庫在那個特定的行有空的存儲位置。圖6B示出了虛擬存儲系統(tǒng)600的第二實施例的方塊圖。在圖6B的替換實施例中,虛擬存儲表623中的列數(shù)和物理存儲中的存儲庫數(shù)目相等。通過這種方式,在虛擬存儲表623的列和存儲庫之間有一對一的對應(yīng)關(guān)系,在虛擬存儲表623的行和物理存儲庫中的 行之間有一對一的對應(yīng)關(guān)系。圖6B的虛擬存儲表623中的每個條目說明當前出現(xiàn)在對應(yīng)的存儲庫和行中的虛擬存儲地址的最高位。因此,在初始條件下,物理存儲620的庫A包含地址000到099,使得虛擬存儲表623的庫A列中的每個條目都含有‘0’。(請再次注意,這個例子使用十進制值只是為了簡化解釋。實際的實施方式將有可能使用來自二進制虛擬存儲地址的一組最高位。)類似地,在初始條件下,物理存儲620的庫B包含地址100至199,使得虛擬存儲表623的庫B列中的每個條目都包含“I”。存儲庫C和D同樣。在圖6B圖示的初始狀態(tài)下,存儲庫E不會呈現(xiàn)來自于虛擬地址空間的任何信息,因此具有標記為“ e ”的對應(yīng)的列E條目,由于庫E當前并不含有存儲在虛擬地址中的任何信息。同時處理讀和寫圖6A和6B的虛擬存儲系統(tǒng)600被構(gòu)造來處理一個讀請求同時有一個寫請求到虛擬存儲系統(tǒng)600中的任何別的地址,而不會由于有存儲庫沖突而迫使存儲用戶610停頓。因此,即使所述寫請求和讀請求是到同一個存儲庫(在大多數(shù)存儲系統(tǒng)中這會造成存儲庫沖突),虛擬存儲系統(tǒng)600將處理所述請求而不使存儲用戶610停頓。因此,虛擬存儲系統(tǒng)600提供得到保證的存儲帶寬,使得所有需要存儲訪問時間得到保證的應(yīng)用程序能夠使用虛擬存儲系統(tǒng)600。應(yīng)當注意一種不能容易處理的狀況,那就是同時收到對完全相同的虛擬地址的讀和寫。正常情況下,存儲用戶決不會發(fā)出這樣一對同時的請求,因為實在沒有理由當一個地址正被寫入時,由同一個實體讀取同一個地址。但是,如果這種情況出現(xiàn)的話,可以根據(jù)實施情況,將原始數(shù)據(jù)或者新寫入的數(shù)據(jù)給讀取者。如前文參考圖4A和4B所陳述的,具有獨立的存儲庫的多庫存儲系統(tǒng)能夠容易地處理多個同時的存儲訪問請求,只要這些存儲訪問請求針對的是所述存儲系統(tǒng)中不同的存儲庫。例如,參考圖6A,一個存儲用戶可以寫入庫A中,同時另一個存儲用戶從庫C讀取,而不會出現(xiàn)存儲庫沖突,因為所述存儲庫是獨立的。但是,當兩個同時的存儲訪問請求針對的是同一個存儲庫時,那么便會出現(xiàn)存儲庫沖突。虛擬存儲系統(tǒng)控制器621,通過將寫操作的虛擬存儲地址移動到不同存儲庫中的未被使用的存儲位置,處理讀操作和寫操作同時下發(fā)到同一個存儲庫的存儲庫沖突。所述未被使用的存儲位置是通過讀取虛擬存儲表623來確定未被使用的存儲位置、然后用所述虛擬存儲地址的新位置來更新虛擬存儲表623來確定的。這個技術(shù)用示例來描述最好。圖6A的虛擬存儲系統(tǒng)600的實施例的示例操作參考圖7A、7B和圖8來描述。圖7A示出了與圖6A的虛擬存儲系統(tǒng)600在同樣初始條件下的虛擬存儲系統(tǒng)。如果虛擬存儲系統(tǒng)控制器721同時接收到虛擬地址101的存儲寫,在圖7A中寫作W (101),和到虛擬地址103的存儲讀,寫作R (103),這個存儲訪問模式正常的話會造成存儲庫沖突,因為虛擬地址101和103都在同一個存儲庫(存儲庫B)中。為了防止存儲庫沖突,虛擬存儲系統(tǒng)控制器721允許對虛擬地址103的讀在物理存儲庫B中正常進行,但是使用不同的存儲庫來處理到虛擬地址101的寫。當前在當前虛擬地址101內(nèi)的數(shù)據(jù)不再相關(guān),因為新的數(shù)據(jù)值正在寫入到虛擬地址101。完整的一系列事件將參考圖8的流程圖來敘述。圖8的流程圖是以簡單的方式解釋所述系統(tǒng)。在實際實施方式中,一些步驟(比如在步驟810和830的查表)可以并列進行。
開始時,在步驟805,虛擬存儲系統(tǒng)控制器721接收(從地址103的)讀請求和(到地址101的)寫請求。接著,在步驟810,虛擬存儲系統(tǒng)控制器721查看虛擬存儲表723,判斷與所述讀請求相關(guān)聯(lián)的虛擬地址103的當前物理位置。最高位用來選擇虛擬存儲表723中的一列,兩個最低位用來選擇一行,這說明虛擬地址103當前在存儲庫B中。因此,在步驟825,虛擬存儲系統(tǒng)控制器721讀取那個物理位置,并響應(yīng)從地址103的讀請求。再次必須強調(diào),為了簡化解釋,這些例子僅是以十進制的形式出現(xiàn),正常應(yīng)用時要用二進制數(shù)。此夕卜,可以使用許多別的查表設(shè)計(比如與所述行和列相關(guān)聯(lián)的不同地址位)來完成與圖7A描繪的具體的虛擬存儲表723例子相同的結(jié)果。在步驟830,虛擬存儲系統(tǒng)控制器721查看虛擬存儲表723,判斷與寫請求相關(guān)聯(lián)的虛擬地址(在該例子中是101)的物理位置。查看虛擬存儲表723,可以看出,虛擬地址101是在存儲庫B中。接著,在步驟835,所述系統(tǒng)判斷這個位置是否造成和讀操作的存儲庫沖突。如果所述寫是到不同存儲庫的存儲位置(比如庫D中的地址200),那么所述寫可以僅使用那個位置與讀操作平行在步驟840進行,從而完成兩個存儲操作。但是,在這個例子中,所述寫是到存儲庫B中的虛擬地址101,從而造成同樣在存儲庫B中的虛擬地址103的讀的存儲庫沖突。為了防止地址101和103之間的存儲庫沖突,系統(tǒng)進行到步驟850,在步驟850,虛擬存儲系統(tǒng)控制器721查看虛擬存儲表723中的01行的“e”列,確定寫入虛擬地址101的數(shù)據(jù)的可用存儲庫的物理位置。虛擬存儲表723中的“e”列的01行說明存儲庫E是可用的。因此,虛擬存儲系統(tǒng)控制器721將寫請求的數(shù)據(jù)寫入存儲庫E的01行。(由于實際的數(shù)據(jù)值用不著討論,因此實際數(shù)值并未示出。)由于虛擬存儲地址101的位置已經(jīng)移動了,那么必須更新虛擬存儲表723來反映虛擬地址101新的物理地址。因此,在步驟860,虛擬存儲系統(tǒng)控制器721將“E”寫入虛擬存儲表723中的01行的I列的01行。類似地,必須要進行更新與所述01行相關(guān)聯(lián)的新的空閑存儲庫(表示為“e”或“empty”)。因此,在步驟870,虛擬存儲系統(tǒng)控制器721將“B”寫入虛擬存儲表723中的01行的“e”列。請注意,在通過用沒有列在一個特殊行的00、01、02、或03列的存儲庫推導(dǎo)出空閑存儲庫的實施方式中,不需要執(zhí)行這個步驟。在這一點,已經(jīng)進行了到地址103的讀操作和到地址101的寫操作兩者,而不用讓發(fā)出存儲訪問請求的存儲用戶停頓。
參考圖7C和7D提供同時進行讀操作和寫操作的第二個示例。圖7C使用圖7B的狀態(tài)作為開始點,然后同時接收到虛擬地址201的寫和從虛擬地址204的讀。為了進行虛擬地址204的讀,存儲控制器721首先確定虛擬地址204在物理存儲中的位置。因此,存儲控制器首先讀出虛擬地址表723內(nèi)的04行的2列的條目,該條目說明虛擬地址204當前位于存儲庫C中。因此,存儲控制器721從存儲庫C的04行讀出虛擬地址204的數(shù)據(jù),以處理所述讀請求。為了處理到虛擬地址201 (它先前是在C列的01行,因而造成和存儲庫C的04行的讀有存儲庫沖突)的寫,存儲控制器721從虛擬地址表723的01行的“e”列讀出條目,確定01行的空閑存儲庫是存儲庫B。因此,與到位置201的寫相關(guān)聯(lián)的數(shù)據(jù)被放置在物理存儲庫B的01行內(nèi),如圖7D所描述的那樣。然后存儲控制器721更新表723,反映虛擬地址201的新位置(通過在2列的01行的條目中寫下“B”)和行01的新空閑存儲位置的位置(通過在01行的“e”列條目中寫下“C”)。從上文的兩個示例可以看出,虛擬存儲系統(tǒng)總是至少有兩個位置,在這兩個位置 它可以為任何虛擬地址進行寫那個虛擬地址的當前位置或者指定為空的那一行的存儲庫。如果進來的寫不會與同時的讀造成存儲庫沖突,那么虛擬存儲控制器721可以把所述數(shù)據(jù)存儲在它的當前位置。但是,如果有因為到同一個存儲庫的讀和寫操作造成存儲庫沖突,那么虛擬存儲控制器721將會把所述數(shù)據(jù)寫入到那一行有空位置的存儲庫中,并在虛擬存儲表723中更新那個虛擬存儲地址的新位置。在所描繪的實施方式中,虛擬地址空間位置的最低兩位將總是指明在所述物理存儲空間內(nèi)的行。但是,在實際的數(shù)字實施方式中,可以使用來自于虛擬存儲地址的比特子集(比如虛擬存儲地址的一組最低位)。每個存儲和表行中的多個條目在圖6A和圖7A至7D的示例中,把每個存儲庫的行(以及在對應(yīng)的存儲表中的條目)描繪成單個的存儲位置。但是,這不是本發(fā)明系統(tǒng)的要求。只要每個存儲庫的單獨的列可以被獨立地讀出和寫入,每個存儲庫的每一行可以包含多個單獨的數(shù)據(jù)條目。圖9示出了這樣一個實施方式的一個可能的示例。參考圖9,每個存儲庫已經(jīng)被分成了三列。在每一行的這三列的每一列可以代表在所述存儲庫的同一行內(nèi)的不同虛擬存儲地址。請注意,必須使用來自于所述虛擬存儲地址的附加的地址比特(圖中未示)來說明正在尋址到那個存儲庫行中的哪一列。為了處理不同的列,虛擬存儲表923還必須具有對應(yīng)的一組列。通過這種方式,可以根據(jù)需要找到、讀取和移動每個單獨的列。如圖9中所描述的,在存儲庫中可尋址的物理存儲位置和在虛擬存儲表923中的位置之間仍有一對一的對應(yīng)關(guān)系。應(yīng)當注意,圖9中展示的實施方式在許多實施情況下可能是有利的。通過使用讀出寬行數(shù)據(jù)的存儲電路,從而每個存儲單元具有較少的讀出電路,可以實現(xiàn)較大的存儲密度。因此,許多(如果不是大多數(shù)的話)實施方式可以使用參考圖9所敘述的教導(dǎo)。雖然許多實施方式可以使用參考圖9展示的教導(dǎo),但是這片文獻將繼續(xù)使用每個存儲庫有一個條目的圖來避免示例不必要地的復(fù)雜。映射表編碼:參考圖6A,虛擬存儲系統(tǒng)600使用虛擬存儲映射表623將虛擬存儲地址轉(zhuǎn)換成物理存儲地址。圖10示出了虛擬存儲映射表1023的展開示圖。使用具體的虛擬存儲地址作為到虛擬存儲映射表1023的索引,虛擬存儲映射表1023中條目說明哪個存儲庫當前存儲有那個特殊的虛擬存儲地址。由于在虛擬存儲映射表1023中,每個不同的虛擬地址有一個條目,虛擬存儲映射表1023的大小會變得十分大。為了幫助減小虛擬存儲映射表1023的大小,圖10的實施方式將每個虛擬存儲地址限制為是在每個存儲庫的同一行內(nèi)。這樣讓每個表格條目僅說明一個特定的存儲庫,該特定的存儲庫含有虛擬存儲地址,而不是要求所述行和存儲庫,如果所述系統(tǒng)允許任何虛擬存儲地址存儲在任何物理存儲地址中的話。但是,即使是有這樣的限制,虛擬存儲映射表1023仍然相當大。虛擬存儲映射表1023中的每個條目必須說明五個不同的存儲庫(A、B、C、D和E)中哪一個存儲了特定的虛擬存儲地址。為了存儲五個不同狀態(tài)中的一個狀態(tài),正常情況下需要三比特,如圖10中的示例行1050所描述的。但是,這樣是浪費的,因為三比特實際上可以存儲八個不同的可能狀態(tài)。因此需要提高所述存儲系統(tǒng)的效率,以減小虛擬存儲映射表1023的大小。
圖IlA和IlB示出了一種可以用來縮減虛擬存儲映射表1023中每一行大小的編碼方法。在所公開的編碼方法中,給每個存儲庫分配一個獨一無二的三比特編碼,如圖IlA左邊部分所描述那樣,其中存儲庫A用000標識,存儲庫B用001標識,以此類推。這個三比特編碼系統(tǒng)用來說明虛擬存儲映射表1023的第一列中的存儲庫。這在圖IlB中圖示,其中“O”列包含一個三比特的值。然后用兩比特的值對剩下的四個列進行編碼,根據(jù)設(shè)置的關(guān)系模式說明到所述第一列中的值的偏移。圖IlA的右邊部分示出了各個存儲庫之間關(guān)系模式的一個示例。在圖IlA的示例關(guān)系中,從第一列中識別出的位置順時針方向轉(zhuǎn)動一個位置編碼為“00”,從第一列中識別出的位置順時針方向轉(zhuǎn)動兩個位置編碼為“01”,以此類推。請注意每個編碼是距離的位置數(shù)減一的二進制值。圖IlB舉了一個例子。圖IlB的第二行圖示了表行中C、A、B、E、D的示例模式。為了對這進行編碼,用給C的編碼來識別第一列,如圖IlA的模式中的位置1110所示,它是
010。然后其余位置用它們在圖IlA的模式中與C位置1110的相對位置進行編碼。第二列說明庫A,使得10被編碼在第二位置,因為它沿著順時針模式距離C編碼有三個位置。接著,第三列說明庫B,在圖IlA的模式中,它距離C有四個位置,因此編碼成‘11’。接下來的兩列用同樣的方式進行編碼。圖IlC和IlD示出了第二個示例,其中對含有A、E、C、D、B的映射表的行進行編碼。圖IlA至IlD中展示的編碼系統(tǒng)把虛擬存儲映射表中的每一行的大小從15比特減小到11比特,從而縮小了整個虛擬存儲映射表的大小。在實際的實施方式中,虛擬存儲映射表會大得多,這對大虛擬存儲映射表的大小是重要的縮減。但是,還可以用更為有效的方式對虛擬存儲映射表進行編碼。注意,每一行僅包含每個不同存儲庫的一個實例。一旦對特定的存儲庫值進行了編碼,那個存儲庫將不會再在同一行中出現(xiàn)。這可以用來進一步縮小虛擬存儲映射表的大小。特別是,對一行中剩余的條目進行編碼所需要的比特數(shù)等于對剩余的條目的數(shù)目進行編碼所需的比特數(shù)。參考圖12A和12B提供了一個例子。開始時,必須對五個條目進行編碼。由于對五個不同的狀態(tài)進行編碼需要三比特,那么用三比特對第一個條目進行編碼,如前面的例子所展示。在圖12B的示例中,說明庫C的第一條目被編碼成010?,F(xiàn)在剩余四個條目要編碼,由于對四個不同的狀態(tài)進行編碼只需要兩比特,那么將用兩比特來對第二個條目進行編碼。再一次用與前一個例子中所用的方式相同的方式對所述第二個條目進行編碼。所述第二個條目說明庫A,在圖12A的關(guān)系模式中,庫A距離C位置有三個位置的距離,因此用“ 10”對第二個條目中的庫A進行編碼?,F(xiàn)在剩余三個條目要編碼,因為 對三個不同的狀態(tài)進行編碼需要兩比特,那么將用兩比特對所述第三個條目進行編碼。再一次使用和前一個例子所用的方式相同的方式對所述第三個條目進行編碼。所述第三個條目說明庫B,在圖12A的關(guān)系模式中,庫B距離C位置有四個位置,因此用“ 11”對所述第三個條目進行編碼?,F(xiàn)在在表中只剩下兩個條目要編碼,因為對兩種不同的狀態(tài)編碼只需要一比特,那么對第四個條目進行編碼只需要一比特。為了對第四個條目進行編碼,當只考慮要編碼的剩余值時,使用沿著圖12A的模式距離第一個條目的位置數(shù)。在這個例子中,只剩下E和D要編碼,因為C、A和B已經(jīng)編好碼了。由于第四位置說明庫E,當只考慮剩余的D和E位置時,在圖12A中,庫E距離C位置有兩個位置,第四個條目被編碼成“ I ”。最后只剩下一個位置要編碼。從技術(shù)上講,對最后的位置編碼不需要比特,因為只可能有一個條目。如之前所說的,一些實施方式可以沒有最后一列,因為可以推斷出它的值。但是,在圖12B的實施方式中,對第五個(最后一個)位置用和第四個位置相同的方式進行編碼。當只考慮剩下的D和E位置時,因為第五個位置說明的是庫D,在圖12A中它距離C位置僅僅一個位置,第四條目被編碼成“O”。根據(jù)這個方法對一行進行編碼的第二個例子在圖12C和12D中。不是相對于一行的第一個條目中的條目做出編碼位置,而是可以相對于用更多的比特數(shù)編碼的最后一個在前的條目做出。圖12E示出了這樣一個實施例。在圖12E的示例中,使用三個比特來實現(xiàn)說明存儲庫A的第一個條目。接下來的兩個條目使用兩個比特,相對于用三個比特來編碼的那個第一個條目而做出。因此,所述第二個和第三個條目被編碼成11和01,分別標示庫E和C相對于位置A的位置數(shù)。接下來的兩個條目用一個比特進行編碼,并可以相對于用兩比特進行編碼的最后一個的位置(說明庫C的第三個條目)做出。因此,第四個條目用“O”對存儲庫編碼,因為D距離C條目只有一個位置(當只考慮剩下的D和B值時)。最后,最后一個條目包含有“1”,因為當只考慮剩下的D和B的值時,B位置距離C位置只有兩個位置的距離。在非常大的虛擬存儲映射表中,圖12A至12E所展示的編碼系統(tǒng)會極大地縮小虛擬存儲映射表的大小。但是,縮小虛擬存儲映射表大小的代價是對虛擬存儲映射表中的條目編碼和解碼的邏輯更為復(fù)雜。但是,在有用于許多實際的實施方式中的非常大的虛擬存儲映射表的情況下,用于實現(xiàn)編解碼邏輯的芯片面積要比用這種編碼方式減小虛擬存儲映射表的大小所節(jié)省的芯片量要小得多。映射表實施方式在本發(fā)明的虛擬存儲系統(tǒng)中,可以用高速邏輯和存儲來實現(xiàn)所用的虛擬存儲映射表。具體而言,如圖8的流程圖所示,在步驟810、830、850、860和870必須要訪問虛擬存儲映射表。可以用許多技術(shù)來減少實際訪問虛擬存儲表的次數(shù),增加虛擬存儲表的性能。這一部分將公開幾種可以用來實現(xiàn)虛擬存儲表的方法。
參考圖8,在步驟830,虛擬存儲控制器會查看虛擬存儲表,確定一個寫操作正在訪問的虛擬存儲地址的當前存儲庫。如果與所述寫操作相關(guān)聯(lián)的虛擬存儲地址是和步驟820中讀操作訪問的存儲庫在同一個存儲庫,那么便會檢測到有存儲庫沖突,使得虛擬存儲控制器必須然后在步驟850訪問所述映射表,確定哪個同一個物理存儲行的空閑存儲庫。參考圖6A的虛擬存儲表623可以看出,所述空閑存儲庫和剛才要找到正在被寫入的虛擬地址的當前存儲庫而要讀取的條目是在虛擬存儲表623中的同一行。例如,如果所述系統(tǒng)正在寫入虛擬地址302,那么所述系統(tǒng)必須讀取02行3列的條目,識別出存儲庫存儲地址302。如果出現(xiàn)沖突,所述系統(tǒng)需要從02行的‘e’列獲得所述條目,以識別空閑的存儲庫。因此,在步驟830,所述系統(tǒng)通過讀出虛擬存儲表623的整行,可以同時獲得正在被寫入的存儲庫虛擬地址以及那一行的空閑存儲庫。類似地,在步驟860和870所進行的對虛擬存儲表623的更新可以用類似的單次訪問來進行。特別的是,更新在步驟820讀出的整行(在改進的并行版本中),然后將該整行寫回到虛擬存儲表623,虛擬存儲表623包含由于寫而移動的虛擬地址的新位置和所述空閑存儲庫的新位置。因此,步驟860和870中的更新是用對虛擬存儲表623的單次寫操作來進行的。通過從虛擬存儲表623讀和寫一整行所進行的前兩個讀和寫操作的結(jié)合,訪問次·數(shù)下降到三次在步驟810讀取虛擬地址的讀取,對寫的虛擬地址和空閑庫的物理地址的結(jié)合的讀取(步驟830和850),以及與寫操作和空閑庫的虛擬地址相關(guān)聯(lián)的更新后的物理地址的組合寫(步驟860和870)。這是對虛擬存儲映射表進行的兩次讀操作和一次寫操作。通過實施虛擬存儲表兩個完全一致的拷貝,所述兩次讀可以并列進行,并且可以對所述虛擬存儲表的兩個拷貝進行單次的寫操作。因此,圖13A示出了包含有兩個虛擬存儲表(虛擬存儲表1323和虛擬存儲表1323)的虛擬存儲系統(tǒng)1300。在這樣的一個系統(tǒng)中,每個存儲周期只需要對虛擬存儲表進行兩次訪問,使得所述虛擬存儲表僅需要比物理主存儲1320快兩倍。特別是有單次的讀操作(實際上是并行的兩個讀取)和單次的寫操作。經(jīng)過所有這些優(yōu)化之后,可以用最后一種實施方式進一步提高虛擬存儲表的速度。所述虛擬存儲表本身可以用本發(fā)明的技術(shù)來實現(xiàn)。因此,可以用一種遞歸的方式使用本發(fā)明技術(shù)。如前文所展示的,對所述虛擬存儲表只有單次的讀和單次的寫操作。這兩個操作不能并列進行,因為寫依賴于讀。但是,在各個不同的階段同時處理多個不同的存儲訪問請求的流水線式實施方式中,在先存儲訪問的寫可以與其后的存儲訪問的讀相結(jié)合。因此,需要同時進行單次的讀和寫。這正是圖7A至7D所要解決的問題。因此,可以用遞歸的方式使用與圖13A中圖示的建立虛擬存儲系統(tǒng)1300的技術(shù)同樣的技術(shù),在虛擬存儲系統(tǒng)1300中建立虛擬存儲表1323和1324。用這種方式,用于實現(xiàn)虛擬存儲表1323和1324的存儲技術(shù)的工作速度可以和用于實現(xiàn)主物理存儲1320所用的存儲技術(shù)的工作速度相同。由于可以使用和物理存儲同樣類型的存儲技術(shù)來實現(xiàn)虛擬存儲映射表,實際上,虛擬存儲映射表可以集成在物理存儲中。這樣的一個例子在圖13B的概念圖中進行了展示。在圖13B中,虛擬映射表和存儲庫用作正常存儲的剩余部分在同一個物理存儲系統(tǒng)1320中實現(xiàn)。在這樣的實施方式中,在虛擬存儲控制器1321中需要小的高速元映射表1360,但是,這個高速元映射表1360比主虛擬存儲映射表1323和1324要小很多。
參考圖13A,復(fù)制的存儲映射表(1323和1324)可以被再次復(fù)制,并以“乒-乓”結(jié)構(gòu)排列。這樣一個實施例的例子在圖13C中圖示。在存儲系統(tǒng)1300中,第二組復(fù)制的存儲映射表(1325和1326)被添加在虛擬存儲控制器1321中。在乒-乓結(jié)構(gòu)中,所述系統(tǒng)輪流在兩個不同的存儲系統(tǒng)進行寫,使得當一個存儲系統(tǒng)正在完成存儲寫時,另一個存儲系統(tǒng)可用來接收新的數(shù)據(jù)。可以用各種不同的存儲技術(shù)來實現(xiàn)所公開的虛擬存儲系統(tǒng)的各個不同部分。在一個實施例中,標準DRAM可以用于所述系統(tǒng)的主物理存儲。在另一個實施例中,可以使用嵌入式DRAM作為主物理存儲系統(tǒng)。嵌入式DRAM (eDRAM)對于圖13B所圖示的遞歸式實施方案尤其有利,其中所述虛擬存儲地址映射表與所述主數(shù)據(jù)存儲器存儲在同一個物理存儲(eDRAM)中,因為實現(xiàn)虛擬存儲控制器1321的邏輯可以與虛擬存儲地址映射表在同一個芯片上。
各種用來加快虛擬存儲映射表的技術(shù)會增加虛擬存儲映射表的存儲大小。例如,創(chuàng)建復(fù)制的表格使所需要的存儲大小加倍。以流水線方式實現(xiàn)所述系統(tǒng)又再至少使其大小加倍。但是,所需的存儲大小的這樣的增加可以得到補償,因為與嵌入式DRAM相比,高速SRAM對于每一比特會需要四倍到六倍的芯片面積。另外,SRAM電路的產(chǎn)率經(jīng)常比嵌入式DRAM的產(chǎn)率低,這樣使得可能的話,經(jīng)常需要使用嵌入式DRAM來代替SRAM,以制造出更多的運算芯片。數(shù)字半導(dǎo)體設(shè)計者經(jīng)常使用一組預(yù)先定義的數(shù)字電路庫來工作,目的是使風險最小化、縮短研發(fā)時間。這些數(shù)字電路庫包括執(zhí)行各種通常需要的功能的各種電路。例如,有存儲陣列、處理器核、數(shù)字協(xié)議棧、標準化數(shù)字輸入/輸出系統(tǒng)和許多其它功能的庫電路。實現(xiàn)本發(fā)明技術(shù)的數(shù)字電路可以加到這樣的數(shù)字電路庫中。一個非常有用的例子是,在數(shù)字電路庫中為嵌入式DRAM裝置(eDRAM)創(chuàng)建一個條目,包括實現(xiàn)本發(fā)明的技術(shù)。這樣一個數(shù)字電路庫條目會以一種完全透明的方式給集成電路設(shè)計者提供一種改進的存儲系統(tǒng)。所述數(shù)字電路庫條目會與現(xiàn)有的eDRAM電路條目類似,除了它使用的芯片面積更大、提供的存儲性能更好??梢允褂酶鞣N技術(shù)來實現(xiàn)所述系統(tǒng)中必須以非常高的速度工作的存儲部分。高速SRAM可以用作需要存儲的高速分區(qū)的基本技術(shù)。對于實現(xiàn)存儲分區(qū),比如圖13B的元映射表1360的附加速度,可以使用超頻(over-clocked) SDRAM。超頻SRAM是在小面積上實現(xiàn)的傳統(tǒng)的SRAM,使得較短的導(dǎo)體讓SRAM以較高的時鐘速率工作。單獨的觸發(fā)器電路還可以用在速度需要非常高的存儲服務(wù)的分區(qū)內(nèi)。單次讀同時多次寫在前些部分展示的虛擬存儲系統(tǒng)可以擴展成在進行一個以上的存儲寫操作時同時有單個的寫操作。為了處理附加的寫操作,與所述存儲讀操作同時出現(xiàn)的每個附加的寫操作只需要一個附加的存儲庫,因為每個附加的存儲庫可以避免潛在的存儲庫沖突。例如,要同時處理兩個寫操作和一個讀操作,如圖14A的實施例中所圖示,需要兩個附加的存儲庫。圖14A示出了可以同時處理一個讀操作和兩個寫操作的虛擬存儲系統(tǒng)的一個可能的初始狀態(tài)。如前面部分所展示那樣,如果所述存儲訪問請求都訪問不同的存儲庫,那么便沒有存儲庫沖突,因為所有的存儲操作都可以由每個獨立的存儲庫獨立處理。但是,在圖14A的存儲訪問示例中,收到訪問同一個存儲庫(存儲庫D)中的虛擬存儲地址的三個存儲操作從虛擬地址301的讀,到虛擬地址303的寫以及到虛擬地址398的寫。為了處理從虛擬地址301的讀,存儲系統(tǒng)控制器1421訪問虛擬存儲表1423,讀取01行的3列中的條目,發(fā)現(xiàn)虛擬地址301當前存儲在存儲庫D中。因此,存儲系統(tǒng)控制器1421訪問存儲庫D的01行,獲得與虛擬地址301相關(guān)聯(lián)的數(shù)據(jù),對所述讀請求做出響應(yīng)。因為存儲庫D忙著處理這個從虛擬地址301的存儲的讀取,必須用不同的存儲庫來處理所述寫操作,以防止存儲庫沖突。為了確定哪些存儲庫(除了繁忙的存儲庫D之外)是空閑的、能夠處理所述寫操作,存儲系統(tǒng)控制器1421訪問虛擬存儲表1423,讀取el和e2列中的條目(空I和空2)給與寫操作對應(yīng)的行。因此,所述存儲系統(tǒng)控制器會從03行和98行讀取el列和el列的條目。在這種情況下,兩行都報告存儲庫E和F有給03行和98行的一個空的存儲庫。然后存儲系統(tǒng)控制器1421將從存儲寫操作得到的數(shù)據(jù)存入這些指定為可用的存儲庫中。注意,由于03行和98行報告了存儲庫E和F是可用的,所以存儲系統(tǒng)控制器1421必須以一種方式調(diào) 整所述寫,以避免另一個存儲庫沖突。因此,所述寫操作中有一個將使用存儲庫E,另一個寫操作將使用存儲庫F。在這個特殊的例子中,寫到虛擬地址303的被寫到存儲庫E,寫到虛擬地址398的被寫到存儲庫F。然后必須更新虛擬存儲表1423,以反映虛擬地址303和398的新的物理存儲位置(分別是庫E和F)、03行和98行的新的空存儲庫(存儲庫D給兩個行)。到地址301的讀操作以及到地址303和398的寫操作之后的最終狀態(tài)在圖14B中圖
/Jn ο一個讀操作和兩個寫操作的另一個例子在圖14C和14D中圖示。圖14C使用圖14B的狀態(tài)作為起點,接收尋址到虛擬地址200的讀操作、到虛擬地址203的一個寫操作和到虛擬地址299的另一個寫操作。以同樣方式工作的系統(tǒng)和最終狀態(tài)在圖14D中圖示。在這種情況下,到虛擬地址203的寫使庫D和F可用,到虛擬地址299的寫使庫E和F可用。在這種情況下,存儲系統(tǒng)控制器1421將寫到虛擬地址203的數(shù)據(jù)存儲到庫D的03行,并將寫到虛擬地址299的數(shù)據(jù)存儲到列E的99行。通過將附加的存儲庫添加到所述物理存儲可以處理附加的同時寫操作,避免潛在的存儲庫沖突。但是,到虛擬存儲表1423的訪問(確定當前正在讀取的數(shù)據(jù)在哪里,并找到空閑的存儲庫進行寫操作)次數(shù)最終會變得非常龐大,使得虛擬存儲表1423變得過載。在前面部分所列的各種存儲技術(shù)可以用來增加虛擬存儲表1423的性能,使得虛擬存儲表1423可以處理所述請求。偶數(shù)倍的非對稱存儲性能增益不同的存儲技術(shù)具有各種不同的人為現(xiàn)象(artifact)。當前公開的系統(tǒng)可以利用這樣的存儲人為現(xiàn)象,以最有效的方式使用所述存儲。例如,一些存儲系統(tǒng)可以以寫操作兩倍的速度進行讀操作。這可能是因為寫操作會造成DRAM存儲裝置從存儲矩陣讀出整個存儲行、將新的數(shù)據(jù)放在所述行、然后將那一行寫回到存儲矩陣的事實,然而讀操作僅讀出一行然后用所請求的數(shù)據(jù)來響應(yīng)。讀操作和寫操作對時間要求大致不同的存儲裝置可以稱作是“非對稱的存儲裝置”,因為讀和寫對時間要求不同。本發(fā)明的存儲系統(tǒng)技術(shù)可以利用非對稱存儲裝置的這個人為現(xiàn)象。參考圖7A至7D,在本發(fā)明的教導(dǎo)下,給存儲系統(tǒng)增加單個的存儲庫會讓所述存儲系統(tǒng)以一種方式同時處理單個的讀操作和單個的寫操作,防止任何存儲庫沖突對所述存儲系統(tǒng)的性能有不良影響。但是,當一個寫操作需要花費的時間是完成一個讀操作的時間的兩倍時,可以用同樣的技術(shù)在單個的寫操作周期進行兩個讀操作和一個寫操作。圖15A示出了說明這樣一個存儲系統(tǒng)是如何工作的時序圖。參考圖15A,沿著時間線定義一系列的存儲周期作為執(zhí)行單個寫操作所需要的時間。當讀操作需要的時間是寫操作時間的一半(或者更少)時,那么在進行單個的寫操作時,可以連續(xù)進行兩個讀操作。請注意,兩個讀操作互相不會沖突,因為所述兩個讀操作是按
順序進行的。在兩個連續(xù)的讀操作正在出現(xiàn)時,可以允許同時進行單個的寫操作。為了避免與所述兩個讀操作有任何存儲庫沖突,必須至少有三個不同的位置可以讓寫操作寫入數(shù)據(jù)。因此,這樣一個不對稱的實施方式會需要兩個額外的存儲庫,因為這樣讓寫出現(xiàn)在它的現(xiàn)有位置(如果與任何一個寫操作沒有存儲庫沖突的話),出現(xiàn)在第一空閑庫(如果與其中一個讀操作有存儲庫沖突的話),或者出現(xiàn)在第二空閑存儲庫(如果與兩個讀操作都有存儲庫沖關(guān)的話)。增加更多的存儲庫的技術(shù)可以用來讓另外同時發(fā)生的寫操作發(fā)生。圖15B示出了一個時序圖,其中花費的時間是讀操作的至少兩倍的兩個寫操作與兩個有順序的讀操作同時進行。圖15B的兩個讀、兩個寫系統(tǒng)需要三個額外的存儲庫。這些技術(shù)還可以用在非易失性閃存上。閃存具有非常不對稱的特質(zhì),因為寫占用的時間是讀操作占用時間的十倍。因此,當正在處理單個的寫操作時,可以處理幾個讀。非偶數(shù)倍的非對稱存儲性能增益.一些存儲系統(tǒng)在讀時間和寫時間之間不會有這樣一個偶數(shù)差異。例如,在一個存儲系統(tǒng)中,讀可能需要2納秒,寫可能需要3納秒。這兩個時間值的最小公倍數(shù)(6納秒)可以用來創(chuàng)建具有整數(shù)個讀和寫操作的存儲周期。用上面例子的2納秒讀時間和3納秒寫時間,它們的最小公倍數(shù)是6納秒。通過將存儲周期定義為6納秒,可以在那個存儲周期期間進行三個讀操作和兩個寫操作。圖15C示出了這樣一個系統(tǒng)的一個可能的存儲周期時序圖。對于圖15C的特殊的系統(tǒng),需要兩個額外的存儲庫。具體而言,第一個寫必須有三個不同的可能位置,因為它可能會與重疊的第一和第二讀操作相沖突。類似地,第二個寫操作需要三個它能寫入的可能的位置,因為所述第二個寫入操作會與重疊的第二和第三個讀操作相沖突。如在前面的實施方式中那樣,可以根據(jù)需要通過提供附加的存儲庫來增加附加的寫操作。如果在圖15C的系統(tǒng)上添加了第三個寫操作,那么會需要一個附加的存儲庫。圖I 中展示了這樣一個系統(tǒng)的時序圖。所述第三個寫操作需要三個額外的存儲庫,因為它會與所述第一個讀操作、第二個讀操作或者第一個寫操作相沖突。對于附加的寫操作,并不總是需要額外的存儲庫。例如,圖15E示出了圖MD的時序圖,在所述系統(tǒng)中增加了第四個讀操作。所述第四個讀操作可以在所述第三個讀取操作之后按順序發(fā)生。因此,所述第三個和第四個寫操作每一個僅與兩個讀操作和另外一個寫操作重疊。因此,當在圖15D的系統(tǒng)增加另一個寫操作時,不需要附加的存儲庫。讀操作之后的寫操作如果存儲是比性能更為稀缺的資源,那么通過讓一些寫操作在讀操作之后按順序出現(xiàn)可以降低對附加的存儲庫的需要。例如,如果讀操作和寫操作每個都需要2納秒,那么一個系統(tǒng)可以被構(gòu)造成有6納秒的存儲周期,可以在6納秒的存儲周期進行兩個讀操作和兩個寫操作,而僅需要一個額外的存儲庫。因此,為了換取性能的降低,硬件要求會降低,因為只需要一個額外的存儲庫在單個(擴展的)存儲周期內(nèi)來實現(xiàn)兩個存儲讀和兩個存儲寫。這樣一個系統(tǒng)的時序圖在圖15F中圖示。如圖15F所示,只有一個寫操作與一個讀操作重疊。因此,在這樣的一個系統(tǒng)中,只需要單個的額外的庫,因為只有與讀操作重疊的那一個寫操作可以與那個讀操作沖突。第二個讀操作和第二個寫操作不會與其它任何一個操作沖突,因為那些操作沒有和其它任何一個操作按順序執(zhí)行。 除了減少所需的存儲庫的量,也可以減少虛擬存儲映射表對存儲裝置性能的需要。如前所述,使用本發(fā)明的技術(shù)實現(xiàn)的系統(tǒng)通常需要快速的存儲系統(tǒng)來實現(xiàn)虛擬存儲映射表。但是,如圖15G所示,通過推遲所述第一個寫操作,可以降低所述虛擬存儲映射表的性能要求。具體而言,所述虛擬存儲映射表不必立即判斷所述第一個讀取數(shù)據(jù)的物理位置和所述第一個寫存儲數(shù)據(jù)的物理位置。相反,所述虛擬存儲映射表首先找到所述第一個讀操作的地址。然后,當在進行所述第一個讀操作時,訪問所述虛擬存儲映射表,確定所述第一個寫操作的物理寫位置和所述第二個讀操作的物理讀位置。如圖15F和15G的實施例所示,有沒有正被使用的額外的存儲訪問帶寬。例如,在圖15F中,當正在進行第二個讀和第二個寫操作時,有可用的存儲帶寬。這個額外的帶寬可以用來將存入在所述額外的存儲庫中的數(shù)據(jù)移回到原來給所述數(shù)據(jù)的虛擬地址分配的物理存儲地址。通過這種方式,減少了對額外的存儲庫的需求,因為當有可能時,數(shù)據(jù)正被放回到主物理存儲。因此,有可能減小所述添加的存儲庫的大小而不會影響性能。圖15F和15G的方法可以用來實現(xiàn)各種其它排列的讀和寫。例如,圖15H圖示了一種實施方式,其中以一種仍然只需要一個額外的存儲庫的方式在單個的存儲周期進行兩個讀和三個寫。只需要一個額外的存儲庫,因為同時最多會有兩個不同的存儲訪問操作訪問所述物理存儲。非偶數(shù)倍數(shù)的非對稱存儲分數(shù)性能增益非對稱存儲裝置的性能增益和分數(shù)性能增益的技術(shù)可以結(jié)合起來,建立許多不同的存儲系統(tǒng),每個存儲系統(tǒng)有它們自己獨一無二的特性。例如,圖151和15J示出了一個系統(tǒng)如何可以使用非對稱存儲裝置獲得分數(shù)增益。如圖151所示,寫操作比讀操作花費的時間長。如果兩個連續(xù)的寫操作與兩個連續(xù)的讀操作并列進行,所述系統(tǒng)會需要兩個存儲庫。但是,注意,在所述兩個連續(xù)的讀操作之后,浪費了多出來的時間。如圖15J所示,如果在兩個連續(xù)的讀操作之后增加了另外一個寫操作,所述系統(tǒng)僅通過稍微延長所述存儲周期的長度,便可以執(zhí)行兩個讀操作和三個寫操作。分數(shù)周期類型如果讀周期需要2納秒,寫周期需要6納秒,通過使用6納秒存儲周期可以實現(xiàn)三個讀和三個寫的偶數(shù)倍。這樣的一個例子在圖15M中圖示。這個系統(tǒng)提供每個操作I納秒的獨立操作時間,因為在6納秒內(nèi)完成6個操作。但是,這種格局會需要5個額外的存儲庫和大量的邏輯。如果所述系統(tǒng)降低到在6納秒的周期時間內(nèi)有2個讀和2個寫,那么在6納秒內(nèi)完成4個存儲操作。這種格局的時序圖的一個示例在圖15L中圖示。這個系統(tǒng)將只需要3個額外的存儲庫。在6納秒內(nèi)完成所述四個存儲操作可以認為是具有I. 5納秒的分數(shù)周期時間。圖15L的分數(shù)系統(tǒng)可以被進一步細化。如果將所述系統(tǒng)被設(shè)計成周期為12納秒,那么可以完成四個讀和寫。圖15M示出了這樣一個系統(tǒng)的時序圖。在圖15M的系統(tǒng)中,最糟糕的情況是一個寫會和兩個讀重疊,使得只需要兩個額外的存儲庫。因此,圖15M的系統(tǒng)具有I. 5納秒的分數(shù)周期(12納秒/8個操作)但是只需要兩個存儲庫,而不是三個。不需要使用映射表的反相XOR系統(tǒng)在前面的存儲系統(tǒng)中,所述存儲的讀操作總是優(yōu)先,因為需要讀取的數(shù)據(jù)只存在于所述存儲中的一個位置。如果在前面的系統(tǒng)中,所述寫操作有優(yōu)先權(quán),那么在所述寫操作和所述讀操作之間的存儲庫沖突會促使所述讀操作一直等待直到所述讀結(jié)束為止。但是,如果來自于每個存儲地址的數(shù)據(jù)被呈現(xiàn)在所述存儲系統(tǒng)中的至少兩個不同的存儲庫中,那么把優(yōu)先級給寫操作,因為可以從所述兩個不同位置中任意一個位置進行讀操作。具體而 言,如果在其中一個存儲庫中,所述讀操作和所述寫操作之間有潛在的沖突,那么所述讀操作可以從另一個存儲庫中的位置中所述數(shù)據(jù)的第二個拷貝得到所請求的數(shù)據(jù)。以這種寫比讀選項優(yōu)先的方式工作的存儲系統(tǒng)可以被標記為“反相”存儲系統(tǒng)。創(chuàng)建這樣一個反相存儲系統(tǒng)不是微不足道的。簡單地用兩個不同的存儲庫來呈現(xiàn)每片數(shù)據(jù),僅是一個完整的復(fù)制存儲系統(tǒng)的產(chǎn)物。復(fù)制存儲系統(tǒng)不是非常有效的創(chuàng)建存儲系統(tǒng)的方式。為了創(chuàng)建一個反相系統(tǒng),其中讀操作的優(yōu)先級高于同時的寫操作,此處公開了一個新系統(tǒng),其中將單個額外的高速存儲庫添加到現(xiàn)有的一組存儲庫,以存儲編碼的第二份拷貝的數(shù)據(jù)。所述編碼的第二拷貝可以是來自于所有正常的存儲庫的數(shù)據(jù)的組合與邏輯異或(也稱作‘X0R’)操作的結(jié)合。因為寫優(yōu)先,邏輯異或用來對第二份拷貝的數(shù)據(jù)進行編碼,所述系統(tǒng)稱為‘反相異或’存儲系統(tǒng)。圖16示出了反相異或存儲系統(tǒng)的方塊圖。如圖16所示,000至399的一組地址存入到一組存儲庫1604中,其中每個存儲庫與具有存儲地址的最高位的地址相關(guān)。(在圖16中,庫O與‘0’為最高位的虛擬地址相關(guān),庫I與‘I’為最高位的虛擬地址相關(guān),諸如此類。)除了主存儲庫1604之外是XOR存儲庫1630。存儲控制器1621會把已經(jīng)寫入所有主存儲庫(庫O至3)的對應(yīng)的行中的所有異或編碼版本的數(shù)據(jù)存儲到XOR存儲庫1630。在反相的XOR存儲系統(tǒng)中,在存儲控制器1621中不需要詳細的映射表來跟蹤每塊數(shù)據(jù)在哪里,因為數(shù)據(jù)總是在它自己原來的位置。但是,只需要非常小的XOR庫內(nèi)容表1633來跟蹤哪些存儲庫有在XOR庫1620中呈現(xiàn)的有效數(shù)據(jù)。在圖16的系統(tǒng)中,所有的寫操作將把信息存儲在主存儲1604和XOR庫1630的對應(yīng)的行中。寫入主存儲1604使用在所述寫操作中說明的地址。寫入到XOR庫1630中的對應(yīng)位置的操作必須首先讀取XOR庫1630的位置,然后將新的數(shù)據(jù)與來自其它存儲庫的對應(yīng)位置的現(xiàn)有數(shù)據(jù)用XOR操作進行邏輯組合,然后將新組合的值寫回到XOR庫1630中對應(yīng)的位置。因此,需要高速存儲來實現(xiàn)XOR庫1630。所述用XOR編碼的數(shù)據(jù)用來處理讀操作,這將在下文敘述。圖16的反向XOR存儲系統(tǒng)實施例必須被實現(xiàn)成‘單次讀’的存儲系統(tǒng),其中一旦數(shù)據(jù)被讀取之后便被破壞,或者是‘規(guī)定最后一次讀取’系統(tǒng),其中存儲系統(tǒng)的用戶必須規(guī)定特定存儲位置最后一次讀取什么時候發(fā)生。這樣做的原因是,當存儲控制器1621寫所述存儲系統(tǒng)時,存儲控制器1621需要寫到一個空的存儲位置。存儲控制器1621可以只寫到一個空的存儲位置,因為存儲控制器1621沒有時間先從所述存儲位置讀出已有的數(shù)據(jù)、從XOR庫1630中去掉那個數(shù)據(jù),然后將新數(shù)據(jù)寫入所述主存儲位置和XOR庫1630位置。當收到不會造成存儲庫沖突的讀請求和寫請求時,那么在主存儲庫1604中可以同時出現(xiàn)讀和寫操作。但是,讀和寫可以都需要訪問XOR庫1630。如上文所展示的,所述寫操作必須總是訪問XOR庫1630,以將用XOR編碼的數(shù)據(jù)添加到XOR庫1630中。如果所述讀操作是對那個存儲位置的最后一次讀取(或者所述實施方式是總會破壞數(shù)據(jù)的‘單次讀’實施方式),所述讀取操作還將必須要訪問XOR庫1630,以從XOR庫1630中去掉數(shù)據(jù)的XOR表示。因為所述讀操作和所述寫操作都可能需要讀取、修改和寫XOR庫1630 ;所述乂(《庫必須在單個存儲周期內(nèi)支持兩個讀操作和兩個寫操作。因此,所述XOR庫可能需要是4-端口的存儲裝置。當?shù)拇_出現(xiàn)存儲庫沖突時(所述存儲讀和存儲寫操作都針對的是同一個存儲庫中的地址),給所述存儲寫操作以優(yōu)先級來訪問主存儲1604中的存儲庫。另外,所述寫操作 必須還更新XOR庫1630中對應(yīng)的位置。所述存儲讀(不能訪問主存儲1604中寫正在訪問的同一個庫)是通過從XOR庫1630獲得用XOR編碼版本的對應(yīng)位置、從具有編碼到XOR庫1630中的有效數(shù)據(jù)的其它存儲庫的對應(yīng)位置獲取所述數(shù)據(jù),然后解碼用XOR編碼的版本以獲得所請求的數(shù)據(jù)來處理的。所述編碼是通過將所有這個數(shù)據(jù)與XOR運算結(jié)合來進行的。注意,XOR庫內(nèi)容表1733用來只選擇那些當前在XOR庫1630的對應(yīng)位置有有效數(shù)據(jù)的存儲庫。如果這不是對這個存儲位置的最后一次讀取,那么在XOR庫1630中的對應(yīng)位置可以保持不變。但是,如果這是對這個特定位置的最后一次讀取,那么該讀取操作必須寫回一個XOR編碼的版本,該版本包含有來自于其它具有有效數(shù)據(jù)的行的數(shù)據(jù),但不是剛被讀取的數(shù)據(jù)。參考圖17A至17F,列舉了反向XOR存儲系統(tǒng)的操作示例。圖17A示出了在空的初始狀態(tài)下的存儲系統(tǒng)。第一寫操作被接收在尋址在地址位置302的存儲系統(tǒng)。存儲控制器1721將所述數(shù)據(jù)寫入主存儲中的存儲位置302,并將所述數(shù)據(jù)異或到所述XOR庫中的同一行。因為XOR庫1730是空的,所述XOR是空,使得在XOR庫1730中的02行僅僅包含有與寫入地址302的相同數(shù)據(jù)。然后存儲控制器1721更新XOR庫內(nèi)容表1733,指出XOR庫1730的02行含有來自主存儲庫3的02行的數(shù)據(jù)。寫入位置302后的最終狀態(tài)在圖17B中圖示。圖17C圖示的所述系統(tǒng)有圖17B收到到地址102的寫的狀態(tài)。所述數(shù)據(jù)寫入主存儲的102位置,并更新XOR庫1730。具體而言,讀取XOR庫1730的02行,使用異或運算與新數(shù)據(jù)結(jié)合,然后寫回到XOR庫1730的02行。還更新XOR庫內(nèi)容表1733,反映XOR庫1730的02行現(xiàn)在含有庫I和庫3的數(shù)據(jù)。在寫入地址102之后的最終狀態(tài)在圖17D中圖示。所述存儲系統(tǒng)將以這種方式繼續(xù)填滿。圖17E示出了所述存儲系統(tǒng)添加更多的數(shù)據(jù)之后的示例狀態(tài)。圖17E的系統(tǒng)然后可以接收到地址100的寫和同時來自地址104的讀。所述寫優(yōu)先,與所述寫操作相關(guān)的數(shù)據(jù)寫入到主存儲庫中的地址100。另外,讀取XOR庫1730的00行,與寫入到地址100的數(shù)據(jù)值進行X0R,寫回XOR庫1730的00行,更新XOR庫內(nèi)容表1733,指明XOR庫1730的00行現(xiàn)在還包含有來自存儲庫I的數(shù)據(jù)。從地址104的讀不能通過直接從主存儲中的地址104讀其數(shù)據(jù)來處理,因為它與到位置100的寫有庫沖突。因此所述讀必須使用XOR庫1730和其余的主存儲庫來處理。所述存儲控制器首先讀取XOR庫內(nèi)容表1733的04行,以識別出哪些主存儲庫具有在XOR庫1730的04行表示的數(shù)據(jù)。XOR庫內(nèi)容表1733的04行說明庫1、2和3都具有在XOR庫1730的04行異或的數(shù)據(jù)。然后所述存儲控制器讀取XOR庫1730的04行,以及具有在XOR庫1730的04行表示的數(shù)據(jù)的其它庫(庫2和3)的04行。因此,存儲控制器讀取庫2、庫3和XOR庫1730的04行。從這三個位置讀取的數(shù)據(jù)異或在一起,獲得來自于地址104的原始數(shù)據(jù),用來響應(yīng)所述讀請求。然后所述存儲控制器對庫2和3的04行數(shù)據(jù)進行異或,然后將那個值寫回到XOR庫XR30的04行。最后,更新XOR庫內(nèi)容表1733,指出地址104的數(shù)據(jù)不再在XOR庫1730中呈現(xiàn)。如前文提到的,所述系統(tǒng)總是在最后一個讀操作之后從XOR庫中去掉數(shù)據(jù)(數(shù)據(jù)是從主存儲庫或者XOR庫讀取的),以清空位置供接下來的寫用。在單次讀的存儲系統(tǒng)中,所述存儲控制器將在每次讀操作之后從所述XOR庫中去掉表示。在一個替換系統(tǒng)中,所述存儲用戶可以使用另一個信號線來說明讀取是否是對所述數(shù)據(jù)的最后一次讀取。如果所述讀取不是最后一次讀取,那么數(shù)據(jù)將仍然在所述主存儲位置,并在編碼的XOR庫中出現(xiàn)。因 此,所述存儲用戶然后可以重復(fù)地從一個地址進行讀取,而不會破壞那個地址的內(nèi)容。但是,在將任何新的信息寫入到那個地址之前,所述處理器會需要確保它對那個地址執(zhí)行的是‘最后一次讀取’操作。否則,在所述XOR庫的對應(yīng)行中的數(shù)據(jù)將被毀壞。注意,這個毀壞不僅是損壞與那個特定地址相關(guān)聯(lián)的數(shù)據(jù),還會損壞所有其它存儲庫的同一行相關(guān)聯(lián)的XOR庫所表示的數(shù)據(jù)。在主存儲位置的數(shù)據(jù)不需要改變,因為它會被重寫,然后接收稍后的寫操作。參考圖16至17F所公開的XOR系統(tǒng)的特征是,在一些應(yīng)用中是有益的,但是在其它應(yīng)用中不那么理想。所述XOR系統(tǒng)的一個好的特征是,在存儲控制器中不需要存儲大映射表。相反,只需要含有每個存儲地址的單個比特的XOR庫內(nèi)容表。對寬數(shù)據(jù)值而言,所述XOR系統(tǒng)并不理想,因為來自于所有不同的存儲庫(包括所述XOR庫)的并行數(shù)據(jù)路徑必須被路由到所述存儲控制器,以正確使用所述XOR庫。此外,所述XOR系統(tǒng)使用的電能可能會比其它系統(tǒng)多,因為每次發(fā)生存儲庫沖突時,所述系統(tǒng)將訪問正在被寫入的存儲庫、XOR庫以及每隔一個存儲庫,在所述每隔一個存儲庫中具有在所述XOR庫中和正在讀的一行相同的行中所表現(xiàn)的數(shù)據(jù)。不受限制的存儲虛擬系統(tǒng)在前面小節(jié)描述的各種存儲系統(tǒng)中,所述存儲系統(tǒng)是被組織成截然不同的存儲庫和那些存儲庫中的行(有時是列)。然后將一個或多個額外的類似存儲庫添加到所述存儲系統(tǒng)中,防止存儲庫沖突降低所述存儲系統(tǒng)的性能。然后使用虛擬存儲映射表來跟蹤各種不同的虛擬存儲地址當前在所述物理存儲系統(tǒng)中的什么地方。為了限制虛擬存儲映射表的大小,在較早部分描述的實施例限制了可以存儲每個虛擬存儲地址的物理存儲位置。例如,在圖6A和6B的虛擬存儲系統(tǒng)中,存儲在所述存儲系統(tǒng)中的每個虛擬存儲地址僅可以被呈現(xiàn)在具有相同的兩個最低位的物理地址行中。因此,例如,地址101僅可以被存在物理庫A至E的01行。雖然這個限制具有優(yōu)點(減小了存儲映射表的大小),但是在構(gòu)建一個系統(tǒng)時可以不要這樣的限制。圖18圖示的一例存儲系統(tǒng)讓每個虛擬存儲地址呈現(xiàn)在任何一個物理存儲地址中。參考虛擬存儲表1823,通過訪問虛擬地址最高位的列和虛擬地址兩個最低位的行,可以確定任何虛擬地址的物理位置,以獲得一個說明所述虛擬地址所在的存儲庫和行的表條目。注意,因為任何虛擬地址可以位于任何物理地址,在虛擬存儲表1823中,沒有必要有“空”列。相反,所述空物理存儲地址可以被存儲在一個簡單的未排序集合中,因為在各種不同的空物理地址之間沒有相對差異。但是,在一個替換實施例中,所述空的物理地址可以存儲在一個空閑的列表中,或者其它像數(shù)據(jù)結(jié)構(gòu)這樣的通常的存儲分配列表中。乍看之下,圖18的存儲系統(tǒng)可能似乎不是非常有用,因為虛擬存儲表1823非常大。但是,如果實際虛擬存儲地址所參考的數(shù)據(jù)的大小非常大,那么這樣一個系統(tǒng)的確具有有用的應(yīng)用。例如,如果每個虛擬地址參考一大塊存儲,那么圖14A的存儲系統(tǒng)將具有許多有用的應(yīng)用。非限制性存儲系統(tǒng)的一個示例用途是進行動態(tài)存儲塊分配。在現(xiàn)在的計算機系統(tǒng)中,有許多不同的計算機資源(處理器時間、存儲、輸出裝置等等)以及使用那些計算機資源的許多不同的獨立步驟。計算機操作系統(tǒng)基本功能中的一個功能是協(xié)調(diào)將計算資源分配到請求計算資源的各種不同的步驟。在‘C’編程語言家族中,malloc ()函數(shù)由一個步驟使用,動態(tài)地請求操作系統(tǒng)再給那個步驟一些存儲。在具有現(xiàn)代的多核處理器的情況下,不同的步驟實際上可以在物理上不同的核上運行,使得不同的步驟完全同時運行,而不僅僅是使用時分復(fù)用表面上的同步。為了讓獨立的步驟以最大可能的速度運行,可以用圖14A的存儲系統(tǒng)從不同的存儲庫中分配存儲塊,使得兩個試圖訪問存儲在同一個存儲庫的數(shù)據(jù)的獨立步驟不會造成存儲庫沖突。在另一個應(yīng)用中,所公開的存儲系統(tǒng)的技術(shù)可以與鏈接的存儲塊列表一起使用。鏈接的存儲塊列表通常用在存儲分配系統(tǒng)和包緩沖隊列中。在有本發(fā)明的存儲系統(tǒng)的情況下,所述系統(tǒng)追蹤每個虛擬存儲位置處于哪個特殊的物理存儲庫。因此,可以以一種方式用所述存儲系統(tǒng)來分配存儲塊給鏈接的列表,使存儲庫沖突最小。在一個實施例中,所述存儲系統(tǒng)可以讓存儲用戶(比如數(shù)據(jù)包排隊的步驟)使用邏輯地址做出存儲請求。這些不同的存儲隊列步驟可能會使用邏輯地址請求存儲塊。例如,如果有三個存儲隊列步驟0、1和2 (比如與數(shù)據(jù)包隊列相關(guān)聯(lián)的步驟),每個不同的存儲隊列步驟使用單個的邏輯地址請求存儲塊,那么一個存儲系統(tǒng)會跟蹤每個存儲請求和對應(yīng)的存儲塊。每個存儲請求可以通過存儲隊列處理標識符和那個隊列的邏輯塊地址來識別,比如像這樣(隊列標識符,邏輯地址)。因此,當?shù)谝淮鎯﹃犃胁襟E做出第一個(邏輯地址O)存儲請求時,所述存儲系統(tǒng)將把那個第一存儲請求關(guān)聯(lián)(0,0)。那個(0,0)標識符將會與所提供的存儲塊的物理地址相關(guān)聯(lián)。當同樣的存儲隊列步驟請求第二個(邏輯地址I)存儲請求時,所述存儲系統(tǒng)將把(0,I)與響應(yīng)所述請求而提供的存儲塊地址關(guān)聯(lián)起來。
在有這樣一個系統(tǒng)的情況下,所述存儲系統(tǒng)可以做出智能存儲分配決定。例如,由于所述存儲系統(tǒng)知道每個存儲請求是由哪個存儲隊列步驟做出,所述存儲系統(tǒng)可以試圖用來自于同一個存儲庫的存儲塊去回應(yīng)來自于同一個存儲隊列步驟的請求,因為存儲隊列步驟通常一次只訪問一個存儲塊,所以不會有任何存儲庫沖突。類似,所述存儲系統(tǒng)試圖從不同的存儲庫給出不同的存儲庫中的其它存儲隊列步驟存儲塊,因為不同的存儲隊列步驟使同時的存儲訪問到分給它們各自的存儲塊。因此,如果所述存儲塊是來自于不同的存儲庫,那么將不會有降低性能的存儲沖突。當然,在另一種極端情況下,可以從不同的存儲庫把數(shù)據(jù)給所述存儲隊列,目的是使所有不同的存儲庫之間的請求負載均衡,并使每個隊列的存儲的帶寬利用率最大。局部受限的存儲虛擬系統(tǒng)在嚴格受限的存儲系統(tǒng)之間,其中每個虛擬存儲地址可能在物理存儲中的位置是非常受限和不受限的存儲系統(tǒng),其中任何虛擬存儲地址可以位于任何物理存儲位置,有很多種不同的局部受限實施方式。例如,不用將虛擬地址總是限制在特定的行(如在圖6A和6B的實施方式所描述那樣),局部受到限制的存儲系統(tǒng)可能會讓虛擬地址出現(xiàn)在特定的行,或者在由偏移比特所規(guī)定的附近的行。例如,在有兩個偏移比特的情況下,可以規(guī)定特殊的虛擬地址可以在具體指定的行或者一三附近的行內(nèi)出現(xiàn)。例如,10可以說明在指定的行前的2,11可以說明在指定的行前的一行,00可以說明指定的行,OI可以說明在指定的行后的行。只寫-緩沖器沖突避免系統(tǒng)
在有好的存儲交錯系統(tǒng)和充分隨機的存儲訪問模式下,可以實現(xiàn)高速存儲系統(tǒng)而不需要任何額外的存儲庫。反之,可以使用寫-緩沖器來處理所述(希望的)較少的存儲庫沖突。圖19示出了由物理存儲1920構(gòu)成的存儲系統(tǒng)1900的例子,物理存儲1900由可以同時被訪問的不同存儲庫和存儲控制器1921構(gòu)成。存儲系統(tǒng)1900被設(shè)計成處理一個以上的同時存儲操作。在簡單的實施例中,存儲系統(tǒng)1900可以處理一個讀存儲操作和一個寫存儲操作。只要同時進行的讀和寫操作訪問的是不同的存儲庫,便沒有存儲庫沖突,可以同時進行讀和寫操作。當讀操作和寫操作試圖訪問在同一個存儲庫中的存儲位置(如由到地址100的寫和從地址104的讀所指的那樣)時,便會有存儲庫沖突,使得兩個操作中只有一個操作可以發(fā)生。由于所述讀操作可以僅通過訪問那一個特定的存儲位置來處理,則讀有優(yōu)先級,使得所述存儲控制器從地址104讀,并對所述讀請求作出回應(yīng)。所述寫操作,由于有存儲庫沖突,不能用物理存儲1920來處理,被放置在寫緩沖器1930中,如圖19所示。如果收到從地址100的存儲讀,而寫操作在寫緩沖區(qū)1930內(nèi),那么所述存儲控制器將用寫緩沖器1930中的數(shù)據(jù)響應(yīng)所述寫請求。在將寫操作放到寫緩沖器1930中的地址100之后的存儲周期,存儲控制器1921會試圖通過將數(shù)據(jù)從寫緩沖器1930移動到物理存儲1920中來完成寫操作。這可以在接下來的存儲周期完成,只要與寫操作的地址沒有存儲庫沖突。例如,如果在接下來的存儲周期,所述系統(tǒng)接收到從地址204的讀和到地址401的寫,那么從較早的到地址100的寫的數(shù)據(jù)可以與從地址204的讀和到地址401的寫同時進行。但是,如果所述讀操作或者寫操作訪問的是同一個存儲庫,那么所述寫操作數(shù)據(jù)將留在寫緩沖器1930中。注意,在存儲周期,寫操作可以添加到寫緩沖器1930和從寫緩沖器1930中去掉。例如,如果所述存儲系統(tǒng)已經(jīng)有了到寫緩沖器1930內(nèi)的地址100的寫操作,如圖19所示,然后接下來從地址400接收讀和到地址499進行寫,那么所述存儲系統(tǒng)將進行到寫緩沖器1930的讀和寫。具體而言,到地址499的寫操作將會被添加到寫緩沖器1930中(由于和從地址400的讀相沖突),到寫緩沖器1930中的地址100的寫操作將被從寫緩沖器1930中去掉,因為所述數(shù)據(jù)將被寫入物理地址100。另外,從寫緩沖器1930的多個寫操作可以在同一個存儲周期被寫入物理存儲1920中。例如,如果在前面的例子中,寫緩沖器1930還包括到地址205的寫,那么存儲控制器1921可以在進行從地址400的讀時,同時寫到地址100和地址205。在這樣一個帶有用于避免存儲沖突的寫緩沖器的存儲系統(tǒng)中,只要有足夠多的不同的存儲庫來減少存儲庫沖突,所述系統(tǒng)可以提供高速的性能,所述存儲庫交錯得很好,在不同的存儲庫之間散布存儲庫訪問,所述存儲訪問請求是足夠隨機的。但是,如果接收到一長系列到完全相同的存儲庫的讀和寫操作,寫緩沖器1930將最終被填滿,使得所述存儲系統(tǒng)最終需要暫?;蛘邷p慢存儲請求,以寫回一些(或者全部)緩沖的寫操作。為了降低這種情形的概率,可以用哈希機制來增加系統(tǒng)的隨機特性。具體而言,存儲控制器1921可以通過哈希機制傳遞虛擬或者物理地址,使所述地址隨機化,但是在所述物理存儲中的地址和位置之間仍然保持一對一的關(guān)系。通過這種方式,即使是接收到特殊模式的地址,所述哈希機制將使所述地址隨機化,從而降低造成重復(fù)的一系列存儲庫沖突的存儲訪問模式的概率。

具有較小的額外的存儲庫的存儲系統(tǒng)在圖6A和6B的虛擬存儲系統(tǒng)中,所述存儲系統(tǒng)具有一個額外的存儲庫(庫E),它和物理存儲620中的其它存儲庫大小相同。通過這種方式,如果有存儲庫沖突的話,在不同的存儲庫中總是有另一個可以被寫入的存儲位置。但是,如果有大量的存儲庫,那么可能不必要完全大小的額外的庫,因為只可能有很少的存儲庫沖突。圖20示出了虛擬存儲系統(tǒng)2000,其中,額外的存儲庫(庫E)給所述主存儲庫每兩行一個單行。只要沒有存儲庫沖突,那么完全不需要庫E。當存儲庫沖突的確發(fā)生時,從寫操作來的數(shù)據(jù)可以被放置在額外的存儲庫E中的一個行中。為了防止由于正在使用指定的額外的存儲庫行,接下來出現(xiàn)存儲庫沖突而且沒有空閑可用的位置這種狀況,虛擬存儲控制器2021會試圖將數(shù)據(jù)從庫E移動到它在主存儲區(qū)域2004中的原始位置。例如,如果存儲庫E的第一行正在存儲虛擬地址301的數(shù)據(jù),那么便接收到從地址204的讀和到地址002的寫(這全部在圖20中描述),那么虛擬存儲控制器2021會將與存儲庫E中的地址301相關(guān)聯(lián)的數(shù)據(jù)寫回到存儲庫D (其中地址301是原來有的),而同時進行從地址204的讀和到地址002的寫。為了另外加以的保護,可以增加寫緩沖器2030來處理由于存儲庫沖突且?guī)霦指定的行已經(jīng)被用了時,沒有地方立即寫入一些數(shù)據(jù)的情形。在有庫E的情況下,虛擬存儲控制器2021可以試圖將數(shù)據(jù)從寫緩沖器2030移到它在主存儲區(qū)域2004中的原始位置。在使用額外的存儲庫E的大小減少和增加寫緩沖器2030之間,由于存儲庫沖突而讓存儲系統(tǒng)2000必須停頓的概率可以做得非常小。在有前面只使用一個寫緩沖器的存儲系統(tǒng)的情況下,具有大小減少的額外的庫的存儲系統(tǒng)會受益于哈希機制的使用。哈希機制將使存儲訪問模式隨機化,使得遇到一系列重復(fù)的存儲庫沖突的概率降低。前面技術(shù)性的公開旨在進行說明,并不是限制。例如,上面描述的實施例(它的一個或多個方面)可以互相結(jié)合起來使用。在看到上文描述的情況下,其它實施例將是顯而易見的。因此,權(quán)利要求的范圍應(yīng)當參考所附權(quán)利要求以及這樣的權(quán)利要求等同范圍來確定。在所附的權(quán)利要求中,術(shù)語“包括”和“其中”用作各術(shù)語“包括”和“其中”的直白英語的等同物。同樣,在接下來的權(quán)利要求中,術(shù)語“包括”和“其中”是開放式的,也就是說,在權(quán)利要求中的這樣的術(shù)語之后羅列的那些之外的系統(tǒng)、裝置、器件、或者步驟,仍被視為落在本發(fā)明的范圍內(nèi)。而且,在接下來的權(quán)利要求中,術(shù)語“第一”、“第二”和“第三”等等,僅用來作為標示,不旨在給它們的對象造成數(shù)字上的要求。摘要是根據(jù)37C. F. R § I. 72 (b)提供的,要求它能讓讀者快速獲得技術(shù)公開的性質(zhì)。寫這個摘要理解成不會用來闡釋或者限制權(quán)利要求的范圍或者意思。另外,在上文詳細描述中,可以將各個特征組合在一起,使公開流水線化。這不應(yīng)當被解釋為未要求保護的所公開的特征是任何權(quán)利要求所必要的。而是創(chuàng)新性主題會位于特定公開的實施例的所有特征。因此,接下來的權(quán)利要求被包含在詳細描述中,每個權(quán)利要求作為一個獨立的實施例?!?br> 權(quán)利要求
1.一種處理數(shù)字存儲系統(tǒng)中的存儲訪問請求的方法,所述方法包括 接收第一存儲訪問請求,所述第一存儲訪問請求識別在虛擬存儲地址空間內(nèi)的第一虛擬存儲地址; 使用所述虛擬存儲地址作為到一個存儲映射表的索引,以獲得第一存儲庫標識符,用于識別物理存儲系統(tǒng)中當前存儲的與所述第一虛擬存儲地址相關(guān)聯(lián)的數(shù)據(jù)的存儲庫,所述物理存儲系統(tǒng)具有的物理地址空間大于所述虛擬存儲地址空間, 用包括所述存儲庫標識符的第一物理存儲地址和所述第一虛擬存儲地址的子集處理所述第一存儲訪問請求。
2.根據(jù)權(quán)利要求I所述的處理存儲訪問請求的方法,其中所述存儲映射表包括一組列,其數(shù)目等于在所述虛擬存儲地址空間內(nèi)的存儲庫數(shù)目加上用于防止存儲庫沖突的增加 的存儲庫的數(shù)目。
3.根據(jù)權(quán)利要求2所述的處理存儲訪問請求的方法,其中所述存儲映射表和所述存儲庫的行數(shù)相等。
4.根據(jù)權(quán)利要求2所述的處理存儲訪問請求的方法,其中所述存儲映射表中的每個條目存儲一個存儲庫標識符值。
5.根據(jù)權(quán)利要求I所述的處理存儲訪問請求的方法,其中所述第一物理存儲地址空間包括N個存儲庫,所述虛擬存儲地址空間占有大小為N-I個存儲庫的所述物理存儲地址空間的一個子集。
6.根據(jù)權(quán)利要求I所述的處理存儲訪問請求的方法,其中所述第一存儲訪問請求包括到所述物理存儲中的第一個庫的讀操作,所述方法還包括 同時接收和所述第一存儲訪問請求一起的第二存儲訪問請求,所述第二存儲訪問請求包括寫操作,所述第二存儲訪問請求識別在所述虛擬存儲地址空間內(nèi)的第二虛擬存儲地址; 如果當前與所述第二虛擬存儲地址相關(guān)聯(lián)的第二物理地址會與所述第一存儲訪問請求造成存儲庫沖突,寫到一個新的第二物理存儲地址;以及 更新所述存儲映射表,將所述新的第二物理存儲地址與所述第二虛擬存儲地址相關(guān)聯(lián)。
7.根據(jù)權(quán)利要求6的處理存儲訪問請求的方法,所述方法還包括 同時接收和所述第一存儲訪問請求和所述第二存儲訪問請求一起的第三存儲訪問請求,所述第三存儲訪問請求包括一個寫操作,所述第三存儲訪問請求識別所述虛擬存儲地址空間內(nèi)的第三虛擬存儲地址; 如果當前與所述第三虛擬存儲地址相關(guān)聯(lián)的第三物理地址會和所述第一存儲訪問請求或者和所述第二存儲訪問請求造成存儲庫沖突,那么寫到一個新的第三物理存儲地址;以及 更新所述存儲映射表,以將所述新的第三物理存儲地址與所述第三虛擬存儲地址相關(guān)聯(lián)。
全文摘要
本發(fā)明公開一種提供高速存儲操作的系統(tǒng)和方法。該技術(shù)利用存儲空間的虛擬化,將虛擬地址空間映射到不會出現(xiàn)存儲庫沖突的、較大的物理地址空間。所述較大的物理地址空間,通過將正在被寫入到存儲的數(shù)據(jù)的虛擬存儲地址移動到會消除存儲庫沖突的物理存儲中的一個不同的位置,避免出現(xiàn)存儲庫沖突。
文檔編號G06F9/34GK102870089SQ201080063971
公開日2013年1月9日 申請日期2010年12月15日 優(yōu)先權(quán)日2009年12月15日
發(fā)明者桑達·艾伊爾, 莊尚值 申請人:實錄系統(tǒng)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1