P標(biāo)識(shí)位250可以被清零。P標(biāo)識(shí)位250為I的緩存線(xiàn)在第一次命中后,其命中H標(biāo)識(shí)位220可以不置I。
[0039]如圖3所示,本實(shí)施例的帶P標(biāo)識(shí)位的緩存線(xiàn)在發(fā)生替換時(shí)選擇被替換緩存線(xiàn)的過(guò)程如下:
[0040](310)系統(tǒng)運(yùn)行并判斷是否有不含有效信息的非法的緩存線(xiàn);是,則替換V標(biāo)識(shí)位為零的緩存線(xiàn),用來(lái)存放新填入的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(320);
[0041](320)判定是否有H標(biāo)識(shí)位和P標(biāo)識(shí)位同時(shí)為零的緩存線(xiàn);是,則替換H標(biāo)識(shí)位和P標(biāo)識(shí)位都為零的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(330);
[0042](330)判定是否有H標(biāo)識(shí)位為零而P標(biāo)識(shí)位不為零的緩存線(xiàn);是,則替換H標(biāo)識(shí)位為零而P標(biāo)識(shí)位為I的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(340);
[0043](340)判定是否有H標(biāo)識(shí)位為零的緩存線(xiàn);是,則替換H標(biāo)識(shí)位為零的緩存線(xiàn),并結(jié)束進(jìn)程;否,則替換H標(biāo)識(shí)位為I的緩存線(xiàn),并結(jié)束進(jìn)程。
[0044]實(shí)施例2
[0045]如圖4A、5A所示,本實(shí)施例中的每條緩存線(xiàn)有TAG存儲(chǔ)區(qū)450,Data存儲(chǔ)區(qū)460,和4個(gè)標(biāo)識(shí)位:V標(biāo)識(shí)位410,H標(biāo)識(shí)位420,A標(biāo)識(shí)位430和D標(biāo)識(shí)位440。其中,V標(biāo)識(shí)位410代表緩存線(xiàn)為合法有效(Valid) ;H標(biāo)識(shí)位420表示緩存線(xiàn)被命中(Hit)過(guò),在緩存線(xiàn)最初裝入時(shí),H標(biāo)識(shí)位420被設(shè)置為零,若緩存線(xiàn)命中,則置為I ;A標(biāo)識(shí)位430標(biāo)識(shí)該緩存線(xiàn)已經(jīng)被替換算法分配(Allocated),此標(biāo)識(shí)位用于提醒替換算法不要重復(fù)分配同一條緩存線(xiàn)被替換;D標(biāo)識(shí)位440表示該緩存線(xiàn)的內(nèi)容曾經(jīng)被改動(dòng)過(guò)(Dirty),在被替換出緩存后,需要將改變后的內(nèi)容寫(xiě)入內(nèi)存。
[0046]本實(shí)施例與實(shí)施例1相比,其區(qū)別在于本緩存線(xiàn)的結(jié)構(gòu)中沒(méi)有用于區(qū)別預(yù)取(Prefetch)內(nèi)容和即時(shí)(Demand Fetch)內(nèi)容的P標(biāo)識(shí)位250。當(dāng)命中H標(biāo)識(shí)位為I的緩存線(xiàn)的數(shù)目達(dá)到一定閾值或者滿(mǎn)足一定條件時(shí),緩存中命中H標(biāo)識(shí)位為I的緩存線(xiàn)的命中H標(biāo)識(shí)位將被全部或者部分清零。
[0047]圖4B和圖4A相比,每條緩存線(xiàn)多了一個(gè)Used標(biāo)識(shí)位,簡(jiǎn)稱(chēng)U標(biāo)識(shí)位451。當(dāng)緩存線(xiàn)第一次載人緩存時(shí),U標(biāo)識(shí)位451置I。在替換時(shí),U標(biāo)識(shí)位451為I的緩存線(xiàn)的優(yōu)先級(jí)高于U標(biāo)識(shí)位451為O的緩存線(xiàn)。也就是說(shuō),同等條件下,U標(biāo)識(shí)位451為O的緩存線(xiàn)先于U標(biāo)識(shí)位451為I的緩存線(xiàn)被替換出去。當(dāng)U標(biāo)識(shí)位451被置為I的緩存線(xiàn)的數(shù)目超過(guò)一定的閾值,或者達(dá)到某條件后,緩存中U標(biāo)識(shí)位451為I的緩存線(xiàn)的U標(biāo)識(shí)位451將被全部或者部分清零。
[0048]如圖5A所示,采用本實(shí)施例圖4A的緩存線(xiàn)的存儲(chǔ)結(jié)構(gòu)時(shí)的替換過(guò)程如下:
[0049](510)系統(tǒng)運(yùn)行并判定V標(biāo)識(shí)位是否有為零的緩存線(xiàn);是,則替換該非法的緩存線(xiàn),并結(jié)束過(guò)程;否,則執(zhí)行步驟(520);
[0050](520)判定H標(biāo)識(shí)位是否有為零的緩存線(xiàn);是,則替換該非法的緩存線(xiàn),并結(jié)束進(jìn)程;否,則替換H標(biāo)識(shí)位為I的緩存線(xiàn),并結(jié)束進(jìn)程。
[0051]如圖5B所示,當(dāng)采用圖4B所示的緩存線(xiàn)存儲(chǔ)結(jié)構(gòu)時(shí)的替換過(guò)程如下:
[0052](530)系統(tǒng)運(yùn)行并判定V標(biāo)識(shí)位是否有為零的緩存線(xiàn);是,則替換該緩存線(xiàn),并結(jié)束過(guò)程;否,則執(zhí)行步驟(540);
[0053](540)判定是否有H標(biāo)識(shí)位和U標(biāo)識(shí)位都為零的緩存線(xiàn);是,則替換該緩存線(xiàn),并結(jié)束過(guò)程;否,則執(zhí)行步驟(550);
[0054](550)判定是否有H標(biāo)識(shí)位為零,U標(biāo)識(shí)位為I的緩存線(xiàn);是,則替換該緩存線(xiàn),并結(jié)束過(guò)程;否,則執(zhí)行步驟(560);
[0055](560)替換H標(biāo)識(shí)位為I的緩存線(xiàn),結(jié)束過(guò)程。
[0056]實(shí)施例3
[0057]如圖6、7所示,本實(shí)施例中的緩存線(xiàn)有TAG存儲(chǔ)區(qū)670,Data存儲(chǔ)區(qū)680,和6個(gè)標(biāo)識(shí)位:V標(biāo)識(shí)位610,H標(biāo)識(shí)位620,A標(biāo)識(shí)位630,D標(biāo)識(shí)位640,P標(biāo)識(shí)位650和U標(biāo)識(shí)位660。
[0058]其中,V標(biāo)識(shí)位610代表緩存線(xiàn)為合法有效(Valid) ;H標(biāo)識(shí)位620表示緩存線(xiàn)被命中(Hit)過(guò),在緩存線(xiàn)最初裝入時(shí),H標(biāo)識(shí)位620被設(shè)置為零,若緩存線(xiàn)命中,則置為I ;A標(biāo)識(shí)位630標(biāo)識(shí)該緩存線(xiàn)已經(jīng)被替換算法分配(Allocated) ;D標(biāo)識(shí)位640表示該緩存線(xiàn)的內(nèi)容曾經(jīng)被改動(dòng)過(guò)(Dirty),在被替換出緩存后,需要將改變后的內(nèi)容寫(xiě)入內(nèi)存;P標(biāo)識(shí)位650若為1,表示該緩存線(xiàn)為預(yù)取(Prefetch)內(nèi)容,若為零表示該緩存線(xiàn)為即時(shí)(DemandFetch)內(nèi)容;U標(biāo)識(shí)位660,在緩存線(xiàn)初次被裝入緩存時(shí),置為1,表示該緩存線(xiàn)為新內(nèi)容。
[0059]本實(shí)施例與實(shí)施例1相比,在其緩存線(xiàn)中增加了一個(gè)U標(biāo)識(shí)位660。根據(jù)CPU系統(tǒng)的實(shí)際使用環(huán)境的不同特征,為了控制預(yù)取數(shù)據(jù)在緩存中的停留時(shí)間,對(duì)于預(yù)取(Prefetch)內(nèi)容,U標(biāo)識(shí)位660可以置為I或者零。
[0060]本實(shí)施例的緩存線(xiàn)的存儲(chǔ)結(jié)構(gòu)的緩存的替換過(guò)程如下:
[0061](710)系統(tǒng)運(yùn)行并判斷是否有H標(biāo)識(shí)位、P標(biāo)識(shí)位和U標(biāo)識(shí)位都為零的緩存線(xiàn);是,則執(zhí)行步驟(720)替換H標(biāo)識(shí)位、P標(biāo)識(shí)位和U標(biāo)識(shí)位都為零的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(730);
[0062](730)判斷是否有H標(biāo)識(shí)位和U標(biāo)識(shí)位都為零,P標(biāo)識(shí)位為I的緩存線(xiàn);是,則執(zhí)行步驟(740)替換H標(biāo)識(shí)位和U標(biāo)識(shí)位為零,而P標(biāo)識(shí)位為I的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(750);
[0063](750)判斷是否有H標(biāo)識(shí)位和P標(biāo)識(shí)位都為零,U標(biāo)識(shí)位為I的緩存線(xiàn);是,則執(zhí)行步驟(760)替換H標(biāo)識(shí)位和P標(biāo)識(shí)位都為零,U標(biāo)識(shí)位為I的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(770);
[0064](770)判斷是否有H標(biāo)識(shí)位為零,P標(biāo)識(shí)位和U標(biāo)識(shí)位都為I的緩存線(xiàn);是,則執(zhí)行步驟(780)替換H標(biāo)識(shí)位為零,P標(biāo)識(shí)位和U標(biāo)識(shí)位都為I的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(715);
[0065](715)判斷是否有H標(biāo)識(shí)位為1,P標(biāo)識(shí)位和U標(biāo)識(shí)位都為O的緩存線(xiàn);是,則執(zhí)行步驟(725)替換H標(biāo)識(shí)位為1,P標(biāo)識(shí)位和U標(biāo)識(shí)位都為O的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(735);
[0066](735)判斷是否有H標(biāo)識(shí)位和P標(biāo)識(shí)位都為1,U標(biāo)識(shí)位為O的緩存線(xiàn);是,則執(zhí)行步驟(745)替換H標(biāo)識(shí)位和P標(biāo)識(shí)位都為1,U標(biāo)識(shí)位為O的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(755);
[0067](755)判斷是否有H標(biāo)識(shí)位和U標(biāo)識(shí)位都為1,P標(biāo)識(shí)位為零的緩存線(xiàn);是,則執(zhí)行步驟(765)替換H標(biāo)識(shí)位和U標(biāo)識(shí)位都為1,P標(biāo)識(shí)位為零的緩存線(xiàn),并結(jié)束進(jìn)程;否,則執(zhí)行步驟(775);
[0068](775)替換H標(biāo)識(shí)位,P標(biāo)識(shí)位和U標(biāo)識(shí)位都為I的緩存線(xiàn),并結(jié)束進(jìn)程。
[0069]預(yù)取的指令和數(shù)據(jù)所在的緩存線(xiàn)填入緩存中的過(guò)程如圖8所示,即首先將預(yù)取得到的指令和數(shù)據(jù)的緩存線(xiàn)按其地址映射到CPU緩存的相應(yīng)的組(Set)中。如果該組中的緩存線(xiàn)的Hit標(biāo)識(shí)位全部被設(shè)置為1,或者組中Hit標(biāo)識(shí)位已經(jīng)被設(shè)置為I的緩存線(xiàn)的數(shù)目超過(guò)一個(gè)預(yù)先設(shè)定的閾值,比如一半或者3/4的緩存線(xiàn)已經(jīng)設(shè)置了 Hit標(biāo)識(shí)位,則此次預(yù)取得到的指令和數(shù)據(jù)的緩存線(xiàn)不填入緩存中,被拋棄;否則繼續(xù)預(yù)取得到的緩存線(xiàn)的填入操作。
[0070]圖9A為預(yù)取內(nèi)存訪問(wèn)命令在內(nèi)存控制器MMU中的一種調(diào)度方法,如圖所示,即當(dāng)系統(tǒng)開(kāi)始運(yùn)行時(shí),首先判定內(nèi)容訪問(wèn)是否預(yù)取?是,則判定預(yù)取內(nèi)存訪問(wèn)命令的地址所映射的內(nèi)存通道是否為空閑;否,則執(zhí)行該預(yù)取內(nèi)存訪問(wèn)命令并結(jié)束進(jìn)程。若預(yù)取內(nèi)存訪問(wèn)命令的地址所映射的內(nèi)存通道為空閑,則預(yù)取該次預(yù)取內(nèi)存訪問(wèn)命令取消,否則便放棄此次預(yù)取內(nèi)存訪問(wèn)。
[0071]圖9B為預(yù)取內(nèi)存訪問(wèn)命令在內(nèi)存控制器MMU中的另一種調(diào)度方法,如圖所示,即在每個(gè)內(nèi)存通道設(shè)置一個(gè)等待隊(duì)列,用于存放所有內(nèi)地地址映射到此內(nèi)存通道的內(nèi)存訪問(wèn)命令。當(dāng)此隊(duì)列滿(mǎn),或者達(dá)到了設(shè)定的上限,則預(yù)取內(nèi)存訪問(wèn)命令取消,不進(jìn)入內(nèi)存通道的等待隊(duì)列;只有當(dāng)內(nèi)存通道的等待隊(duì)列未達(dá)上限,預(yù)取命令才進(jìn)入內(nèi)存通道的等待隊(duì)列。
[0072]圖10描述了本發(fā)明涉及的緩存管理方法處理“預(yù)取命中prefetch hit”的過(guò)程的一種設(shè)計(jì)。
[0073]預(yù)取Prefetch命令所請(qǐng)求的地址有可能已經(jīng)存在于CPU緩存中了,這種情況被稱(chēng)為“預(yù)取命中prefetch hit”。在圖10的設(shè)計(jì)中,緩存線(xiàn)的存儲(chǔ)結(jié)構(gòu)采用圖4的設(shè)計(jì)。WLRU緩存替換算法對(duì)“預(yù)取命中Prefetch Hit”的處理完全等同于普通的內(nèi)存訪問(wèn)的命中hit。如圖10所示,在判斷1010中,如果預(yù)取命令的地址在緩存中命中,則設(shè)置命中緩存線(xiàn)的H標(biāo)識(shí)位420為1,