背景技術(shù):
在計算機(jī)操作系統(tǒng)中,請求分頁(相對于預(yù)期分頁)是一種虛擬存儲器管理的方法。在使用請求分頁的系統(tǒng)中,僅僅當(dāng)執(zhí)行的進(jìn)程嘗試訪問磁盤頁面,并且該頁面不存在存儲器中時(即,如果發(fā)生頁面錯誤/未命中),操作系統(tǒng)才將該頁面復(fù)制到物理內(nèi)存。從輔助存儲器獲取由該進(jìn)程請求的頁面,并加載到主存儲器上。通過加載執(zhí)行的進(jìn)程所請求的頁面,在程序啟動時,由于從輔助存儲器訪問更少的信息,并將更少的信息帶入主存儲器,因此發(fā)生更少的加載時延。此外,由于與輔助存儲器相比,主存儲器更昂貴,因此該技術(shù)減少了所需要的主存儲器的量,其減少了例如智能電話的組件成本。
在輔助存儲器中存儲的頁面可以具有某種大小,從輔助存儲器請求頁面意味著向主存儲器發(fā)送這種某種大小的頁面。這種傳輸需要使用諸如數(shù)據(jù)總線帶寬和功率之類的資源。為了減少這些資源的使用,可以在將包括整個壓縮塊的頁面復(fù)制到主存儲器之前,對其進(jìn)行壓縮。該壓縮減小了頁面的大小,因此減少了將該壓縮的頁面加載到存儲器所需的資源。
但是,在主存儲器處接收的每一個頁面的解壓縮時間會產(chǎn)生性能瓶頸。與頁面能夠被解壓縮并且該頁面中的指令或數(shù)據(jù)能夠被使用相比,頁面可以更快速地被主存儲器接收。解壓縮工作中的一些是對于包含有將不會被使用的代碼或數(shù)據(jù)的頁面來完成的,這進(jìn)一步延遲了其它指令和數(shù)據(jù)的使用。
此外,高效的壓縮算法通常使用回溯(lookback(s)),其允許使用先前壓縮的數(shù)據(jù)的模式來更高效地對剩余的數(shù)據(jù)進(jìn)行壓縮和解壓縮。但是,壓縮算法對數(shù)據(jù)的塊進(jìn)行獨立地壓縮。隨著塊大小越來越小,存在著更少的回溯機(jī)會,因此壓縮比劣化。
技術(shù)實現(xiàn)要素:
各個方面的方法和裝置提供了用于在計算設(shè)備上執(zhí)行壓縮頁面的解壓縮的電路和方法。一個方面方法可以包括:確定該壓縮頁面中包含有存儲器訪問請求中所請求的代碼指令的第一解壓塊;使用異常代碼來替換該壓縮頁面中的第二解壓塊;以該壓縮頁面的第一端為起始,對該壓縮頁面進(jìn)行解壓縮;以及響應(yīng)于完成第一解壓塊的解壓縮,終止該壓縮頁面的解壓縮。
此外,一個方面方法還可以包括:構(gòu)建所述壓縮頁面的與解壓縮信息有關(guān)的壓縮信息的模式的本地字典,該解壓縮信息源自于對該壓縮頁面進(jìn)行解壓縮;以及使用該本地字典,對該壓縮頁面的壓縮信息進(jìn)行解壓縮。
在一個方面,以所述壓縮頁面的第一端為起始,對該壓縮頁面進(jìn)行解壓縮可以包括:對第一壓縮塊進(jìn)行解壓縮。
此外,一個方面方法還可以包括:確定所述壓縮頁面中的多個解壓塊的解壓塊邊界;以及生成與所述壓縮頁面相關(guān)聯(lián)的解壓塊邊界元數(shù)據(jù),其中,該解壓塊邊界元數(shù)據(jù)指示針對所述多個解壓塊中的每一個解壓塊的解壓塊邊界。
此外,一個方面方法還可以包括:在終止所述壓縮頁面的解壓縮之后,執(zhí)行所述代碼指令;以及在終止所述壓縮頁面的解壓縮之后,對第二解壓塊進(jìn)行解壓縮。
在一個方面,在終止所述壓縮頁面的解壓縮之后,對第二解壓塊進(jìn)行解壓縮可以包括:在執(zhí)行所述代碼指令之后,對第二解壓塊進(jìn)行解壓縮。
在一個方面,在終止所述壓縮頁面的解壓縮之后對第二解壓塊進(jìn)行解壓縮,以及在終止所述壓縮頁面的解壓縮之后執(zhí)行所述代碼指令可以包括:以彼此之間是時間切片式地來執(zhí)行所述代碼指令和對所述第二解壓塊進(jìn)行解壓縮。
此外,一個方面方法還可以包括:將執(zhí)行所述代碼指令調(diào)度到第一處理器內(nèi)核上;將對第二解壓塊進(jìn)行解壓縮調(diào)度到第二處理器內(nèi)核上;以及將執(zhí)行所述代碼指令和對所述第二解壓塊進(jìn)行解壓縮調(diào)度為是并行地執(zhí)行的。
一個方面包括一種計算設(shè)備,該計算設(shè)備具有處理器、通信地連接到該處理器并且被配置為存儲代碼指令的存儲器設(shè)備、以及通信地連接到該處理器和存儲器設(shè)備并被配置為執(zhí)行上面所描述的方面方法中的一個或多個的操作的解壓縮引擎。
一個方面包括一種非臨時性處理器可讀介質(zhì),其上存儲有處理器可執(zhí)行軟件指令,以使處理器執(zhí)行上面所描述的方面方法中的一個或多個的操作。
一個方面包括一種計算設(shè)備,該計算設(shè)備具有用于執(zhí)行上面所描述的方面方法中的一個或多個的功能的單元。
附圖說明
被并入本文并且構(gòu)成本說明書一部分的附圖,描繪了本發(fā)明的示例性方面,并且連同上面給出的概括描述以及下面給出的具體實施方式一起用來解釋本發(fā)明的特征。
圖1是描繪適合于實現(xiàn)一個方面的計算設(shè)備的組件框圖。
圖2是描繪適合于實現(xiàn)一個方面的示例性多核處理器的組件框圖。
圖3是描繪適合于實現(xiàn)一個方面的示例性片上系統(tǒng)(soc)的組件框圖。
圖4是根據(jù)一個方面,排除和包括解壓塊邊界元數(shù)據(jù)的壓縮存儲器內(nèi)容的一部分的視圖。
圖5是根據(jù)一個方面,處于未壓縮、壓縮和解壓縮狀態(tài)的存儲器內(nèi)容的一部分的視圖。
圖6a-6d是根據(jù)一個方面,用于使用解壓塊邊界元數(shù)據(jù)的壓縮存儲器內(nèi)容的一部分的解壓縮計劃的視圖。
圖7a-7d是根據(jù)一個方面,對壓縮的存儲器內(nèi)容的解壓縮進(jìn)行硬件處理的視圖。
圖8是描繪用于使用解壓塊邊界元數(shù)據(jù),實現(xiàn)壓縮的存儲器內(nèi)容的解壓縮的一個方面方法的處理流程圖。
圖9是描繪適合于結(jié)合各個方面使用的示例性移動計算設(shè)備的組件框圖。
圖10是描繪適合于結(jié)合各個方面使用的示例性移動計算設(shè)備的組件框圖。
圖11是描繪適合于結(jié)合各個方面使用的示例性服務(wù)器的組件框圖。
具體實施方式
現(xiàn)在參照附圖來詳細(xì)地描述各個方面。在可以的地方,貫穿附圖使用相同的附圖標(biāo)記來指代相同或者類似的部件。對于特定示例和實現(xiàn)的引用只是用于說明目的,而不是旨在限制本發(fā)明或者權(quán)利要求的保護(hù)范圍。
本文可互換地使用術(shù)語“計算設(shè)備”和“移動計算設(shè)備”來指代下面中的任何一項或者全部:蜂窩電話、智能電話、個人或移動多媒體播放器、個人數(shù)據(jù)助理(pda)、膝上型計算機(jī)、平板計算機(jī)、智能本、超級本、掌上計算機(jī)、無線電子郵件接收機(jī)、具備多媒體互聯(lián)網(wǎng)功能的蜂窩電話、無線游戲控制器、以及包括存儲器和多核可編程處理器的類似個人電子設(shè)備。雖然各個方面對于諸如智能電話之類的移動計算設(shè)備(其中移動計算設(shè)備具有有限的存儲器和電池資源)特別有用,但這些方面通常也可用于實現(xiàn)多個存儲器設(shè)備和有限的功率預(yù)算的任何電子設(shè)備,其中在該情況下,減少處理器的功耗能夠延長移動計算設(shè)備的電池工作時間。
本文使用術(shù)語“片上系統(tǒng)”(soc)指代一組相互連接的電子電路,其通常包括但不限于:硬件內(nèi)核、存儲器和通信接口。硬件內(nèi)核可以包括各種不同類型的處理器,例如,通用處理器、中央處理單元(cpu)、數(shù)字信號處理器(dsp)、圖形處理單元(gpu)、加速處理單元(apu)、輔助處理器、單核處理器和多核處理器。此外,硬件內(nèi)核還可以體現(xiàn)其它硬件和硬件組合,例如,現(xiàn)場可編程門陣列(fpga)、專用集成電路(asci)、其它可編程邏輯器件、分離門邏輯器件、晶體管邏輯器件、性能監(jiān)測硬件、看門狗硬件和時間基準(zhǔn)??梢詫呻娐愤M(jìn)行配置,使得集成電路的部件位于單片的半導(dǎo)體材料(例如,硅)上。
一些方面包括用于以下的方法和實現(xiàn)這些方法的計算設(shè)備:通過指示壓縮頁面中的各個指令的位置,使頁面大小與導(dǎo)致更小的解壓塊的解壓塊大小去耦合;通過基于這些指示,生成結(jié)束該頁面的解壓縮的異常,對該頁面中包括指令的部分進(jìn)行解壓縮;以及在稍后時間,對該頁面的剩余部分進(jìn)行解壓縮。
可以將存貯存儲器中保存的指令一起組合在頁面中,并傳輸?shù)街鞔鎯ζ饕杂糜趫?zhí)行。如上所述,可以對包含這些指令的頁面進(jìn)行壓縮。但是,當(dāng)對該頁面進(jìn)行壓縮時,可以將該頁面的內(nèi)容指定成更小的各個解壓塊。作為對頁面的內(nèi)容進(jìn)行壓縮的結(jié)果,與對每一個指令進(jìn)行單獨地壓縮或者壓縮在更小的組中相比,該頁面包含更少數(shù)量的數(shù)據(jù),變成壓縮的頁面。作為對包含這些指令的頁面進(jìn)行壓縮的一部分,可以生成元數(shù)據(jù),以指示該頁面中的解壓塊的位置。該元數(shù)據(jù)可以用于規(guī)定編碼邊界,以指示壓縮頁面中的更小解壓塊,其包括指示在何處結(jié)束該壓縮頁面中的更小解壓塊的解壓縮??梢詫⒃獢?shù)據(jù)存儲在該壓縮頁面的解壓縮期間可訪問的表中。不同處理設(shè)備的架構(gòu)可以允許僅僅統(tǒng)一長度指令,或者也可以允許可變長度指令。對于統(tǒng)一長度指令而言,可以生成元數(shù)據(jù)以產(chǎn)生涵蓋解壓塊中的一個或多個完整指令的任意邊界。對于可變長度指令而言,可以根據(jù)可變長度指令的大小,生成元數(shù)據(jù)以涵蓋一個或多個可變長度指令。
可以對在主存儲器中接收的壓縮頁面(其包括多個獨立解壓塊)進(jìn)行解壓縮,使得可以訪問和執(zhí)行其內(nèi)容(特別是指令)??梢酝ㄟ^在對壓縮頁面的一個或多個解壓塊進(jìn)行解壓縮時產(chǎn)生的異常,來中斷壓縮頁面的解壓縮??梢曰趯嚎s頁面進(jìn)行解壓縮,直到解壓縮進(jìn)程到達(dá)這些解壓塊中的一個的結(jié)束,或者由元數(shù)據(jù)所指示的邊界為止,來生成異常。解壓塊可以與被指定用于執(zhí)行的壓縮頁面中的指令相關(guān)聯(lián)。可以通過使用將觸發(fā)該異常(其造成該頁面的解壓縮終止)的指令或者數(shù)據(jù)來填充壓縮頁面的剩余部分,來觸發(fā)該異常。隨后,可以執(zhí)行該頁面的解壓縮部分。此外,該異常還可以觸發(fā)在稍后時間(例如,在執(zhí)行該頁面的解壓縮部分中的指令之后),對該頁面的剩余部分進(jìn)行解壓縮。在一個方面,該異??梢杂|發(fā):以與在處理器內(nèi)核上執(zhí)行解壓縮的指令進(jìn)行時間切片的方式,對壓縮頁面的剩余部分進(jìn)行解壓縮。在一個方面,可以與其它的執(zhí)行或者解壓縮并行地,對該解壓縮指令或者壓縮頁面的剩余部分進(jìn)行遷移,以便在另一個處理器內(nèi)核上執(zhí)行或者解壓縮。
在完成頁面的解壓縮之前就能夠執(zhí)行來自該壓縮頁面的指令,允許在無需等待對整個頁面進(jìn)行解壓縮的情況下,就實現(xiàn)程序的進(jìn)行??梢詫嚎s頁面的剩余部分進(jìn)行解壓縮所需要的時間轉(zhuǎn)移到更晚的時間(例如,在程序的充分進(jìn)展之后),其減少了在執(zhí)行這些指令以進(jìn)展該程序時的延遲。在一個方面,可以通過將指令的執(zhí)行與壓縮頁面的剩余部分的解壓縮進(jìn)行時間切片,或者并行地執(zhí)行指令和對頁面的剩余部分進(jìn)行解壓縮,來實現(xiàn)類似的延遲減少。
一些方面包括用于以下的方法和實現(xiàn)這些方法的計算設(shè)備:對代碼指令的多個解壓塊一起壓縮,借此實現(xiàn)跨度所述多個解壓塊的回溯機(jī)會。所述多個解壓塊的解壓縮可以通過從該組的解壓塊的任意一端進(jìn)行解壓縮,來充分利用這些回溯機(jī)會所提供的壓縮的效率。
如上所述,在對頁面進(jìn)行壓縮時,可以基于其解壓塊邊界,單獨地指定該頁面中的更小解壓塊。由于可以對該頁面中的指定解壓塊的內(nèi)容一起壓縮(而不是單獨地),這種壓縮可以跨度多個解壓塊來實現(xiàn)回溯。雖然可以基于頁面邊界,對頁面的內(nèi)容一起壓縮,但解壓塊可以根據(jù)所生成的元數(shù)據(jù),來維持它們的解壓塊邊界。
可以對主存儲器中接收的壓縮頁面進(jìn)行解壓縮,使得可以訪問和執(zhí)行其內(nèi)容(例如,指令)。壓縮頁面的解壓縮可以開始于該壓縮頁面的任意端,以充分利用通過使用回溯對該頁面進(jìn)行壓縮所提供的效率。例如,如果在沒有對壓縮頁面的其它解壓塊進(jìn)行解壓縮的情況下,對來自該頁面的中間部分的解壓塊進(jìn)行解壓縮,則該解壓縮可能將變得不了解用于對該解壓塊的內(nèi)容進(jìn)行壓縮的模式。這將導(dǎo)致必須按照標(biāo)準(zhǔn)解壓縮來對該解壓塊進(jìn)行解壓縮,而不是通過匹配先前使用的模式??梢酝ㄟ^在對壓縮頁面的一個或多個解壓塊進(jìn)行解壓縮時產(chǎn)生的異常,來中斷壓縮頁面的解壓縮。如上所述,可以基于對壓縮頁面進(jìn)行解壓縮,直到到達(dá)這些解壓塊中的一個的結(jié)束,或者由元數(shù)據(jù)所指示的邊界為止,來生成異常。解壓塊可以與被指定用于執(zhí)行的壓縮頁面中的指令相關(guān)聯(lián)??梢酝ㄟ^使用將觸發(fā)該異常(其終止該頁面的解壓縮)的指令來填充該頁面的剩余部分,來觸發(fā)該異常。隨后,可以執(zhí)行該頁面的解壓縮部分。此外,該異常還可以觸發(fā)在稍后時間(例如,在執(zhí)行該頁面的解壓縮部分中的指令之后),對該頁面的剩余部分進(jìn)行解壓縮。
能夠?qū)撁嬷械亩鄠€解壓塊進(jìn)行一起壓縮,使能夠跨度多個壓縮塊來實現(xiàn)回溯,這與單獨地對解壓塊進(jìn)行壓縮相比,提高了效率和壓縮比。對包含多個被一起壓縮的壓縮塊的壓縮頁面進(jìn)行解壓縮,可以通過在任意端處開始對該頁面進(jìn)行解壓縮,來提高效率。壓縮頁面的順序解壓縮,允許解壓縮發(fā)現(xiàn)在壓縮回溯中使用的模式,以便對多個壓縮塊進(jìn)行解壓縮。
為了便于描述起見,圍繞某些大小(例如,4kb頁面和1kb解壓塊)來描述各個方面;但是,本文的方面可以用于任何大小的存儲器內(nèi)容。此外,術(shù)語頁面意味著作為存儲器的示例性部分,并且根據(jù)這些方面,可以使用用于指示存儲器的部分的許多其它術(shù)語(例如,塊、大塊或者線)。
圖1示出了適合于結(jié)合各個方面使用的一種系統(tǒng),其包括與遠(yuǎn)程計算設(shè)備50進(jìn)行通信的計算設(shè)備10。計算設(shè)備10可以包括具有處理器14、存儲器16、通信接口18和存貯存儲器接口20的soc12。該計算設(shè)備還可以包括諸如有線或無線調(diào)制解調(diào)器之類的通信組件22、存貯存儲器24、用于建立到無線網(wǎng)絡(luò)30的無線連接32的天線26、和/或用于將有線連接44連接到互聯(lián)網(wǎng)40的網(wǎng)絡(luò)接口28。處理器14可以包括各種各樣的硬件內(nèi)核以及多個處理器內(nèi)核中的任何一種。soc12可以包括一個或多個處理器14。計算設(shè)備10可以包括一個以上的soc12,借此增加處理器14和處理器內(nèi)核的數(shù)量。此外,計算設(shè)備10還可以包括與soc12不相關(guān)聯(lián)的處理器14。各個處理器14可以是如下面參照圖2所描述的多核處理器。處理器14中的每一個可以被配置為用于特定目的,其可以與計算設(shè)備10的其它處理器14相同或者不同??梢詫⑾嗤虿煌渲玫奶幚砥?4和處理器內(nèi)核中的一個或多個組合在一起。
soc12的存儲器16可以是被配置為存儲由處理器14進(jìn)行訪問的數(shù)據(jù)和處理器可執(zhí)行代碼的易失性或者非易失性存儲器。在一個方面,存儲器16可以被配置為至少臨時地存儲數(shù)據(jù),例如,用于由處理器14中的一個或多個訪問的壓縮的和解壓縮的處理器可執(zhí)行代碼指令。在一個方面,存儲器16可以被配置為:存儲與壓縮的存儲器內(nèi)容相關(guān)的信息,例如,解壓塊邊界元數(shù)據(jù),如本文所進(jìn)一步描述的。
計算設(shè)備10和/或soc12可以包括被配置用于各種目的的一個或多個存儲器16。在一個方面,一個或多個存儲器16可以包括諸如隨機(jī)存取存儲器(ram)或主存儲器或者高速緩存之類的易失性存儲器。這些存儲器16可以被配置為臨時地保持從非易失性存儲器請求的有限數(shù)量的數(shù)據(jù)和/或處理器可執(zhí)行代碼指令(其中,基于各種各樣的因素,在預(yù)期未來訪問的情況下,將這些數(shù)據(jù)和/或處理器可執(zhí)行代碼指令從非易失性存儲器加載到存儲器16)、和/或由處理器14生成并臨時地存儲以便未來快速訪問(而不存儲在非易失性存儲器中)的中間處理數(shù)據(jù)和/或處理器可執(zhí)行代碼指令。
通信接口18、通信組件22、天線26和/或網(wǎng)絡(luò)接口28可以一致地工作,使計算設(shè)備10能夠經(jīng)由無線連接32通過無線網(wǎng)絡(luò)30和/或有線網(wǎng)絡(luò)44,與遠(yuǎn)程計算設(shè)備50進(jìn)行通信??梢允褂酶鞣N無線通信技術(shù)(例如,其包括用于無線通信的射頻頻譜)來實現(xiàn)無線網(wǎng)絡(luò)30,以向計算設(shè)備10提供到互聯(lián)網(wǎng)40的連接,其中通過互聯(lián)網(wǎng)40,其可以與遠(yuǎn)程計算設(shè)備50交換數(shù)據(jù)。
存貯存儲器接口20和存貯存儲器24可以一致地工作,以允許計算設(shè)備10將數(shù)據(jù)存儲在非易失性存儲介質(zhì)上。可以非常類似于存儲器16的方面,對存貯存儲器24進(jìn)行配置,其中,存貯存儲器24可以存儲用于由處理器14中的一個或多個進(jìn)行訪問的壓縮的和解壓縮的處理器可執(zhí)行代碼指令、以及解壓塊邊界元數(shù)據(jù)。即使在計算設(shè)備10的電源被關(guān)閉之后,作為非易失性的存貯存儲器24也可以保持該信息。當(dāng)電源被再次打開并且計算設(shè)備10重新啟動時,計算設(shè)備10可獲得存貯存儲器24上存儲的該信息。存貯存儲器接口20可以控制針對存貯存儲器24的訪問,并且允許處理器14從存貯存儲器24讀取數(shù)據(jù)和向存貯存儲器24寫入數(shù)據(jù)。
可以對計算設(shè)備10的組件中的一些或全部進(jìn)行不同地排列和/或組合,同時仍然供應(yīng)必要的功能。此外,計算設(shè)備10并不限于這些組件中的每個組件只有一個,在計算設(shè)備10的各個配置中可以包括每一個組件的多個實例。
圖2描繪了適合于實現(xiàn)一個方面的多核處理器14。多核處理器14可以具有多個同構(gòu)或者異構(gòu)的處理器內(nèi)核200、201、202、203。處理器內(nèi)核200、201、202、203可以是同構(gòu)的,其在于:單個處理器14的處理器內(nèi)核200、201、202、203可以被配置為用于相同目的,具有相同或類似的性能特性。例如,處理器14可以是通用處理器,處理器內(nèi)核200、201、202、203可以是同構(gòu)的通用處理器內(nèi)核。替代地,處理器14可以是圖形處理單元或者數(shù)字信號處理器,處理器內(nèi)核200、201、202、203可以分別是同構(gòu)的圖形處理器內(nèi)核或者數(shù)字信號處理器內(nèi)核。為了便于說明起見,本文可以互換地使用術(shù)語“處理器”和“處理器內(nèi)核”。
處理器內(nèi)核200、201、202、203可以是異構(gòu)的,其在于:單個處理器14的處理器內(nèi)核200、201、202、203可以被配置為用于不同的目的,和/或具有不同的性能特性。這些異構(gòu)處理器內(nèi)核的例子可以包括稱為“big.little”架構(gòu)的架構(gòu),在該架構(gòu)中,可以將慢速、低功率處理器內(nèi)核與更強(qiáng)大和功耗更大的處理器內(nèi)核相耦合。
在圖2所示出的例子中,多核處理器14包括四個處理器內(nèi)核200、201、202、203(即,處理器內(nèi)核0、處理器內(nèi)核1、處理器內(nèi)核2和處理器內(nèi)核3)。為了便于解釋起見,本文的例子可以指代圖2中所示出的四個處理器內(nèi)核200、201、202、203。但是,圖2中所示出和本文所描述的四個處理器內(nèi)核200、201、202、203只是提供為一個例子,決不意味著將各個方面限制于四核處理器系統(tǒng)。與本文所示出和描述的四個處理器內(nèi)核200、201、202、203相比,計算設(shè)備10、soc12或多核處理器14可以各自地或者組合地包括更少或者更多的內(nèi)核。
圖3示出了一種示例性soc12,其包括高速緩沖存儲器控制器300、高速緩沖存儲器302、主存儲器控制器304、主存儲器306、壓縮引擎310、解壓縮引擎312和其它部件(比如,上面所描述的soc12的部件)。此外,該soc還可以包括或者通信地連接到存貯存儲器控制器308和存貯存儲器24。高速緩沖存儲器302、主存儲器306和存貯存儲器24中的每一個可以被配置為存儲壓縮的和/或解壓縮的存儲器內(nèi)容(例如,數(shù)據(jù)和/或代碼指令)。此外,高速緩沖存儲器302、主存儲器306和存貯存儲器24還可以存儲用于所存儲的壓縮存儲器內(nèi)容的解壓塊邊界元數(shù)據(jù)。該解壓塊邊界元數(shù)據(jù)可以指示解壓塊的開始和/或結(jié)束,其中該解壓塊包含壓縮的存儲器內(nèi)容的一個或多個完整代碼指令,如本文所進(jìn)一步描述的。
高速緩沖存儲器302可以被配置為:臨時地存儲數(shù)據(jù)和代碼指令,以便與訪問主存儲器306或者存貯存儲器24時相比更快速地訪問。高速緩沖存儲器302可以專門由單個處理器14使用,或者在多個處理器14和/或soc12的子系統(tǒng)(沒有示出)之間共享。在一個方面,高速緩沖存儲器302可以是處理器14的一部分,并且可以專門由單個處理器內(nèi)核使用,或者在處理器14的多個處理器內(nèi)核之間共享。高速緩沖存儲器控制器300可以管理soc12的各個處理器14和子系統(tǒng)(沒有示出)對于高速緩沖存儲器302的訪問。此外,高速緩沖存儲器控制器300還可以管理從高速緩沖存儲器控制器300到主存儲器306和存貯存儲器24的、用于獲取處理器14可能從高速緩沖存儲器302請求但沒有在高速緩沖存儲器302中發(fā)現(xiàn)的數(shù)據(jù)(從而導(dǎo)致高速緩存未命中)的訪問的存儲器訪問請求。
主存儲器306可以被配置為:臨時地存儲數(shù)據(jù)和代碼指令,以便與訪問存貯存儲器24時相比更快速地訪問。主存儲器306可以可用于由一個或多個soc12的處理器14和/或soc12的子系統(tǒng)(沒有示出)進(jìn)行訪問。主存儲器控制器304可以管理soc12的各個處理器14和子系統(tǒng)(沒有示出)和計算設(shè)備對于主存儲器306的訪問。此外,主存儲器控制器304還可以管理主存儲器控制器304針對存貯存儲器24的、用于獲取處理器14或者高速緩沖存儲器控制器300可能從主存儲器306請求但沒有在主存儲器305中發(fā)現(xiàn)的數(shù)據(jù)(從而導(dǎo)致主存儲器未命中)的訪問的存儲器訪問請求。
存貯存儲器24可以被配置為實現(xiàn)數(shù)據(jù)和代碼指令的持久性存儲,以便當(dāng)該計算設(shè)備沒有供電時,保留所存儲的數(shù)據(jù)和代碼指令。與高速緩沖存儲器302和主存儲器306相比,存貯存儲器24可以被配置為存儲更大數(shù)量的數(shù)據(jù)和代碼指令,并且存儲包括那些沒有被soc12的處理器14或子系統(tǒng)(沒有示出)使用或者預(yù)測在不久的未來不會被其使用的數(shù)據(jù)和代碼指令。存貯存儲器24可以可用于由一個或多個soc12的處理器14和/或soc12的子系統(tǒng)(沒有示出)進(jìn)行訪問。存貯存儲器控制器308可以管理soc12的各個處理器14和子系統(tǒng)(沒有示出)和計算設(shè)備對于存貯存儲器24的訪問。此外,存貯存儲器控制器24還可以管理來自高速緩沖存儲器控制器300和主存儲器控制器304針對存貯存儲器24的、用于獲取處理器14可能從高速緩沖存儲器302或者主存儲器306請求但沒有在高速緩沖存儲器302或者主存儲器305中發(fā)現(xiàn)的數(shù)據(jù)(從而導(dǎo)致高速緩沖存儲器未命中或者主存儲器未命中)的訪問的存儲器訪問請求。
壓縮引擎310可以被配置為:對用于存儲到高速緩沖存儲器302、主存儲器306和存貯存儲器24的和從它們中獲取的數(shù)據(jù)和代碼指令進(jìn)行壓縮。被壓縮引擎310壓縮的數(shù)據(jù)和代碼指令,可以由soc12的處理器14和/或子系統(tǒng)(沒有示出)來提供。在對數(shù)據(jù)和代碼指令進(jìn)行壓縮時,壓縮引擎310可以使用各種已知的壓縮方案來實現(xiàn)各種壓縮比。在一個方面,壓縮引擎310可以對被劃分成連續(xù)的存儲器塊(本文稱為頁面)的數(shù)據(jù)和代碼指令進(jìn)行壓縮。這些頁面可以具有固定的大小(例如,4kb頁面)。頁面可以是能夠在高速緩沖存儲器302、主存儲器306和存貯存儲器24之間傳輸?shù)拇鎯ζ鞯膯挝?。壓縮引擎310可以對存儲器302、306和24中的任何一個的頁面中包含的數(shù)據(jù)和代碼指令、或者將被寫入到其上的數(shù)據(jù)和代碼指令進(jìn)行壓縮??梢詫㈨撁娴乃袛?shù)據(jù)和代碼指令壓縮為單個單元。換言之,可以基于頁面的大小,而不是該頁面中的數(shù)據(jù)和代碼指令的個體或者組的大小,對該頁面的內(nèi)容進(jìn)行壓縮。
此外,壓縮引擎310還可以產(chǎn)生解壓塊邊界元數(shù)據(jù),并將其添加到壓縮頁面中。解壓塊邊界元數(shù)據(jù)可以用于指示該壓縮頁面中的解壓塊的開始和/或結(jié)束。這些解壓塊可以是壓縮頁面中的能夠單獨地或者結(jié)合壓縮頁面的其它解壓塊來進(jìn)行解壓縮的部分。這些解壓塊可以包含在單個頁面中,并且與壓縮頁面相比具有更小的大小。此外,解壓塊邊界元數(shù)據(jù)還可以指示這些解壓塊在壓縮頁面中的起始或者結(jié)束處的位置,其中在這些位置,可以對壓縮頁面的解壓縮進(jìn)行中斷??梢詫鈮簤K邊界元數(shù)據(jù)進(jìn)行配置,使得僅僅完整代碼指令包含在一個解壓塊中。換言之,單個代碼指令不能跨度解壓塊邊界。在一個方面,處理器14可以被配置用于固定長度代碼指令;因此,解壓塊邊界元數(shù)據(jù)可以指示可以包含固定數(shù)量的代碼指令的統(tǒng)一長度解壓塊。此外,還可以將可變長度解壓塊用于固定長度代碼指令(只要在這些解壓塊中僅僅包含完整代碼指令)。在另一個方面,處理器14可以被配置用于可變長度代碼指令。在可變長度代碼指令的情況下,解壓塊邊界元數(shù)據(jù)可以指示可以包含可變數(shù)量的代碼指令的可變長度解壓塊。由于一個頁面中的代碼指令可能不具有相同的長度,因此可能不能夠確定包含相同數(shù)量的完整代碼指令的解壓塊邊界。因此,只要每一個解壓塊包含完整代碼指令,并且沒有任何代碼指令跨度解壓塊邊界,就可以規(guī)定可變長度解壓塊。
解壓縮引擎312可以對壓縮頁面進(jìn)行解壓縮??梢皂憫?yīng)于來自處理器14的存儲器訪問請求(其可以從存儲器24、302和306中的一個的特定位置請求代碼指令),發(fā)生壓縮頁面的解壓縮。解壓縮引擎312可以接收壓縮流,該壓縮流包含與該存儲器訪問請求的存儲器位置有關(guān)的壓縮頁面和用于該壓縮頁面的解壓塊邊界元數(shù)據(jù)。通過將存儲器訪問請求的存儲器位置與解壓塊邊界元數(shù)據(jù)進(jìn)行比較,解壓縮引擎312可以確定所請求的代碼指令位于該壓縮頁面的哪個解壓塊中。使用所識別的解壓塊,解壓縮引擎312可以確定要對壓縮頁面中的哪個解壓塊進(jìn)行解壓縮。如本文所進(jìn)一步描述的,根據(jù)解壓縮引擎312所使用的解壓縮方案,可以對這些解壓塊中的一個或多個進(jìn)行解壓縮,以訪問所請求的代碼指令。解壓縮引擎312可以將故障代碼或者異常代碼(例如,特定的代碼指令或者包括全零的數(shù)據(jù)序列)替換用于剩余的解壓塊。請求的處理器14可以訪問這些解壓縮代碼指令以用于執(zhí)行。在一個方面,可以調(diào)度剩余的解壓塊在稍后時間進(jìn)行解壓縮。在一個方面,可以將剩余的解壓塊遷移到其它硬件上(例如,不同的處理器內(nèi)核、處理器或者硬件解壓縮引擎),以便與解壓縮的代碼指令的執(zhí)行并行地進(jìn)行解壓縮。在一個方面,可以以與解壓縮的代碼指令的執(zhí)行進(jìn)行時間切片的方式,對剩余的解壓塊進(jìn)行解壓縮。
壓縮引擎310和解壓縮引擎312可以實現(xiàn)成由處理器14執(zhí)行的軟件、(例如,可編程處理器設(shè)備上的)專用硬件或者軟件和硬件的組合??梢詫oc12的組件中的一些或者全部進(jìn)行不同地排列和/或組合,同時仍然供應(yīng)必要的功能。此外,soc12可以不受限于這些組件中的每一個只有一個,在soc12的各種配置中,可以包括每一個組件的多個實例。
圖4和圖5中所示出的方面示出了根據(jù)用于本文所描述的壓縮和解壓縮的方面,處于壓縮和解壓縮的各個狀態(tài)的頁面的例子。
圖4描繪了不包括解壓塊邊界元數(shù)據(jù)的壓縮頁面400、包括固定長度解壓塊邊界元數(shù)據(jù)的壓縮頁面402、以及包括可變長度解壓塊邊界元數(shù)據(jù)的壓縮頁面404。不包括解壓塊邊界元數(shù)據(jù)的壓縮頁面400,表示將來自這些存儲器中的一個的存儲器內(nèi)容的頁面壓縮成指定的大小(例如,4kb)。將整個頁面的存儲器內(nèi)容(無論原始大小如何)一起壓縮成單個單元,因此,該頁面的整個內(nèi)容被壓縮為單個壓縮頁面400。相同的情形適用于壓縮頁面402和404。在該例子中,壓縮頁面400、402和404的存儲器內(nèi)容可以是相同的,并且可以使用相同的壓縮方法和比率,以相同的方式將它們壓縮成相同的大小。壓縮頁面400與壓縮頁面402和404之間的差別在于:增加了解壓塊邊界元數(shù)據(jù)410a-410e和414a-414e。壓縮頁面402和404之間的差別在于:壓縮頁面402包括固定長度解壓塊邊界元數(shù)據(jù)410a-410e,而壓縮頁面404包括可變長度解壓塊邊界元數(shù)據(jù)414a-414e。解壓塊邊界元數(shù)據(jù)410a-410e和414a-414e規(guī)定壓縮頁面402的解壓塊408a-408d和壓縮頁面404的解壓塊412a-412d。
在每一個實例中,解壓縮引擎可以將每一個壓縮頁面400、402和404作為一個完整的壓縮頁面來接收和查看。不過,解壓塊邊界元數(shù)據(jù)410a-410e和414a-414e的增加,可以允許解壓縮引擎確定解壓塊408a-408d和412a-412d。在一個方面,解壓塊邊界元數(shù)據(jù)410a-410e和414a-414e可以嵌入在壓縮頁面402和404中。在一個方面,解壓塊邊界元數(shù)據(jù)410a-410e和414a-414e可以作為壓縮流的一部分來伴隨壓縮頁面402和404,例如,以提供針對壓縮頁面402和404中的解壓塊邊界的位置的指針的數(shù)據(jù)結(jié)構(gòu)的形式。
源自于固定長度解壓塊邊界元數(shù)據(jù)410a-410e,解壓塊408a-408d中的每一個具有等同的長度。繼續(xù)該4kb壓縮頁面402示例,圖4中所示出的四個解壓塊408a-408d均可以是長度為1kb。在一個方面,存在著計算設(shè)備使用固定長度代碼指令的可能性,使得所有的代碼指令是相同長度。在這種計算設(shè)備中,未壓縮頁面的長度通??杀还潭ㄩL度代碼指令的數(shù)量整除。因此,解壓縮引擎可以選擇對壓縮頁面進(jìn)行均勻劃分的解壓塊邊界元數(shù)據(jù)410a-410e的數(shù)量和位置,從而每一個解壓塊408a-408d都包含等同數(shù)量的完整的固定長度代碼指令。在一個方面,還存在著計算設(shè)備使用可變長度代碼指令的可能性,但是更為偶然的是,可變長度指令使它們適合于上面所描述的允許統(tǒng)一長度解壓塊408a-408d的狀況。
源自于可變長度解壓塊邊界元數(shù)據(jù)414a-414e,解壓塊412a-412d中的每一個可以具有可變的和/或等同的長度。繼續(xù)該4kb壓縮頁面404示例,圖4中所示出的四個解壓塊412a-412d中的每一個的長度可以是不同的。在一個方面,存在著計算設(shè)備使用可變長度代碼指令的可能性,使得所有的代碼指令可能是不同的長度。在這種計算設(shè)備中,未壓縮頁面的長度通常可被可變長度代碼指令的數(shù)量不均勻可分。因此,解壓縮引擎可以選擇對壓縮頁面進(jìn)行劃分的解壓塊邊界元數(shù)據(jù)414a-414e的數(shù)量和位置,從而每一個解壓塊412a-412d都包含完整的可變長度代碼指令。由于代碼指令可能并不能容易地適應(yīng)于等同長度解壓塊,因此解壓縮引擎可以選擇用于規(guī)定可變長度解壓塊412a-412d的可變長度解壓塊邊界元數(shù)據(jù)414a-414e,使得沒有可變長度代碼指令跨度任何解壓塊邊界。如上所述,存在著以下的可能性:計算設(shè)備使用可變代碼指令,而此時可能發(fā)生可變長度解壓塊412a-412d可以具有等同的長度這樣的實例。此外,只要沒有任何固定長度代碼指令跨度任何解壓塊邊界,就存在著使用固定長度代碼指令的計算設(shè)備來應(yīng)用可變長度解壓塊邊界元數(shù)據(jù)的可能性。
顯而易見的是,各種實現(xiàn)中的解壓塊的數(shù)量并不需要受限于如這些示例中的四個,其可以根據(jù)諸如頁面長度、代碼指令長度和用于解壓縮引擎的設(shè)計方案選項之類的各種因素,大于或者小于四個。
圖5示出了根據(jù)一個方面的未壓縮頁面500、具有解壓塊元數(shù)據(jù)508的壓縮頁面502和解壓縮頁面512。未壓縮頁面500可以包含存儲在這些存儲器中的一個里的代碼指令。壓縮引擎可以將未壓縮頁面500壓縮為壓縮頁面502。壓縮引擎可以在壓縮過程期間,生成解壓塊邊界元數(shù)據(jù)508。在一個方面,解壓塊邊界元數(shù)據(jù)508可以包含在與壓縮塊502分開的數(shù)據(jù)結(jié)構(gòu)中。解壓塊邊界元數(shù)據(jù)508可以包含諸如指針510a-510e之類的信息,解壓縮引擎可以使用該信息來確定解壓塊邊界506a-506e。指針510a-510e可以對應(yīng)于壓縮頁面502中的地址,后者對應(yīng)于未壓縮頁面500的地址。解壓塊邊界元數(shù)據(jù)508可以使指針510a-510e與未壓縮頁面500的相應(yīng)地址相關(guān)。指針510a-510e和未壓縮頁面500的相應(yīng)地址之間的關(guān)系,可以允許解壓縮引擎識別解壓塊504a-504d,其中解壓塊504a-504d包含針對未壓縮頁面500中的存儲器位置的存儲器訪問請求的所請求的代碼指令。
響應(yīng)于針對未壓縮頁面500中包含的代碼指令里的至少一個的存儲器訪問請求,解壓縮引擎可以接收相關(guān)的壓縮頁面502和解壓塊邊界元數(shù)據(jù)508。基于該存儲器訪問請求的未壓縮頁面500中的存儲器位置,解壓縮引擎可以確定所請求的壓縮的代碼指令位于壓縮頁面502的哪個解壓塊504a-504d中。解壓縮引擎可以將存儲器訪問請求的存儲器位置與解壓塊邊界元數(shù)據(jù)508進(jìn)行比較。解壓縮引擎可以將存儲器訪問請求的存儲器位置解釋為等于一(解壓塊邊界506a-506e),或者位于兩個解壓塊邊界506a-506e之間,如通過指針510a-510e在解壓塊邊界元數(shù)據(jù)508中所指示的。
根據(jù)被確定包含該壓縮的代碼指令的解壓塊504a-504d以及根據(jù)(本文進(jìn)一步描述的)解壓縮方案,解壓縮引擎可以選擇對哪個解壓塊504a-504d進(jìn)行解壓縮。在各種情形下,解壓縮引擎可以對任何一個或者任何毗鄰的解壓塊504a-504d進(jìn)行解壓縮?;诖鎯ζ髟L問請求而沒有被選擇進(jìn)行解壓縮的任何解壓塊504a-504d,可以在選定的解壓塊504a-504d之后進(jìn)行解壓縮。解壓縮頁面512描繪了壓縮頁面502的完全解壓縮版本。解壓縮頁面512在長度和內(nèi)容上可以等同于未壓縮頁面500,并且其可以被分階段地解壓縮,在不同的時間,解壓縮了對應(yīng)于解壓塊504a-504d的各個解壓的塊514a-514d。
圖6a-6d示出了根據(jù)一個方面,使用解壓塊邊界元數(shù)據(jù)的用于壓縮頁面502的解壓縮方案。如同在圖5中,解壓塊邊界元數(shù)據(jù)可以標(biāo)識解壓塊邊界506a-506e和解壓塊504a-504d。圖6a示出了解壓縮引擎識別所請求的壓縮代碼指令位于解壓塊504b中的方面。在該方面中使用的解壓縮方案可以是只需要對包含該壓縮的代碼指令的解壓塊(解壓塊504b)進(jìn)行解壓縮的方案。解壓縮引擎可以根據(jù)解壓塊邊界元數(shù)據(jù),識別針對解壓塊504b的解壓塊邊界506b和506c。解壓縮引擎可以將解壓塊邊界506b確定成解壓起始點600,將解壓塊邊界506c確定成解壓結(jié)束點602。解壓縮引擎可以將故障代碼或者異常代碼(例如,特定的代碼指令或者可以包括全零的數(shù)據(jù)序列)替換用于剩余的解壓塊504a、504c和504d。
圖6b示出了解壓縮引擎識別多個請求的壓縮代碼指令位于解壓塊504b和504c二者中,或者請求的壓縮代碼指令位于解壓塊504b或504c其中之一中的方面。在多個請求的壓縮代碼指令位于解壓塊504b和504c二者中的方面中所使用的解壓縮方案,可以類似于圖6a中所描述的解壓縮方案。類似性是該解壓縮方案可以只需要對包含該壓縮的代碼指令的解壓塊(解壓塊504b和504c)進(jìn)行解壓縮。解壓縮引擎可以根據(jù)解壓塊邊界元數(shù)據(jù),識別針對解壓塊504b和504c的解壓塊邊界506b、506c和506d。解壓縮引擎可以將解壓塊邊界506b確定成解壓起始點604,將解壓塊邊界506d確定成解壓結(jié)束點606。解壓縮引擎可以將故障代碼或者異常代碼替換用于剩余的解壓塊504a和504d。
在請求的壓縮代碼指令位于解壓塊504b或504c其中之一的圖6b所示出的方面中,該解壓縮方案可以仍然調(diào)用另一解壓塊504b或504c的解壓縮。在該方面,該解壓縮方案可以被配置為:利用代碼指令的局部性,以便盡力以提高代碼指令的解壓縮和執(zhí)行的效率的方式,對壓縮頁面進(jìn)行解壓縮。與所請求的代碼指令相關(guān)的代碼指令,可能存儲在存儲器中位于該請求的代碼指令附近的地址,并且可能位于相同的頁面中。雖然該相關(guān)的代碼指令還沒有被請求,但存在著該請求的潛在性。因此,該解壓縮方案可以調(diào)用對包含該請求的代碼指令的解壓塊附近的多個解壓塊的解壓縮。已解壓的相關(guān)代碼指令可以存儲在這些存儲器中的一個(例如,高速緩沖存儲器)里,以便當(dāng)其被調(diào)用時進(jìn)行快速訪問,而無需對另一個壓縮頁面進(jìn)行解壓縮。由于請求的代碼指令位于解壓塊504b或504c中的一個里,因此使用局部性的該解壓縮方案還可以確定對解壓塊504b或504c中的另一個進(jìn)行解壓縮。應(yīng)當(dāng)認(rèn)識到,該方面的解壓縮方案并不限于只對一個另外的解壓塊進(jìn)行解壓縮,也不受限于:這些另外的解壓塊必須位于包含所請求的代碼指令的解壓塊的相同一側(cè)。
圖6c和圖6d示出了:解壓縮方案被配置為利用針對壓縮和解壓縮模式的回溯機(jī)會的方面。在這些方面,解壓縮引擎識別到所請求的壓縮的代碼指令位于解壓塊504b中。在這些方面中使用的解壓縮方案可以是需要對位于壓縮頁面502的一端和包含該壓縮代碼指令的解壓塊(解壓塊504b)之間的每一個解壓塊進(jìn)行解壓縮的方案。解壓縮引擎可以根據(jù)解壓塊邊界元數(shù)據(jù),識別針對解壓塊504b的解壓塊邊界506b。解壓縮引擎可以將解壓塊邊界506b確定成解壓結(jié)束點610。解壓縮引擎可以將故障代碼或者異常代碼替換用于圖6c中的剩余解壓塊504c和504d,以及圖6d中的解壓塊504a。
在這些方面,隨著解壓縮引擎從壓縮頁面502的任意端傳到解壓塊504b的結(jié)束,解壓縮引擎構(gòu)建用于壓縮頁面502的解壓縮模式的本地字典。該字典可以包含壓縮頁面502的壓縮和解壓縮形式的代碼指令之間的關(guān)系。解壓縮引擎能夠識別壓縮頁面502中的模式(其與壓縮頁面502的先前未壓縮部分的模式相匹配),使用該字典對識別的模式進(jìn)行解壓縮,而不是必須經(jīng)由解壓縮算法來確定該解壓縮。該過程可以節(jié)省被用于對壓縮頁面502的部分進(jìn)行解壓縮的時間和計算設(shè)備資源。
圖7a-7d示出了對壓縮的存儲器內(nèi)容進(jìn)行解壓縮和執(zhí)行解壓縮的代碼指令的硬件處理。圖7a-7d中示出的方面只描述了兩個硬件組件(處理器內(nèi)核0200和處理器內(nèi)核1201)。結(jié)合上面圖2將這些硬件組件描述成同一處理器的兩個處理器內(nèi)核。應(yīng)當(dāng)理解的是,這些硬件組件只是示例性的,本文所描述的方面可以使用計算設(shè)備中的各種處理器內(nèi)核、處理器、以及各種配置和分布的專用硬件來實現(xiàn)。圖7a示出了處理器內(nèi)核0200處理壓縮頁面的所有解壓縮700和704和執(zhí)行702解壓縮的代碼指令的方面。解壓縮700可以表示根據(jù)上面所描述的解壓縮方案中的任何一種,對識別為進(jìn)行解壓縮的壓縮頁面的解壓塊的解壓縮。因此,解壓縮700是從識別的解壓縮起始點或者壓縮頁面的任何一端到識別的解壓縮結(jié)束點的、少于全部的壓縮頁面的解壓縮。一旦解壓縮700完成對識別為進(jìn)行解壓縮的解壓塊的解壓縮,其就結(jié)束。執(zhí)行702可以表示對提示了解壓縮700的存儲器訪問請求的所請求的代碼指令的執(zhí)行。這些代碼指令在解壓縮700期間進(jìn)行了解壓縮,因此對于執(zhí)行702是可訪問的。一旦執(zhí)行702完成,則解壓縮704可以對該壓縮頁面的解壓塊的剩余部分進(jìn)行解壓縮。在一個方面,解壓縮704并不需要直接發(fā)生在執(zhí)行702的完成之后,其可以發(fā)生在已經(jīng)執(zhí)行了各種其它代碼指令之后。
圖7b示出了處理器內(nèi)核0200處理壓縮頁面的所有的解壓縮700和704,處理器內(nèi)核1201處理已解壓縮代碼指令的執(zhí)行702的方面。解壓縮700可以如上所述地發(fā)生。在一個方面,一旦完成解壓縮700,則可以對執(zhí)行702進(jìn)行遷移或者調(diào)度為在與解壓縮700不同的處理器上發(fā)生。因此,執(zhí)行702可以由處理器內(nèi)核1201來實現(xiàn)。與執(zhí)行702同時地,處理器內(nèi)核0可以實現(xiàn)解壓縮704,以便對壓縮頁面的解壓塊的剩余部分進(jìn)行解壓縮。在一個方面,執(zhí)行702和解壓縮704并不必須同時地開始或者甚至同時地發(fā)生,但是并發(fā)地實現(xiàn)每一個操作是有利的,這是由于其可以增加存儲器訪問請求的整體性能時間。
圖7c示出了處理器內(nèi)核0200處理壓縮頁面的解壓縮700和已解壓縮代碼指令的執(zhí)行702,而處理器內(nèi)核1201處理壓縮頁面的解壓縮704的方面。解壓縮700可以如上所述地發(fā)生。在一個方面,一旦完成解壓縮700,則可以由處理器內(nèi)核0200實現(xiàn)對于已解壓縮代碼指令的執(zhí)行702。在執(zhí)行702之前或者與此同時,可以對解壓縮704進(jìn)行遷移或者調(diào)度為在與解壓縮700和/或執(zhí)行702不同的處理器上發(fā)生。因此,壓縮頁面的剩余解壓塊的解壓縮704可以由處理器內(nèi)核1201來實現(xiàn)。在一個方面,執(zhí)行702和解壓縮704并不必須同時地開始或者甚至同時地發(fā)生,但是并發(fā)地實現(xiàn)每一個操作是有利的,這是由于其可以增加存儲器訪問請求的整體性能時間。
圖7c示出了處理器內(nèi)核0200處理壓縮頁面的所有的解壓縮700和704,以及已解壓縮代碼指令的執(zhí)行702的方面。解壓縮700可以如上所述地發(fā)生。在一個方面,一旦完成解壓縮700,則可以在相同的硬件組件(例如,處理器內(nèi)核0200)上,以時間切片方式實現(xiàn)執(zhí)行702和該壓縮頁面的解壓塊的剩余部分的解壓縮704。在一個方面,用于執(zhí)行702和解壓縮704的時間的分配,可以是等同的時間切片,也可以不是等同的時間切片。此外,如果執(zhí)行702或者解壓縮704中的一個在另一個之前完成,則在繼續(xù)的操作可以繼續(xù)直到完成為止。
圖8示出了用于使用解壓塊邊界元數(shù)據(jù)來實現(xiàn)壓縮的存儲器內(nèi)容的解壓縮的方面方法800??梢允褂密浖?、通用或者專用硬件(例如,處理器、壓縮和/或解壓縮引擎、高速緩存、主存儲器控制器和/或存貯存儲器控制器)或者軟件和硬件的組合,在計算設(shè)備中執(zhí)行方法800。在方框802中,計算設(shè)備可以對包含代碼指令的頁面進(jìn)行壓縮,該代碼指令是存儲在存儲器中的一個里由存儲器訪問請求所指示的位置處的。在一個方面,可以響應(yīng)于針對該代碼指令的存儲器訪問請求,發(fā)生對于包含該代碼指令的頁面的壓縮,以減少在計算設(shè)備的組件之間傳輸該頁面的成本。在一個方面,針對包含該代碼指令的頁面的壓縮可以發(fā)生在存儲器訪問請求之前,并且可以將該壓縮頁面存儲在存儲器中,并響應(yīng)于存儲器訪問請求來訪問。在方框804中,計算設(shè)備可以向該壓縮頁面增加解壓塊邊界元數(shù)據(jù)。如上面所討論的,在一個方面,可以將解壓塊邊界元數(shù)據(jù)嵌入在壓縮頁面中。在一個方面,該解壓塊邊界元數(shù)據(jù)可以與壓縮頁面相關(guān)聯(lián),并且可以存儲在一起,或者以數(shù)據(jù)結(jié)構(gòu)(例如,表)的形式與壓縮頁面分開,其中該數(shù)據(jù)結(jié)構(gòu)可以將解壓塊邊界元數(shù)據(jù)與未壓縮頁面中的位置進(jìn)行相關(guān)。當(dāng)在計算設(shè)備的組件之間進(jìn)行傳輸時,可以將解壓塊邊界元數(shù)據(jù)連同壓縮頁面一起包括在壓縮流中。
在方框806中,計算設(shè)備可以獲取包含有存儲器訪問請求的所請求代碼指令的壓縮頁面。在一個方面,可以直接地或者間接地執(zhí)行對于壓縮頁面的獲取。壓縮頁面的獲取的直接執(zhí)行的示例可以包括:計算設(shè)備的硬件組件(例如,處理器)直接地向該壓縮頁面所位于的存儲器請求訪問。壓縮頁面的獲取的間接執(zhí)行的示例可以包括:計算設(shè)備的硬件組件向當(dāng)前不包含該壓縮頁面的存儲器請求訪問。源自于這種存儲器未命中,該存儲器的控制器向該壓縮頁面所位于的另一個存儲器請求訪問。如上所述,獲取該壓縮頁面還可以使得:獲取與該壓縮頁面相關(guān)聯(lián)的解壓塊邊界元數(shù)據(jù)。
在方框808中,計算設(shè)備可以確定該壓縮頁面的哪個解壓塊包含該存儲器訪問請求的代碼指令。由于解壓塊邊界元數(shù)據(jù)可以將未壓縮頁面中的位置與壓縮頁面的解壓塊邊界位置進(jìn)行關(guān)聯(lián),因此計算設(shè)備可以使用這些關(guān)聯(lián)來確定代碼指令在壓縮頁面中的位置。例如,可以將壓縮頁面的解壓塊限制在解壓塊邊界元數(shù)據(jù)中所標(biāo)識的解壓塊邊界之間的任意一側(cè)。包含解壓塊邊界元數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),可以將這些位置與未壓縮頁面中的等同位置進(jìn)行關(guān)聯(lián)??梢詫⒋鎯ζ髟L問請求中包括的地址與未壓縮頁面的等同位置進(jìn)行比較,以確定該存儲器訪問地址落入等同的位置中的哪些之間。使用該信息,計算設(shè)備可以確定該壓縮代碼指令的位置是位于被解壓塊邊界所限定的解壓塊之中,該解壓塊邊界與等同的未壓縮頁面位置相關(guān)聯(lián),存儲器訪問地址落入該等同的未壓縮頁面位置之間。
在方框810中,計算設(shè)備可以確定對壓縮頁面的哪些解壓塊進(jìn)行解壓縮。在一個方面,要進(jìn)行解壓縮的解壓塊至少包括:包含該存儲器訪問請求的代碼指令的解壓塊。在各個方面,要進(jìn)行解壓縮的解壓塊還可以取決于實現(xiàn)的解壓縮方案。如上面所討論的,解壓縮方案可以包括利用代碼指令的局部性,這可以包括:選擇與包含該存儲器訪問請求的代碼指令的解壓塊緊鄰的解壓塊。另一種解壓縮方案可以包括:選擇壓縮頁面的一端和包含該存儲器訪問請求的代碼指令的解壓塊之間的解壓塊,以在對解壓塊進(jìn)行解壓縮時利用所產(chǎn)生的回溯機(jī)會。
在方框812中,計算設(shè)備可以將故障代碼或者異常代碼替換用于在方框810中沒有被指定用于解壓的該壓縮頁面的解壓塊。該故障代碼或者異常代碼可以是配置為引起錯誤處理函數(shù)的特定代碼,如下面所描述的。在一個方面,該故障代碼或者異常代碼可以包括:將解壓塊替換為字符串或者常量或者某種數(shù)據(jù)模式(例如,全零值)。
在方框814中,計算設(shè)備可以對在方框810中確定的解壓塊進(jìn)行解壓縮,以訪問該存儲器訪問請求的代碼指令。一旦所確定的解壓塊的解壓縮完成并且壓縮頁面的剩余解壓塊被故障代碼或者異常代碼所替換,該解壓縮就可以終止。在方框816中,計算設(shè)備可能遭遇并處理由于在方框812中替代于解壓塊的故障代碼或異常代碼所觸發(fā)的故障或者異常。在一個方面,對故障或異常進(jìn)行處理可以涉及:對壓縮頁面的剩余部分的解壓縮進(jìn)行調(diào)度或者延遲到稍后時間。在一個方面,對故障或異常進(jìn)行處理可以涉及:將剩余解壓塊的解壓縮遷移或調(diào)度到與用于執(zhí)行已解壓縮代碼指令的硬件組件不同的硬件組件上。在一個方面,對故障或異常進(jìn)行處理可以涉及:將已解壓縮代碼指令的執(zhí)行遷移或調(diào)度到與用于對剩余解壓塊進(jìn)行解壓縮的硬件組件不同的硬件組件上。在一個方面,對故障或異常進(jìn)行處理可以涉及:在相同的硬件組件上,以時間切片方式,來調(diào)度對已解壓縮代碼指令的執(zhí)行和對剩余解壓塊的解壓縮。
在方框818中,計算設(shè)備可以執(zhí)行該存儲器訪問請求的已解壓縮代碼指令。在方框820中,計算設(shè)備可以對壓縮頁面的剩余解壓塊進(jìn)行解壓縮。如上所述,可以在壓縮頁面的剩余解壓塊的解壓縮之前或者與之同時,來實現(xiàn)已解壓縮代碼指令的執(zhí)行。執(zhí)行與解壓縮的同時發(fā)生可以在分別的硬件組件上并行地發(fā)生,或者在相同的硬件組件上以時間切片方式來發(fā)生。
可以在各種各樣的計算系統(tǒng)中實現(xiàn)各個方面(其包括但不限于上面參照圖1-8所討論的方面),其可以包括適合于結(jié)合圖9中所示出的各個方面來使用的示例性移動計算設(shè)備。移動計算設(shè)備900可以包括耦合到觸摸屏控制器904和內(nèi)部存儲器906的處理器902。處理器902可以是被指定用于通用或特定處理任務(wù)的一個或多個多核集成電路。內(nèi)部存儲器906可以是易失性存儲器或非易失性存儲器,還可以是安全和/或加密存儲器,或者非安全和/或非加密存儲器、或者其任意組合??梢岳玫拇鎯ζ黝愋偷睦影ǖ幌抻冢篸dr、lpddr、gddr、wideio、ram、sram、dram、p-ram、r-ram、m-ram、stt-ram和嵌入式dram。觸摸屏控制器904和處理器902還可以耦合到觸摸屏面板912,例如,電阻式感應(yīng)觸摸屏、電容感應(yīng)觸摸屏、紅外線感應(yīng)觸摸屏等等。另外,計算設(shè)備900的顯示器并不必須具有觸摸屏能力。
移動計算設(shè)備900可以具有用于發(fā)送和接收通信的一個或多個無線信號收發(fā)機(jī)908(例如,peanut、bluetooth、zigbee、wi-fi、rf無線電裝置)和天線910,它們彼此之間相耦合和/或耦合到處理器902。收發(fā)機(jī)908和天線910可以結(jié)合上面所提及的電路來使用,以實現(xiàn)各種無線傳輸協(xié)議棧和接口。移動計算設(shè)備900可以包括蜂窩網(wǎng)絡(luò)無線調(diào)制解調(diào)器芯片916,后者實現(xiàn)經(jīng)由蜂窩網(wǎng)絡(luò)的通信并耦合到處理器。
移動計算設(shè)備900可以包括耦合到處理器902的外圍設(shè)備連接接口918。外圍設(shè)備連接接口918可以被單獨地配置為接受一種類型的連接,或者可以被配置為接受多種類型的物理和通信連接、共同或?qū)S羞B接(例如,usb、火線、thunderbolt或pcie)。此外,外圍設(shè)備連接接口918還可以耦合到類似配置的外圍設(shè)備連接端口(沒有示出)。
此外,移動計算設(shè)備900還可以包括用于提供音頻輸出的揚(yáng)聲器914。此外,移動計算設(shè)備900還可以包括使用塑料、金屬、或材料的組合所構(gòu)成的殼體920,以包含本文所討論的所有部件或者一些部件。移動計算設(shè)備900可以包括耦合到處理器902的電源922,例如一次性或可充電電池。此外,該可充電電池還可以耦合到外圍設(shè)備連接端口,以便從移動計算設(shè)備900之外的源接收充電電流。此外,移動計算設(shè)備900還可以包括用于接收用戶輸入的物理按鍵924。此外,移動計算設(shè)備900還可以包括用于打開和關(guān)閉移動計算設(shè)備900的電源按鍵926。
各個方面(其包括但不限于上面參照圖1-8所討論的方面)可以實現(xiàn)在各種各樣的計算系統(tǒng)中,其可以包括各種各樣的移動計算設(shè)備,例如,如圖10中所示的膝上型計算機(jī)1000。很多膝上型計算機(jī)包括觸摸板觸摸接口1017,后者用作該計算機(jī)的指向設(shè)備,故可以接收拖動、滾動和滑動手勢(其類似于上面所描述的以及在裝備有觸摸屏顯示器的計算設(shè)備上所實現(xiàn)的那些手勢)。通常,膝上型計算機(jī)1000包括耦合到易失性存儲器1012和大容量非易失性存儲器(例如,閃存的硬盤驅(qū)動器1013)的處理器1011。另外,計算機(jī)1000可以具有用于發(fā)送和接收電磁輻射的一付或多付天線1008,這些天線1008可以連接到無線數(shù)據(jù)鏈路和/或耦合到處理器1011的蜂窩電話收發(fā)機(jī)1016。此外,計算機(jī)1000還可以包括耦合到處理器1011的軟盤驅(qū)動器1014和壓縮光盤(cd)驅(qū)動器1015。在筆記本配置中,計算機(jī)殼體包括全部都耦合到處理器1011的觸摸板1017、鍵盤1018和顯示器1019。該計算設(shè)備的其它配置可以包括(例如,經(jīng)由usb輸入)耦合到處理器的計算機(jī)鼠標(biāo)或者跟蹤球,如公眾所知道的,這些部件也可以結(jié)合各個方面來使用。
本文的各個方面(其包括但不限于上面參照圖1-8所討論的方面)可以實現(xiàn)在各種各樣的計算系統(tǒng)中,這些計算系統(tǒng)可以包括用于將數(shù)據(jù)壓縮在服務(wù)器高速緩沖存儲器中的各種各樣的商業(yè)可用的服務(wù)器中的任何一種。圖11描繪了一種示例性服務(wù)器1100。通常,這種服務(wù)器1100包括耦合到易失性存儲器1102和大容量非易失性存儲器(例如,磁盤驅(qū)動器1104)的一個或多個多核處理器組件1101。如圖11中所示,可以通過將多核處理器組件1101插入到組裝的架中,來將其增加到服務(wù)器1100中。此外,服務(wù)器1100還可以包括耦合到處理器1101的軟盤驅(qū)動器、壓縮光盤(cd)或dvd光盤驅(qū)動器1106。此外,服務(wù)器1100還可以包括耦合到多核處理器組件1101的網(wǎng)絡(luò)接入端口1103,以便與網(wǎng)絡(luò)1105(例如,耦合到其它廣播系統(tǒng)計算機(jī)和服務(wù)器的局域網(wǎng)、互聯(lián)網(wǎng)、公眾交換電話網(wǎng)、和/或蜂窩數(shù)據(jù)網(wǎng)絡(luò)(如,cdma、tdma、gsm、pcs、3g、4g、lte或者任何其它類型的蜂窩數(shù)據(jù)網(wǎng)絡(luò)))建立網(wǎng)絡(luò)接口連接。
用于在可編程處理器上運行以執(zhí)行本文的各個方面的操作的計算機(jī)程序代碼或“程序代碼”,可以利用諸如c、c++、c#、smalltalk、java、javascript、visualbasic、結(jié)構(gòu)化查詢語言(例如,transact-sql)、perl之類的高級編程語言來編寫,或者利用各種其它編程語言來編寫。如本申請中所使用的計算機(jī)可讀存儲介質(zhì)上所存儲的程序代碼或程序,可以指代其格式是處理器可理解的機(jī)器語言代碼(例如,目標(biāo)代碼)。
很多計算設(shè)備操作系統(tǒng)內(nèi)核被組織為用戶空間(非特權(quán)代碼運行的空間)和內(nèi)核空間(特權(quán)代碼運行的空間)。這種分隔在android和其它通用公共許可證(gpl)環(huán)境中具有特別的重要性,其中在這些環(huán)境中,作為內(nèi)核空間的一部分的代碼必須是gpl許可的,而在用戶空間中運行的代碼可以不是gpl許可的。應(yīng)當(dāng)理解的是,這里所討論的各種軟件組件/模塊可以實現(xiàn)在內(nèi)核空間中,也可以實現(xiàn)在用戶空間中,除非另外明確指出。
上述的方法描述和處理流程圖僅僅是用作為說明性例子來提供的,而不是旨在要求或者隱含著必須以所給出的順序來執(zhí)行各個方面的操作。如本領(lǐng)域普通技術(shù)人員所應(yīng)當(dāng)理解的,可以以任何順序來執(zhí)行上述的方面中的操作順序。諸如“其后”、“轉(zhuǎn)而”、“接著”等等之類的詞語,并不旨在限制這些操作的順序;這些詞語僅僅只是用于引導(dǎo)讀者遍歷該方法的描述。此外,任何對權(quán)利要求元素的單數(shù)引用(例如,使用冠詞“一個(a)”、“某個(an)”或者“該(the)”),不應(yīng)被解釋為將該元素限制為單數(shù)形式。
結(jié)合本文的各個方面描述的各種示例性的邏輯框、模塊、電路和算法操作均可以實現(xiàn)成電子硬件、計算機(jī)軟件或二者的組合。為了清楚地表示硬件和軟件之間的這種可交換性,上面對各種示例性的組件、框、模塊、電路和操作均圍繞其功能進(jìn)行了總體描述。至于這種功能是實現(xiàn)成硬件還是實現(xiàn)成軟件,取決于特定的應(yīng)用和對整個系統(tǒng)所施加的設(shè)計約束。熟練的技術(shù)人員可以針對每個特定應(yīng)用,以變通的方式實現(xiàn)所描述的功能,但是,這種實現(xiàn)決策不應(yīng)解釋為使得背離本發(fā)明的保護(hù)范圍。
可以用被設(shè)計用于執(zhí)行本文所述功能的通用處理器、數(shù)字信號處理器(dsp)、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)或其它可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件或者其任意組合,來實現(xiàn)或執(zhí)行用于實現(xiàn)結(jié)合本文所公開的方面描述的各種示例性邏輯、邏輯框、模塊和電路的硬件。通用處理器可以是微處理器,或者,該處理器也可以是任何常規(guī)的處理器、控制器、微控制器或者狀態(tài)機(jī)。處理器也可以實現(xiàn)為計算設(shè)備的組合,例如,dsp和微處理器的組合、若干微處理器、一個或多個微處理器與dsp內(nèi)核的結(jié)合,或者任何其它此種結(jié)構(gòu)。替代地,一些操作或方法可以由特定于給定的功能的電路來執(zhí)行。
在一個或多個方面,本文所述功能可以用硬件、軟件、固件或它們?nèi)我饨M合的方式來實現(xiàn)。當(dāng)在軟件中實現(xiàn)時,可以將這些功能作為一個或多個指令或代碼存儲在非臨時性計算機(jī)可讀介質(zhì)或者非臨時性處理器可讀介質(zhì)上。本文所公開的方法或算法的操作,可以體現(xiàn)在處理器可執(zhí)行軟件模塊中,后者可以位于非臨時性計算機(jī)可讀存儲介質(zhì)或處理器可讀存儲介質(zhì)上。非臨時性計算機(jī)可讀或處理器可讀存儲介質(zhì)可以是計算機(jī)或處理器能夠存取的任何存儲介質(zhì)。舉例而言,但非做出限制,這種非臨時性計算機(jī)可讀介質(zhì)或者處理器可讀介質(zhì)可以包括ram、rom、eeprom、閃存、cd-rom或其它光盤存儲器、磁盤存儲器或其它磁存儲設(shè)備、或者能夠用于存儲具有指令或數(shù)據(jù)結(jié)構(gòu)形式的期望的程序代碼并能夠由計算機(jī)進(jìn)行存取的任何其它介質(zhì)。如本文所使用的,磁盤和光盤包括壓縮光盤(cd)、激光盤、光盤、數(shù)字通用光盤(dvd)、軟盤和藍(lán)光盤,其中磁盤通常磁性地復(fù)制數(shù)據(jù),而光盤則用激光來光學(xué)地復(fù)制數(shù)據(jù)。上述的組合也包括在非臨時性計算機(jī)可讀介質(zhì)和處理器可讀介質(zhì)的保護(hù)范圍之內(nèi)。另外,方法或算法的操作可以作為代碼和/或指令的一個或者任意組合或集合,位于非臨時性處理器可讀介質(zhì)和/或計算機(jī)可讀介質(zhì)上,其中該非臨時性處理器可讀介質(zhì)和/或計算機(jī)可讀介質(zhì)可以并入到計算機(jī)程序產(chǎn)品中。
為使本領(lǐng)域任何普通技術(shù)人員能夠?qū)嵤┗蛘呤褂帽景l(fā)明,上面圍繞所公開的方面進(jìn)行了描述。對于本領(lǐng)域普通技術(shù)人員來說,對這些方面的各種修改是顯而易見的,并且,本申請定義的總體原理也可以在不脫離本發(fā)明的精神或保護(hù)范圍的基礎(chǔ)上應(yīng)用于其它方面。因此,本發(fā)明并不限于本文所示出的方面,而是符合與所附權(quán)利要求書和本文公開的原理和新穎性特征相一致的最廣范圍。