用于持久性指針管理的軟件轉(zhuǎn)換后備緩沖器的制造方法
【專利摘要】本發(fā)明提供了用于在運(yùn)行時執(zhí)行OID到VMA轉(zhuǎn)換的技術(shù)。向量寄存器用來實現(xiàn)“軟件TLB”,以執(zhí)行OID到VMA轉(zhuǎn)換。運(yùn)行時解除引用是利用一個或多個向量寄存器執(zhí)行的,以對照一組高速緩存的OID比較需要被解除引用的每個OID。當(dāng)高速緩存的OID匹配被解除引用的OID時,高速緩存的OID的VMA從高速緩存中檢索。緩沖區(qū)高速緩存項可以在軟件TLB存儲用于該項的條目的過程中被釘住。OID轉(zhuǎn)換信息的高速緩存可以是單或多層的,并且可以部分或完全地存儲在處理器中的寄存器中。當(dāng)存儲在寄存器中時,在寄存器需要用作其它目的時,轉(zhuǎn)換信息可以溢出寄存器,并且重新加載到寄存器中。
【專利說明】用于持久性指針管理的軟件轉(zhuǎn)換后備緩沖器
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及把標(biāo)識符轉(zhuǎn)換成虛擬存儲器地址。
【背景技術(shù)】
[0002]許多計算機(jī)程序把問題建模為相互關(guān)聯(lián)的對象的集合。在執(zhí)行過程中,這種程序?qū)υ谟嬎銠C(jī)系統(tǒng)的存儲器中存儲為數(shù)據(jù)結(jié)構(gòu)的對象執(zhí)行操作。對象可以具有許多屬性,包括代表與其它對象的關(guān)系的屬性。當(dāng)?shù)谝粚ο缶哂写砼c第二對象的關(guān)系的屬性時,該第一對象被稱為源對象,而第二對象被稱為目標(biāo)對象。
[0003]用來表示代表與目標(biāo)對象的關(guān)系的屬性的信息被稱為“引用”。對目標(biāo)對象的引用存儲在代表源對象的數(shù)據(jù)結(jié)構(gòu)中。對于許多應(yīng)用,處理對象時最常見的操作是基于源對象中所包含的對目標(biāo)對象的引用來定位目標(biāo)對象。這種操作被稱為弓丨用遍歷。
[0004]許多程序使用稱為“指針”的數(shù)據(jù)類型來引用目標(biāo)對象。指針指示對應(yīng)于目標(biāo)對象的數(shù)據(jù)結(jié)構(gòu)的存儲器位置。為了允許程序訪問比適合放在可用動態(tài)存儲器中的更多的對象,指針通常包含目標(biāo)對象的虛擬存儲器地址(VMA),而不是目標(biāo)對象所在的動態(tài)存儲器位置的實際物理地址。當(dāng)程序使用VMA作為引用的表示時,程序依賴于計算機(jī)操作系統(tǒng)的底層虛擬存儲器機(jī)制和用于查找目標(biāo)對象的物理存儲器地址的硬件。
[0005]當(dāng)對象在動態(tài)存儲器中時,對象的VMA通常用來表示對對象的引用,因為大部分計算機(jī)具有內(nèi)建的硬件查找機(jī)制和用于把VMA映射到物理存儲器地址的地址轉(zhuǎn)換表的高速存儲器。此外,操作系統(tǒng)通?;谔摂M存儲器訪問提供高效的存儲器高速緩存支持。通過采用內(nèi)建的地址轉(zhuǎn)換和存儲器高速緩存機(jī)制,使用VMA作為對目標(biāo)對象的引用導(dǎo)致非常高效的引用遍歷。
[0006]不幸的是,VMA和物理存儲器地址是動態(tài)分配的并且因此只在特定程序執(zhí)行期間有效。因此,在程序的一次執(zhí)行中用于目標(biāo)對象的VMA可能不同于同一程序的后續(xù)執(zhí)行中用于相同目標(biāo)對象的VMA。類似地,任何給定的目標(biāo)對象的VMA對兩個同時執(zhí)行的程序都不會相同。因此,在對象跨相同程序的不同執(zhí)行或者跨同時執(zhí)行的不同程序共享的環(huán)境中,VMA不能用作對目標(biāo)對象的引用的唯一表示。
[0007]在數(shù)據(jù)庫管理系統(tǒng)(DBMS)中,用于引用的信息必須跨所有程序執(zhí)行正確地識別對象。必須提供持久地識別對象的某種唯一途徑,這在本文中將被稱為“對象標(biāo)識符”(OID)。OID必須基于最低級的物理儲存地址。因而,與對象的VMA或物理存儲器地址相反,OID通常傳達(dá)對象位于盤上什么地方。因此,OID通常是基于數(shù)據(jù)塊ID的某種形式。例如,OID可以包括多部分的鍵,其指示文件編號(識別盤上儲存信息的文件)或其代理以及相關(guān)塊數(shù)(其對儲存數(shù)據(jù)的文件中的固定大小的塊的數(shù)量進(jìn)行計數(shù))。(文獻(xiàn)中對OID的其它使用有時候描述邏輯持久性唯一 ID,但是這必須最終經(jīng)索引或類似結(jié)構(gòu)被映射到物理儲存地址)。
[0008]不像VMA,對象的OID跨所有程序執(zhí)行唯一地識別對象。但是,如果OID用作對動態(tài)存儲器中所存儲的對象的引用,則每個遍歷操作都需要把OID映射到目標(biāo)對象的VMA,然后把VMA映射到目標(biāo)對象的物理存儲器地址。把OID映射到VMA的過程比把VMA映射到物理地址消耗顯著更多的處理時間。
[0009]已經(jīng)進(jìn)行了各種嘗試來實現(xiàn)關(guān)于VMA的引用遍歷的效率,同時仍然能夠在多個程序和同一程序的多次執(zhí)行之間共享對象。一種常見的方案法使用OID作為對目前還未加載到動態(tài)存儲器中的對象的引用,并且使用VMA作為對已經(jīng)加載到動態(tài)存儲器中的對象的引用。因此,當(dāng)對象在靜態(tài)存儲器和動態(tài)存儲器之間傳輸時,對對象的引用必須從一種形式轉(zhuǎn)換到另一種。在外部形式和內(nèi)部形式之間轉(zhuǎn)換引用的過程被稱為引用調(diào)和(swizzling)。
[0010]根據(jù)一種引用調(diào)和技術(shù),當(dāng)對象從盤加載到主存儲器中時,該對象中所包含的所有引用都轉(zhuǎn)換成VMA。由于那些引用的目標(biāo)對象可能不在主存儲器中,因此必須為目標(biāo)對象預(yù)先分配VMA,就好像它們已經(jīng)在主存儲器中一樣。
[0011]當(dāng)對不在主存儲器中的目標(biāo)對象的引用被遍歷時,DBMS把目標(biāo)對象加載到主存儲器中。為了檢測這種引用遍歷操作,通過以訪問保護(hù)模式設(shè)置所有預(yù)先分配的VMA,DBMS可以依賴于計算機(jī)操作系統(tǒng)。當(dāng)訪問保護(hù)的VMA被訪問時,計算機(jī)操作系統(tǒng)檢測存儲器訪問保護(hù)違規(guī)并且產(chǎn)生異常。DBMS通過把期望的目標(biāo)對象加載到主存儲器中并且把VMA變成允許訪問的模式來處理異常。
[0012]雖然保護(hù)模式的使用允許快速引用調(diào)和,但是它依賴于特殊的操作系統(tǒng)支持,諸如操作系統(tǒng)的存儲器訪問控制、檢測以及異常處理功能。不幸的是,這些支持因平臺而異,并且甚至可能在有些平臺中不可用。因此,這種方案對于預(yù)期要在多個平臺上使用的DBMS是不實用的。另外,因為已經(jīng)為所有對象預(yù)先分配了存儲器,所以存儲器不能重用于其它目的。因此,使用大量對象的應(yīng)用可能會耗盡存儲器。
[0013]根據(jù)備選方案,每個引用是包含判別字段和變量字段的數(shù)據(jù)結(jié)構(gòu)。判別字段中的值指示變量是目標(biāo)對象的對象標(biāo)識符還是VMA。主存儲器中的每個對象具有“代用品”,其是包含引用計數(shù)、目標(biāo)對象的對象標(biāo)識符以及目標(biāo)對象的VMA的數(shù)據(jù)結(jié)構(gòu)。當(dāng)DBMA把對象從盤加載到主存儲器中時,對象中所包含的每個引用的判別的值最初被設(shè)置成指示對應(yīng)的變量是目標(biāo)對象的對象標(biāo)識符。
[0014]當(dāng)應(yīng)用遍歷引用時,DBMS確定該引用的判別指示變量是對象標(biāo)識符還是VMA。如果變量是VMA,則VMA用來定位代用品。然后,存儲在代用品中的VMA用來定位目標(biāo)對象。
[0015]如果變量是對象標(biāo)識符,則DBMS查找代用品的VMA。如果代用品存在,則引用的變量設(shè)置成代用品的VMA。引用的判別被設(shè)置成指示變量是代用品的VMA。然后,代用品的引用計數(shù)遞增一。
[0016]如果代用品不存在,則目標(biāo)對象從盤加載到主存儲器中,為目標(biāo)對象分配代用品,代用品中的對象標(biāo)識符和VMA被設(shè)置成目標(biāo)對象的對象標(biāo)識符和VMA并且代用品的引用計數(shù)設(shè)置成零。然后,DBMS執(zhí)行設(shè)置變量、設(shè)置判別以及遞增引用計數(shù)的步驟,如上面所描述的那樣。
[0017]當(dāng)對象保存到盤時,DBMS遞減被對象中的引用指向的所有代用品的引用計數(shù)。因此,在任何給定的時間,代用品的引用計數(shù)都指示有多少引用目前指向該代用品。只有當(dāng)代用品的引用計數(shù)為零時,由該代用品指向的對象才可以交換到盤并且該代用品被釋放。
[0018]代用品技術(shù)的一個缺點是,只要具有對對象的遍歷引用的對象留在存儲器中,DBMS就不能把對象交換到盤,以釋放存儲器。因此,關(guān)于它可以如何釋放存儲器以加載新引用對象,DBMS會變得顯著受限。此外,遞減代用品的過程對把對象存儲到盤的過程添加了開銷。
[0019]美國專利N0.5,887,275描述了用于嘗試解決這些缺點的調(diào)和引用的技術(shù)。根據(jù)該技術(shù),如果對對象的引用之前已經(jīng)用來定位第一對象,則被稱為“銘牌”的數(shù)據(jù)結(jié)構(gòu)基于存儲在該引用中的第一 VMA而被定位,其中銘牌已經(jīng)與第一對象關(guān)聯(lián)。
[0020]一旦銘牌已定位,則存儲在該引用中的第一偽時間戳就與存儲在銘牌中的第二偽時間戳比較。如果第一偽時間戳匹配第二偽時間戳,則第一對象基于存儲在銘牌中的第二VMA而被定位。
[0021]如果第一偽時間戳不匹配第二偽時間戳,則第一對象基于存儲在引用中的標(biāo)識符而被定位。類似地,如果引用之前還沒有用來定位第一對象,則第一對象基于存儲在引用中的標(biāo)識符而被定位。
[0022]不幸的是,即使當(dāng)這種技術(shù)用于推遲或以別的方式減小與把OID轉(zhuǎn)換成VMA相關(guān)聯(lián)的開銷時,這種轉(zhuǎn)換操作也常常在調(diào)和時為了分離指針數(shù)據(jù)與實際數(shù)據(jù)而花費(fèi)顯著數(shù)量的CPU時間,消耗額外的存儲空間,和/或添加附加的等待時間。
[0023]本部分中所描述的方案是可尋求的方案,但不一定是之前已經(jīng)設(shè)想或?qū)で筮^的方案。因此,除非另外指出,否則不應(yīng)當(dāng)假設(shè)這部分中所描述的任何方法僅僅由于包括在這部分中而被限定為是現(xiàn)有技術(shù)。
【專利附圖】
【附圖說明】
[0024]在附圖中:
[0025]圖1是示出根據(jù)本發(fā)明實施例向量寄存器可以如何在OID到VMA的轉(zhuǎn)換操作中用作“軟件TLB”的框圖;
[0026]圖2A-2C說明了根據(jù)本發(fā)明實施例在第一時鐘周期中利用向量寄存器進(jìn)行的比較;
[0027]圖3A-3C說明了根據(jù)本發(fā)明實施例在第一時鐘周期中利用向量寄存器進(jìn)行的比較;
[0028]圖4A-4B說明了根據(jù)本發(fā)明實施例在第一時鐘周期中利用向量寄存器進(jìn)行的比較;
[0029]圖5是示出根據(jù)本發(fā)明實施例存儲釘銷(pin)信息的擴(kuò)展高速緩存的框圖;以及
[0030]圖6是說明其上可實施本發(fā)明實施例的計算機(jī)系統(tǒng)的框圖。
【具體實施方式】
[0031]在以下描述中,為了示范,闡述了許多具體的細(xì)節(jié),以便提供對本發(fā)明的透徹理解。但是,很顯然,本發(fā)明也可以在沒有這些具體細(xì)節(jié)的情況下實施。在另一些場合,眾所周知的結(jié)構(gòu)和設(shè)備以框圖形式示出,以避免不必要地模糊本發(fā)明。
[0032]一般概述
[0033]本文描述用于執(zhí)行OID到VMA轉(zhuǎn)換的技術(shù),其方式類似于如何利用微處理器(諸如Intel x86系列)中一般實施的轉(zhuǎn)換后備緩沖器(TLB)執(zhí)行VMA到物理存儲器地址轉(zhuǎn)換。但是,因為OID的大小超過了硬件TLB的容量,所以本文描述了使用向量寄存器來實現(xiàn)“軟件TLB”以執(zhí)行OID到VMA轉(zhuǎn)換的技術(shù)。
[0034]根據(jù)一實施例,因為OID不用VMA代替,所以與調(diào)和相關(guān)聯(lián)的開銷得以避免。相反,OID在運(yùn)行時根據(jù)需要解除引用。運(yùn)行時解除引用是利用一個或多個向量寄存器來比較需要解除引用的每個OID和一組高速緩存的OID來執(zhí)行的。當(dāng)高速緩存的OID匹配被解除引用的OID時,高速緩存的OID的VMA被從高速緩存取回。OID轉(zhuǎn)換信息的高速緩存可以是單或多層的,并且可以部分或完全地存儲在處理器中的寄存器中。當(dāng)存儲在寄存器中時,在寄存器需要用于其它目的時,轉(zhuǎn)換信息可以溢出寄存器,并且重新加載到寄存器中。
[0035]VMA到物理地址轉(zhuǎn)換
[0036]VMA到物理存儲器地址轉(zhuǎn)換通常由分層方案處理,其中第一層涉及使用“轉(zhuǎn)換后備緩沖器”(TLB)。典型的TLB使用固定數(shù)量的條目把虛擬地址映射到物理地址??梢杂卸鄬覶LB。例如,在一種常見的微體系架構(gòu)(Intel Core2Duo)中,第一層TLB有16個條目,第二層TLB有256個條目。如果要轉(zhuǎn)換的地址不在任何一層TLB中,則操作系統(tǒng)頁表被走遍(walk),這涉及等待多個存儲器訪問。當(dāng)頁表大時,多個存儲器訪問會是慢的。TLB通常利用稱為“內(nèi)容可尋址存儲器”或CAM的技術(shù)以硬件實施。
[0037]不幸的是,由于對TLB硬件的大小約束,使用硬件TLB執(zhí)行OID到VMA的轉(zhuǎn)換是不實用的。例如,甚至在64位處理器上,TLB通常也不支持使用全部64位用于地址,因為硬件把可以插入系統(tǒng)中的物理存儲器的量局限到遠(yuǎn)小于2~64字節(jié)。因此,即使在64位系統(tǒng)中,TLB也只可以設(shè)計成處理40位的地址。相反,OID被設(shè)計成尋址大得多的存儲空間。例如,OID的一種實現(xiàn)使用大到足以尋址2~79位(604462909807兆兆字節(jié))的0ID。
[0038]向量寄存器
[0039]許多處理器構(gòu)建有能夠并行地對多個字節(jié)執(zhí)行相同操作的寄存器。這種寄存器通常稱為“向量寄存器”。例如,處理器可以包括N個寄存器,每個寄存器為X字節(jié)。在典型的實現(xiàn)中,N可以是16,X可以是16、32或64。不同的值可以加載到向量寄存器中的N個寄存器的每一個當(dāng)中。在相同的時鐘周期期間,處理器可以對向量寄存器中的N個寄存器的每個當(dāng)中的X個字節(jié)并行地執(zhí)行相同的操作。
[0040]有些現(xiàn)有的處理器能夠在每個時鐘周期發(fā)布多達(dá)三個向量指令。向量指令集可以支持例如并行比較指令,其中寄存器中的所有字節(jié)同時與其它字節(jié)進(jìn)行比較。如下面將更詳細(xì)地描述的那樣,這種向量寄存器以及可以利用其執(zhí)行的并行向量操作可以用來實現(xiàn)用于執(zhí)行OID到VMA轉(zhuǎn)換的“軟件TLB ”。
[0041]利用向量寄存器的OID到VMA轉(zhuǎn)換
[0042]圖1是示出根據(jù)本發(fā)明實施例向量寄存器104可以如何在OID到VMA轉(zhuǎn)換操作過程中用作“軟件TLB”的框圖。為了說明,將假設(shè)OID是64位地址(并且因此太大以至于不適合傳統(tǒng)的硬件TLB)。還將假設(shè)向量寄存器104是16字節(jié)寬的,并且包括向量寄存器104的處理器能夠在每個時鐘周期發(fā)布三個比較指令。在這些情形下,向量寄存器104可以用來在每個周期執(zhí)行96字節(jié)的比較,這將允許在每個周期對六個64位的OID執(zhí)行比較操作。
[0043]雖然在本文中將提供特殊的OID和向量寄存器大小的例子,但是本文所述的技術(shù)不限于任何特定的OID大小寸或格式,也不限于向量寄存器中寄存器的任何特定數(shù)量或大小。向量寄存器中寄存器的數(shù)量越大,并且個體寄存器的大小越大,可以在任何給定時鐘周期中并行比較的OID的數(shù)量就越大。[0044]再次參考圖1,還示出了具有16個0ID/VMA對的高速緩存102。每個0ID/VMA對包括一個OID和一個VMA,其每個都對應(yīng)于相同的對象。具體而言,0ID/VMA對的VMA指示虛擬存儲器中對象的實例的位置,0ID/VMA對的OID指示同一對象的持久性存儲位置。此夕卜,每個0ID/VMA對的VMA和OID駐留在高速緩存102中的相同索引位置處。例如,VMAl和OIDl對應(yīng)于相同的對象,并且二者都駐留在高速緩存102中的索引位置I處。
[0045]在OID到VMA轉(zhuǎn)換操作過程中,來自高速緩存102的OID值加載到向量寄存器104中,并且與被解除引用的0ID( “目標(biāo)”0ID)進(jìn)行比較。例如,假設(shè)目標(biāo)OID是0IDX。為了確定持久地位于OIDX處的對象的VMA,來自高速緩存102的OID被加載到向量寄存器104中并且可以與OIDX進(jìn)行比較。
[0046]因為OID大于一字節(jié),所以高速緩存102中16個OID中的每個都不能地簡單地加載到向量寄存器104中的16字節(jié)之一中。相反,在一實施例中,來自高速緩存102的適合放在向量寄存器104中的那么多的OID被加載到向量寄存器104中。在本例中,OID是64位并且向量寄存器104是16字節(jié),因此在任何給定時刻,兩個OID適合放在向量寄存器104中。
[0047]因為一次有兩個OID適合放在向量寄存器104中,并且向量寄存器104所屬的處理器能夠每個時鐘周期執(zhí)行三個比較,所以在每個時鐘周期期間有來自高速緩存102的六個OID可以對照目標(biāo)OID進(jìn)行比較。例如,圖2A-2C說明了第一時鐘周期期間所作的比較。具體而言,圖2A說明在第一時鐘周期期間OIDl和0ID2對照OIDX進(jìn)行比較。圖2B說明仍然在第一時鐘周期期間0ID3和0ID4對照OIDX進(jìn)行比較。最后,圖2C說明仍然在第一時鐘周期期間0ID5和0ID6對照OIDX進(jìn)行比較。類似地,圖3A-3C說明在第二時鐘周期期間0ID7-0ID12對照OIDX進(jìn)行比較。圖4A-4B說明在第三時鐘周期期間0ID13-0ID16對照OIDX進(jìn)行比較。
[0048]如果高速緩存102中有任何OID匹配0IDX,則匹配OID的索引用來在高速緩存102中定位對應(yīng)于該匹配OID的對象的VMA。例如,如果0ID3匹配0IDX,則索引值3用來在高速緩存102中定位VMA3。然后,VMA3用來在易失性存儲器中定位對應(yīng)的對象。
[0049]本文所述的技術(shù)不限于使用虛擬存儲器地址在易失性存儲器中定位對象的任何特定方式。例如,傳統(tǒng)的硬件TLB可以用來把(從軟件TLB獲得的)VMA轉(zhuǎn)換成物理地址,然后該物理地址可以由處理器用來訪問物理存儲器中的對象。
[0050]得出索引值
[0051]在圖1所說明的實施例中,當(dāng)來自高速緩存102的OID匹配目標(biāo)OID時,匹配OID的索引值用來在高速緩存102中定位對應(yīng)的VMA。但是,取決于向量寄存器104如何實現(xiàn),利用向量寄存器104執(zhí)行的OID與OID的比較不直接產(chǎn)生匹配OID的索引值。
[0052]例如,在向量寄存器104的一種實現(xiàn)中,OID到OID的比較在OID匹配的每個字節(jié)中產(chǎn)生十六進(jìn)制值OxFF,在OID不匹配的每個字節(jié)中產(chǎn)生十六進(jìn)制值0x00。因而,與匹配目標(biāo)OID的OID的比較操作將產(chǎn)生8字節(jié)的OxFF。
[0053]各種附加指令可以用來從比較操作的結(jié)果得出匹配的索引值。例如,在一種處理器實現(xiàn)中(Intel SSE),提供了用于打包字節(jié)的指令(PACKSSDW,PACKSSWB),并且提供了用于把包含值OxFF的字節(jié)轉(zhuǎn)換成通用寄存器中的設(shè)置位的指令(PM0VMSKB)。利用這些指令,由每個OID到OID比較產(chǎn)生的8個字節(jié)可以壓縮成4個字節(jié),然后從4個字節(jié)壓縮成2個字節(jié),然后從2個字節(jié)壓縮成I個字節(jié)。一旦每個比較都由單個字節(jié)表示,那些字節(jié)的值就可以轉(zhuǎn)換成通用寄存器中的位。轉(zhuǎn)換通過16個高速緩存的OID的比較產(chǎn)生的結(jié)果的字節(jié)將產(chǎn)生通用寄存器中的16位的串,其中用于匹配的OID的位將是1,并且用于所有其它OID的位將是O。
[0054]為了從位數(shù)組獲得索引值,位數(shù)組被掃描,直到遇到第一個設(shè)置位。位數(shù)組中的第一個設(shè)置位的位置是用于查找高速緩存102中的對應(yīng)VMA的索引值。例如,如果0ID3匹配0IDX,則通過比較和壓縮操作產(chǎn)生的位數(shù)組將是“0010000000000000”。通過掃描該位數(shù)組,可以確定第一個設(shè)置位在位置3,因此3用作在高速緩存102中定位VMA3的索引。
[0055]在使用上述技術(shù)得出索引值的實施例中,OID到VMA映射操作可以如下執(zhí)行:
[0056].使用向量寄存器執(zhí)行高速緩存中的OID和目標(biāo)OID之間的比較
[0057].把8個字節(jié)的結(jié)果打包成4個字節(jié)的結(jié)果
[0058].把4個字節(jié)的結(jié)果打包成2個字節(jié)的結(jié)果
[0059].把2個字節(jié)的結(jié)果打包成I個字節(jié)的結(jié)果
[0060].把設(shè)置字節(jié)轉(zhuǎn)換成單個通用寄存器中對應(yīng)的位
[0061].掃描該通用寄存器,以找出第一個設(shè)置位
[0062].使用第一個設(shè)置位的位置作為在高速緩存中找出VMA的索引
[0063]利用傳統(tǒng)的硬件,這些步驟中除初始的OID對OID比較之外的每個步驟都可以在單個時鐘周期中執(zhí)行。因而,整個OID到VMA轉(zhuǎn)換會花費(fèi)7-10個時鐘周期,相對于與實際訪問有可能在較慢的高速緩存或主存儲器中的被引用數(shù)據(jù)相關(guān)聯(lián)的開銷,這顯著更低。
[0064]高速緩存未命中和替換技術(shù)
[0065]在圖1所說明的例子中,單層高速緩存用來實現(xiàn)用于執(zhí)行OID到VMA轉(zhuǎn)換的軟件TLB。但是,軟件TLB可以利用多層高速緩存實現(xiàn),其中,如果第一層高速緩存中沒有OID匹配目標(biāo)0ID,則第二層高速緩存中的OID對照目標(biāo)OID進(jìn)行比較。通常,第二和后續(xù)的高速緩存層比第一層高速緩存102更大,但訪問起來效率更低。例如,高速緩存102可以駐留在處理器上相對小的高速存儲器中,而第二層高速緩存可以駐留在處理器上或之外的較慢的高速緩存中或者在主存儲器中。
[0066]如果目標(biāo)OID不匹配軟件TLB中的任何0ID,則與目標(biāo)OID關(guān)聯(lián)的VMA通過其它方式諸如索引搜索而被確定。在確定其OID不駐留在高速緩存102中的對象的VMA后,用于那個對象的0ID/VMA組合可以被添加到高速緩存102,以提高涉及那個對象的后續(xù)解除引用操作的效率。如果高速緩存102被填滿,則目前駐留在高速緩存102中的0ID/VMA組合可以利用新的0ID/VMA組合代替。
[0067]多種替換技術(shù)中的任何一種都可以用來確定高速緩存102中哪個0ID/VMA組合要被新的0ID/VMA組合替換。例如,已經(jīng)駐留在高速緩存102中最長時間的0ID/VMA組合可以被新0ID/VMA組合替換。這可以通過以循環(huán)(round robin)方式替換高速緩存102中的條目來實現(xiàn)。作為替代,對0ID/VMA組合的訪問可以被跟蹤,并且訪問次數(shù)最少或者最近最少訪問的0ID/VMA組合可以被選擇來供替換。在備選實施例中,替換技術(shù)考慮多種因素,包括訪問的頻率、訪問的新舊程度以及在高速緩存102中的年齡。
[0068]高速緩存釘銷信息
[0069]本文所述的軟件TLB技術(shù)可以用在其中到持久性存儲器中的項的地址需要轉(zhuǎn)換成那些項在易失性存儲器中的實例的地址的任何語境中。軟件TLB可以使用的一個語境是數(shù)據(jù)庫環(huán)境,其中OID是持久存儲在數(shù)據(jù)庫中的項。在這種語境下,附加的益處可以通過除了 0ID/VMA組合之外還在高速緩存102中高速緩存信息來得到。
[0070]例如,圖5是示出根據(jù)本發(fā)明實施例的擴(kuò)展高速緩存502的框圖。除0ID/VMA組合之外,擴(kuò)展的高速緩存502還包含由數(shù)據(jù)庫系統(tǒng)用來管理對對應(yīng)對象的訪問的釘銷值。
[0071]數(shù)據(jù)庫通常維護(hù)持久性數(shù)據(jù)的存儲器高速緩存。常常被稱為“緩沖器高速緩存”的存儲器高速緩存保持來自DRAM中的持久性存儲介質(zhì)(例如,盤驅(qū)動器)的塊的拷貝,它比持久性儲存器訪問起來更快?!搬斾N”是有些數(shù)據(jù)庫服務(wù)器用來確保緩沖器高速緩存中的塊在其仍然在使用的時候不被頁溢出到緩沖器高速緩存之外的數(shù)據(jù)結(jié)構(gòu)。
[0072]根據(jù)圖5中所說明的實施例,當(dāng)目標(biāo)OID最初被解除引用時,(a)用于0ID/VMA組合的條目被添加到高速緩存502,并且(b)對應(yīng)于目標(biāo)OID的頁面在緩沖器高速緩存中被釘住。另外,添加到高速緩存502的條目不僅包括0ID/VMA組合,還包括對應(yīng)的釘銷。
[0073]例如,假設(shè)高速緩存502最初不包含用于0ID3的條目。響應(yīng)于對0ID3解除引用,對應(yīng)于0ID3的頁面被釘在緩沖器高速緩存中,并且包含0ID3、VMA3和PIN3的條目被添加到高速緩存502。
[0074]根據(jù)一種實施例,釘銷被傳遞到使解除引用操作將被執(zhí)行的過程。當(dāng)那個過程利用被解除引用的OID指向的對象進(jìn)行時,該過程把這個釘銷傳遞到“釋放”函數(shù),以指示該過程不再使用那個對象。只要有任何過程在緩沖器高速緩存中保持對對象的釘銷,該對象就不被認(rèn)為是要替換的候選。當(dāng)所有過程都已經(jīng)釋放對一個對象的釘銷時,該對象變成緩沖器高速緩存中要替換的候選。
[0075]根據(jù)另一實施例,對緩沖器高速緩存中的每個只讀快照頁面維持釘銷的時間與高速緩存502中用于只讀快照頁面的0ID/VMA組合的時間一樣長。響應(yīng)于在高速緩存502中0ID/VMA組合被用于更近使用的0ID/VMA組合的條目替換,對對應(yīng)的只讀快照頁面的釘銷被釋放。
[0076]寄存器溢出
[0077]在程序的編譯過程中,各種情形可能造成編譯器生成把寄存器的內(nèi)容溢出到其它存儲器諸如處理器堆棧的代碼。例如,C編譯器通常在處理器堆棧上為函數(shù)的局部變量分配空間,該堆棧通常存儲在處理器的主存儲器中。C編譯器通過在寄存器中存儲這些變量的值的另一個拷貝來優(yōu)化對它們的訪問。不幸的是,函數(shù)使用的變量個數(shù)可能超過可用于高速緩存那些變量的拷貝的寄存器的個數(shù)。例如,假設(shè)函數(shù)有四個局部變量,并且處理器只有用于同時存儲這四個變量中的兩個的拷貝的寄存器空間。在這種情形下,編譯器最初會在寄存器中存儲函數(shù)所使用的前兩個變量的拷貝。當(dāng)另兩個變量中任何一個需要使用時,編譯器可以生成使前兩個變量中一個“寄存器溢出”的代碼。
[0078]具體而言,當(dāng)所有寄存器都被使用并且編譯器需要新的寄存器供特定變量使用時,存儲代表另一個變量的數(shù)據(jù)的現(xiàn)有寄存器經(jīng)寄存器溢出而被重用,在這個過程中,該寄存器的數(shù)據(jù)(可能已經(jīng)被更新)利用用于該變量的引用值寫回到堆棧中。由編譯器實現(xiàn)的溢出策略通常確定目前存儲在寄存器中的哪些變量應(yīng)當(dāng)溢出,以便為新的變量騰出空間。
[0079]一般而言,編譯器設(shè)計成具有嘗試在寄存器中保持最有用信息的溢出策略。但是,最有用的信息依賴于編譯器為其生成代碼的程序部分。例如,如果特定變量在程序的循環(huán)中被訪問,則當(dāng)編譯用于那個循環(huán)的代碼時,編譯器可以生成防止那個特定變量從寄存器溢出的代碼。但是,在用于執(zhí)行那個循環(huán)的代碼之外,相同變量可能是不需要的。因此,在編譯用于該循環(huán)的代碼之后,編譯器可以生成用于把那個變量溢出到程序堆棧上的代碼,以便為其它變量騰出空間。
[0080]如下文中將更詳細(xì)描述的那樣,由OID到VMA的轉(zhuǎn)換產(chǎn)生的VMA可以以與局部變量相同的方式存儲在寄存器中,以避免每次引用特定對象時都需要執(zhí)行OID到VMA轉(zhuǎn)換。在將VMA儲存在寄存器中的實施例中,編譯器的寄存器溢出過程可以被重用,以便智能地從寄存器溢出由STLB轉(zhuǎn)換產(chǎn)生的VMA并且將其重新加載到寄存器中。
[0081]在寄存器中存儲虛擬存儲器地址
[0082]在一實施例中,一旦利用向量寄存器104執(zhí)行了 OID到VMA轉(zhuǎn)換操作,所得VMA就存儲在處理器中的通用寄存器中。在在寄存器中存儲VMA之后,對對應(yīng)對象的后續(xù)訪問可以直接使用該寄存器中的VMA,而不是每次都使用軟件TLB執(zhí)行OID到VMA轉(zhuǎn)換。在這種實施例中,解除引用操作是按階段執(zhí)行的,其中第一階段涉及確定VMA是否已經(jīng)在寄存器中。如果VMA不在寄存器中,則執(zhí)行第二階段,其中確定VMA是否已經(jīng)溢出寄存器但仍然可用。如果VMA已經(jīng)溢出寄存器,則VMA可以被重新加載和使用。
[0083]如果VMA既不在寄存器中也不可用于重新加載到寄存器中,則軟件TLB用來確定用于目標(biāo)OID的0ID/VMA條目是否被高速緩存。如果沒有用于目標(biāo)OID的0ID/VMA條目被高速緩存,則其它性能不太高的手段被用來確定用于目標(biāo)OID的VMA。
[0084]如以上所提到的,會出現(xiàn)用來存儲VMA的寄存器需要用作其它用途的情形,諸如存儲被調(diào)用的函數(shù)的變量。為了給被調(diào)用的函數(shù)的變量騰出空間,編譯器可以配置為,以編譯器從寄存器溢出變量以便給其它變量騰出空間相同的方式,在可能重寫寄存器的函數(shù)調(diào)用之前溢出寄存器中的VMA。然后,在從那個函數(shù)返回后,VMA可以重新加載到寄存器中。
[0085]在對其VMA已經(jīng)存儲在寄存器中的對象進(jìn)行引用的情況下,VMA可以直接使用,而不造成利用軟件TLB執(zhí)行OID到VMA轉(zhuǎn)換的開銷。例如,在向量寄存器104已經(jīng)用來確定0ID3映射到VMA3之后,VMA3可以存儲在寄存器中。只要VMA3留在寄存器中,VMA3就可以直接從寄存器獲得,以處理對VMA3的后續(xù)引用。直接從寄存器獲得VMA3比利用軟件TLB把0ID3轉(zhuǎn)換成VMA3快得多。但是,沒有足夠的寄存器空間來存儲所有的OID到VMA轉(zhuǎn)換。因此,在寄存器中,最近最少訪問或者訪問次數(shù)最少的OID的VMA被溢出,以便為更近或訪問次數(shù)更多的OID的VMA騰出空間。
[0086]處理器支持
[0087]雖然本文所述的技術(shù)可以利用提供向量寄存器的傳統(tǒng)處理器來實現(xiàn),但是處理器可以被修改,以利用軟件TLB進(jìn)一步提高OID到VMA轉(zhuǎn)換的效率。例如,處理器可以設(shè)計成與常規(guī)處理器當(dāng)前所需的相比,支持以更少的時鐘周期執(zhí)行OID到VMA轉(zhuǎn)換操作。在一實施例中,處理器可以設(shè)計成具有包括專門用于執(zhí)行OID到VMA轉(zhuǎn)換的指令的指令集合。根據(jù)用來實現(xiàn)指令的硬件,OID到VMA操作可以減小到單個時鐘周期。此外,處理器可以設(shè)計成具有專用于和/或?qū)iT設(shè)計成用于執(zhí)行OID到VMA轉(zhuǎn)換操作所需的操作的向量寄存器。
[0088]硬件概述
[0089]根據(jù)一實施例,本文所述的技術(shù)是由一個或多個專用計算設(shè)備實現(xiàn)的。專用計算設(shè)備可以硬連線為執(zhí)行所述技術(shù),或者可以包括持久性編程為執(zhí)行所述技術(shù)的諸如一個或多個專用集成電路(ASIC)或現(xiàn)場可編程門陣列(FPGA)的數(shù)字電子設(shè)備,或者可以包括按照固件、存儲器、其它儲存器或者其組合中的程序指令編程為執(zhí)行所述技術(shù)的一個或多個通用硬件處理器。這種專用計算設(shè)備還可以結(jié)合具有實現(xiàn)所述技術(shù)的定制編程的定制硬連線邏輯、ASIC或FPGA。專用計算設(shè)備可以是臺式計算機(jī)系統(tǒng)、便攜式計算機(jī)系統(tǒng)、手持式設(shè)備、聯(lián)網(wǎng)設(shè)備或者為了實現(xiàn)所述技術(shù)而結(jié)合硬連線和/或程序邏輯器的任何其它設(shè)備。
[0090]例如,圖6是說明其上可實現(xiàn)本發(fā)明實施例的計算機(jī)系統(tǒng)600的框圖。計算機(jī)系統(tǒng)600包括用于傳送信息的總線602或者其它通信機(jī)構(gòu),以及與總線602耦合的、用于處理信息的硬件處理器604。硬件處理器604可以是例如通用微處理器。
[0091]計算機(jī)系統(tǒng)600還包括耦合到總線602的用于存儲信息和要由處理器604執(zhí)行的指令的主存儲器,諸如隨機(jī)存取存儲器(RAM)或者其它動態(tài)存儲設(shè)備。主存儲器606還可以用于在要由處理器604執(zhí)行的指令的執(zhí)行過程中存儲臨時變量或其它中間信息。當(dāng)存儲在處理器604可訪問的存儲介質(zhì)中時,這種指令使計算機(jī)系統(tǒng)600成為定制成執(zhí)行指令中所規(guī)定的操作的專用機(jī)器。
[0092]計算機(jī)系統(tǒng)600還包括耦合到總線602的、用于存儲用于處理器604的靜態(tài)信息和指令的只讀存儲器(ROM) 608或者其它靜態(tài)存儲設(shè)備。存儲設(shè)備610,諸如磁盤或光盤,被提供并耦合到總線602,用于存儲信息和指令。
[0093]計算機(jī)系統(tǒng)600可以經(jīng)總線602耦合到顯示器612,諸如陰極射線管(CRT),用于向計算機(jī)用戶顯示信息。包括字母數(shù)字和其它鍵的輸入設(shè)備614耦合到總線602,用于向處理器604傳送信息和命令選擇。另一種類型的用戶輸入設(shè)備是光標(biāo)控制器616,諸如鼠標(biāo)、軌跡球或者光標(biāo)方向鍵,用于向處理器604傳送方向信息和命令選擇并且用于控制顯示器612上的光標(biāo)運(yùn)動。這種輸入設(shè)備通常具有兩個軸中的兩個自由度,第一個軸(例如,X)和第二個軸(例如,y),這允許設(shè)備在平面中規(guī)定位置。
[0094]計算機(jī)系統(tǒng)600可以利用定制的硬連線邏輯器、一個或多個ASIC或FPGA、固件和/或程序邏輯器實現(xiàn)本文所述的技術(shù),這些與計算機(jī)系統(tǒng)系統(tǒng)結(jié)合,使計算機(jī)系統(tǒng)500或者編程計算機(jī)系統(tǒng)600成為專用機(jī)器。根據(jù)一種實施例,響應(yīng)于處理器604執(zhí)行主存儲器606中所包含的一條或多條指令的一個或多個序列,本文所述的技術(shù)由計算機(jī)系統(tǒng)600執(zhí)行。這種指令可以從另一個存儲介質(zhì),諸如存儲設(shè)備610,讀到主存儲器606中。主存儲器606中所包含的指令序列的執(zhí)行使處理器604執(zhí)行本文所述的步驟。在備選實施例中,硬連線的電路系統(tǒng)可以代替軟件指令或者與之結(jié)合使用。
[0095]如在本文中所使用的,術(shù)語“存儲介質(zhì)”指存儲使機(jī)器以特殊方式操作的數(shù)據(jù)和/或指令的任何介質(zhì)。這種存儲介質(zhì)可以包括非易失性介質(zhì)和/或易失性介質(zhì)。非易失性介質(zhì)包括,例如,光或磁盤,諸如存儲設(shè)備610。易失性介質(zhì)包括動態(tài)存儲器,諸如主存儲器606。存儲介質(zhì)的常見形式包括,例如,軟盤、柔性盤、硬盤、固態(tài)驅(qū)動器、磁帶、或者任何其它磁性數(shù)據(jù)存儲介質(zhì),CD-ROM、任何其它光學(xué)數(shù)據(jù)存儲介質(zhì)、任何具有孔模式的物理介質(zhì)、RAM、PROM及EPROM、FLASH-EPROM、NVRAM、任何其它存儲器芯片或磁帶盒。
[0096]存儲介質(zhì)與傳輸介質(zhì)不同但是可以與其結(jié)合使用。傳輸介質(zhì)參與在存儲介質(zhì)之間傳輸信息。例如,傳輸介質(zhì)包括同軸電纜、銅線和光纖,包括包括總線602的電線。傳輸介質(zhì)還可以采取聲波或光波的形式,諸如在無線電波和紅外線數(shù)據(jù)通信過程中生成的那些波。
[0097]各種形式的介質(zhì)可以在把一個或多個指令的一個或多個序列攜帶到處理器604以供執(zhí)行的時候涉入其中。例如,指令可以最初在磁盤或遠(yuǎn)端計算機(jī)的固態(tài)驅(qū)動器上攜帶。遠(yuǎn)端計算機(jī)可以把指令加載到其動態(tài)存儲器中并且利用調(diào)制解調(diào)器經(jīng)電話線發(fā)送指令。計算機(jī)系統(tǒng)600本地的調(diào)制解調(diào)器可以在電話線上接收數(shù)據(jù)并且使用紅外線發(fā)送器把數(shù)據(jù)轉(zhuǎn)換成紅外線信號。紅外線探測器可以接收在紅外線信號中攜帶的數(shù)據(jù)并且合適的電路系統(tǒng)可以把數(shù)據(jù)放到總線602上??偩€602把數(shù)據(jù)攜帶到主存儲器606,處理器604從其檢索并執(zhí)行指令。在被處理器604執(zhí)行之前或之后,主存儲器606接收到的指令可以可選地存儲在存儲設(shè)備610上。
[0098]計算機(jī)系統(tǒng)600還包括耦合到總線602的通信接口 618。通信接口 618提供耦合到網(wǎng)絡(luò)鏈路620的雙向數(shù)據(jù)通信,其中網(wǎng)絡(luò)鏈路620連接到本地網(wǎng)絡(luò)622。例如,通信接口618可以是綜合業(yè)務(wù)數(shù)字網(wǎng)絡(luò)(ISDN)卡、電纜調(diào)制解調(diào)器、衛(wèi)星調(diào)制解調(diào)器,或者向?qū)?yīng)類型的電話線路提供數(shù)據(jù)通信連接的調(diào)制解調(diào)器。作為另一個例子,通信接口 618可以是向兼容的LAN提供數(shù)據(jù)通信連接的局域網(wǎng)(LAN)卡。無線鏈路也可以實現(xiàn)。在任何這種實現(xiàn)中,通信接口 618發(fā)送并接收攜帶代表各種類型信息的數(shù)字?jǐn)?shù)據(jù)流的電、電磁或光信號。
[0099]網(wǎng)絡(luò)鏈路620通常通過一個或多個網(wǎng)絡(luò)向其它數(shù)據(jù)設(shè)備提供數(shù)據(jù)通信。例如,網(wǎng)絡(luò)鏈路620可以通過局域網(wǎng)622向主機(jī)計算機(jī)624或者向由互聯(lián)網(wǎng)服務(wù)提供商(ISP) 626運(yùn)營的數(shù)據(jù)設(shè)備提供鏈接。ISP626又通過全球范圍的分組數(shù)據(jù)通信網(wǎng)絡(luò),現(xiàn)在通常稱為“互聯(lián)網(wǎng)”628,提供數(shù)據(jù)通信服務(wù)。局部網(wǎng)622和互聯(lián)網(wǎng)628都使用攜帶數(shù)字?jǐn)?shù)據(jù)流的電、電磁或光信號。通過各種網(wǎng)絡(luò)的信號和網(wǎng)絡(luò)鏈路620上并且通過通信接口 618的信號是傳輸介質(zhì)的示例形式,其中通信接口把數(shù)字?jǐn)?shù)據(jù)攜帶到計算機(jī)系統(tǒng)600并且從其攜帶數(shù)字?jǐn)?shù)據(jù)。
[0100]計算機(jī)系統(tǒng)600可以通過網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路620和通信接口 618發(fā)送消息和接收數(shù)據(jù),包括程序代碼。在互聯(lián)網(wǎng)例子中,服務(wù)器630可以通過互聯(lián)網(wǎng)628、ISP626、局部網(wǎng)622和通信接口 618發(fā)送所請求的用于應(yīng)用程序的代碼。
[0101]所接收到的代碼可以由處理器604在接收到的時候執(zhí)行,和/或存儲在存儲設(shè)備610或其它非易失性儲存器中,用于以后執(zhí)行。
[0102]在以上說明書中,已經(jīng)參考眾多具體細(xì)節(jié)描述了本發(fā)明的實施例,對于不同的實現(xiàn),這些細(xì)節(jié)會有所變化。因此,說明書和附圖要在說明性而不是約束性的意義上考慮。本發(fā)明范圍的唯一和排它指示,以及本 申請人:預(yù)期要作為本發(fā)明范圍的內(nèi)容,是以權(quán)利要求發(fā)布的具體形式從本申請發(fā)布的權(quán)利要求集合的文字及其等效范圍,包括任何后續(xù)的修正。應(yīng)當(dāng)指出,對各種實施例的修改和變化是預(yù)期的。修改可以基于,例如,不同期望的或所需的操作特性。變化可以包括所要求保護(hù)的特征的組合。
【權(quán)利要求】
1.一種用于對目標(biāo)持久性位置標(biāo)識符解除引用的方法,該方法包括: 維持轉(zhuǎn)換信息的高速緩存; 其中,所述轉(zhuǎn)換信息把多個高速緩存的持久性位置標(biāo)識符中的每一個與多個虛擬存儲器地址中的一個相關(guān)聯(lián); 其中,所述多個高速緩存的持久性位置標(biāo)識符中的每一個指示對應(yīng)的項存儲在持久性儲存器中的什么地方; 其中,所述多個虛擬存儲器地址中的每一個指示所述對應(yīng)的項的實例存儲在虛擬存儲器中的什么地方; 利用向量寄存器并行地執(zhí)行多個比較; 其中,所述多個比較中的每個比較都將所述目標(biāo)持久性位置標(biāo)識符與所述多個高速緩存的持久性位置標(biāo)識符中的一個進(jìn)行比較; 響應(yīng)于所述多個比較中的一個比較得到所述目標(biāo)持久性位置標(biāo)識符與所述多個高速緩存的持久性位置標(biāo)識符中的特定的持久性位置標(biāo)識符之間的匹配,利用與所述特定的持久性位置標(biāo)識符相關(guān)聯(lián)的虛擬存儲器地址來訪問與所述目標(biāo)持久性位置標(biāo)識符相關(guān)聯(lián)的項的實例; 其中,所述方法是由一個或多個計算設(shè)備執(zhí)行的。
2.如權(quán)利要求1所述的方法,其中: 所述向量寄存器包括多個固定大小的寄存器;且 當(dāng)每個持久性位置標(biāo)識符與所述目標(biāo)持久性位置標(biāo)識符比較時,所述固定大小的寄存器中的兩個或更多個被用來存儲所述每個持久性位置標(biāo)識符。
3.如權(quán)利要求1所述的方法,還包括壓縮所述多個比較的結(jié)果,直到每個比較操作的結(jié)果由位數(shù)組中的單個位表示。
4.如權(quán)利要求3所述的方法,還包括: 掃描所述位數(shù)組,以確定數(shù)組內(nèi)指示匹配的特定位的位置;以及利用所述特定位的位置作為到包含所述多個虛擬存儲器地址的數(shù)組的索引,來定位與所述特定的持久性位置標(biāo)識符相關(guān)聯(lián)的虛擬存儲器地址。
5.如權(quán)利要求1所述的方法,其中: 所述向量寄存器沒有大到足以同時存儲所述多個高速緩存的持久性位置標(biāo)識符中的全部; 所述多個比較將所述目標(biāo)持久性位置標(biāo)識符與所述多個高速緩存的持久性位置標(biāo)識符的第一子集進(jìn)行比較;且 所述方法還包括使用所述向量寄存器來并行地執(zhí)行第二多個比較,其中所述第二多個比較將所述目標(biāo)持久性位置標(biāo)識符與所述多個高速緩存的持久性位置標(biāo)識符的第二子集進(jìn)行比較。
6.如權(quán)利要求1所述的方法,其中: 維持轉(zhuǎn)換信息的高速緩存包括在與相同的索引值對應(yīng)的位置處存儲: a)所述多個高速緩存的持久性位置標(biāo)識符中的每個高速緩存的持久性位置標(biāo)識符,以及 b)與所述每個高速緩存的持久性位置標(biāo)識符相關(guān)聯(lián)的虛擬存儲器地址。
7.如權(quán)利要求6所述的方法,其中: 用于所述多個高速緩存的持久性位置標(biāo)識符的條目存儲在第一高速緩存中; 所述方法還包括在第二高速緩存中釘住與給定的持久性位置標(biāo)識符對應(yīng)的項與用于所述給定的持久性位置標(biāo)識符的條目在所述第一高速緩存中一樣長的時間。
8.如權(quán)利要求1所述的方法,其中: 所述目標(biāo)持久性位置標(biāo)識符是用于特定的項的; 解除對所述目標(biāo)持久性位置標(biāo)識符的引用是由特定過程請求的; 對所述特定的項的釘銷被存儲在與所述目標(biāo)持久性位置標(biāo)識符對應(yīng)的高速緩存條目中;且 所述特定過程把所述釘銷傳遞到釋放函數(shù)以指示該特定過程不再使用所述特定的項。
9.如權(quán)利要求1所述的方法,其中: 所述特定的持久性位置標(biāo)識符是用于特定的頁面的; 維持所述轉(zhuǎn)換信息的高速緩存包括在高速緩存中存儲把所述多個高速緩存的持久性位置標(biāo)識符與所述 多個虛擬存儲器地址相關(guān)聯(lián)的條目; 所述方法還包括: 維持對所述特定的頁面的只讀快照的釘銷與用于所述特定的持久性位置標(biāo)識符的條目在所述高速緩存中一樣長的時間;以及 響應(yīng)于用于所述特定的持久性位置標(biāo)識符的條目在所述高速緩存中被替換,對所述特定的頁面的只讀快照解除釘銷。
10.如權(quán)利要求1所述的方法,還包括: 在使用所述向量寄存器來執(zhí)行所述多個比較之前,確定所述目標(biāo)持久性位置標(biāo)識符的轉(zhuǎn)換不在寄存器中;以及 其中,使用所述向量寄存器來執(zhí)行所述多個比較的步驟是響應(yīng)于確定所述目標(biāo)持久性位置標(biāo)識符不在所述寄存器中而執(zhí)行的。
11.如權(quán)利要求10所述的方法,其中,維持所述轉(zhuǎn)換信息的高速緩存包括在寄存器中存儲用于一個或多個持久性位置標(biāo)識符的轉(zhuǎn)換信息,以及將編譯器配置為: 響應(yīng)于使用所述寄存器用于另一目的,將所述轉(zhuǎn)換信息溢出到高速緩存中;以及 在所述寄存器已經(jīng)用于該另一目的之后,把所述轉(zhuǎn)換信息重新加載到所述寄存器中。
12.—種或多種非暫時性存儲介質(zhì),其存儲有指令,所述指令在由一個或多個計算設(shè)備執(zhí)行時導(dǎo)致如權(quán)利要求1-11中的任何一項所述的方法得以執(zhí)行。
13.一種裝置,包括一個或多個處理器和儲存器,該裝置被配置為執(zhí)行如權(quán)利要求1-11中的任何一項所述的方法。
【文檔編號】G06F12/02GK103959257SQ201280059780
【公開日】2014年7月30日 申請日期:2012年10月23日 優(yōu)先權(quán)日:2011年10月27日
【發(fā)明者】E·塞德拉, A·奈瑪特 申請人:甲骨文國際公司