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