本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,特別涉及一種地址訪問(wèn)方法及裝置。
背景技術(shù):
當(dāng)多個(gè)處理器訪問(wèn)同一個(gè)主存儲(chǔ)器中的數(shù)據(jù)時(shí),為了保證多個(gè)處理器之間的數(shù)據(jù)共享,在處理器與主存儲(chǔ)器之間可以設(shè)置有目錄高速緩沖存儲(chǔ)器(英文:cache)。目錄cache用于存儲(chǔ)主存儲(chǔ)器中所存儲(chǔ)的數(shù)據(jù)當(dāng)前被訪問(wèn)的目錄信息。
一般的,目錄cache中包含若干個(gè)存儲(chǔ)塊(英文:block),每個(gè)block中可以存儲(chǔ)主存儲(chǔ)器中存儲(chǔ)的至少一個(gè)數(shù)據(jù)所對(duì)應(yīng)的存儲(chǔ)地址的目錄。為了降低block沖突的概率,目錄cache設(shè)計(jì)成組相連結(jié)構(gòu),當(dāng)存儲(chǔ)地址訪問(wèn)目錄cache時(shí),先索引到目錄cache中的一行block,再索引到這一行block中的一個(gè)block,最后索引到block中存儲(chǔ)目錄信息的位置。
數(shù)據(jù)是存儲(chǔ)在主存儲(chǔ)器中的,每個(gè)數(shù)據(jù)在主存儲(chǔ)器中均對(duì)應(yīng)有一個(gè)存儲(chǔ)地址。與組相連結(jié)構(gòu)對(duì)應(yīng)的,一個(gè)存儲(chǔ)地址可以被劃分為組索引(英文:index)、標(biāo)簽(英文:tag)和關(guān)聯(lián)(英文:associate)三部分,這三部分分別對(duì)應(yīng)存儲(chǔ)地址的不同域段中的內(nèi)容。當(dāng)兩個(gè)存儲(chǔ)地址的index部分和tag部分對(duì)應(yīng)的內(nèi)容相同,associate部分對(duì)應(yīng)的內(nèi)容不同時(shí),將這兩個(gè)存儲(chǔ)地址稱為關(guān)聯(lián)地址。通過(guò)存儲(chǔ)地址的index索引到目錄cache中的一行block,通過(guò)將存儲(chǔ)地址的tag與這一行block中存儲(chǔ)的tag進(jìn)行比較,若tag相同,則存儲(chǔ)地址索引到一個(gè)block,最后通過(guò)associate索引到block中存儲(chǔ)的目錄信息所在的位置。
當(dāng)一個(gè)block中存儲(chǔ)的是至少兩個(gè)關(guān)聯(lián)地址的目錄時(shí),該block通常存儲(chǔ)有關(guān)聯(lián)地址中包含的相同的tag和各個(gè)關(guān)聯(lián)地址的目錄信息,每條目錄信息包括目錄狀態(tài)(英文簡(jiǎn)稱:ste)和向量(英文簡(jiǎn)稱:vect)。其中存儲(chǔ)地址所對(duì)應(yīng)的目錄信息的目錄狀態(tài)表示主存儲(chǔ)器中該存儲(chǔ)地址所存儲(chǔ)的數(shù)據(jù)當(dāng)前被訪問(wèn)的狀態(tài),包括共享狀態(tài)、讀狀態(tài)、空狀態(tài)(即當(dāng)前未被訪問(wèn))以及無(wú)效狀態(tài),向量表示訪問(wèn)主存儲(chǔ)器中該存儲(chǔ)地址所存儲(chǔ)的數(shù)據(jù)的處理器的標(biāo)識(shí),其中共享狀態(tài)、讀狀態(tài)、空狀態(tài)可以統(tǒng)稱為有效狀態(tài)。
在實(shí)際應(yīng)用中,當(dāng)主存儲(chǔ)器中的數(shù)據(jù)變成無(wú)效數(shù)據(jù)時(shí),對(duì)應(yīng)的block中的目錄狀態(tài)會(huì)被修改為無(wú)效狀態(tài),在接收到訪問(wèn)請(qǐng)求時(shí),只有目錄狀態(tài)為有效狀態(tài)的目錄信息才可能會(huì)被命中到,而目錄狀態(tài)為無(wú)效狀態(tài)的目錄信息不會(huì)被命中到。因此當(dāng)一個(gè)block中存儲(chǔ)的是至少兩個(gè)關(guān)聯(lián)地址的目錄,且僅有一條目錄的目錄狀態(tài)是有效狀態(tài)時(shí),導(dǎo)致這個(gè)block的利用率較低。
技術(shù)實(shí)現(xiàn)要素:
為了解決相關(guān)技術(shù)中當(dāng)一個(gè)block中存儲(chǔ)的是關(guān)聯(lián)地址的目錄,且僅有一條目錄信息是非無(wú)效狀態(tài),其余目錄信息均為無(wú)效狀態(tài)時(shí),導(dǎo)致這個(gè)block的利用率較低的技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供了一種地址訪問(wèn)方法及裝置。所述技術(shù)方案如下:
第一方面,提供了一種地址訪問(wèn)方法,應(yīng)用于目錄cache中,當(dāng)需要訪問(wèn)的第一數(shù)據(jù)的第一存儲(chǔ)地址訪問(wèn)目錄cache時(shí),目錄cache接收到第一請(qǐng)求,根據(jù)第一請(qǐng)求在組相連目錄cache中查找符合模式轉(zhuǎn)換條件的第一block,修改查找到的第一block中用于指示第一block為關(guān)聯(lián)模式的指示位,使得該指示位用于指示第一block為非關(guān)聯(lián)模式,然后用第一目錄字段與第二目錄字段替換第一block中指示位后面的字段。這里的第一請(qǐng)求包括需要訪問(wèn)第一數(shù)據(jù)的第一存儲(chǔ)地址,第一存儲(chǔ)地址包括第一組索引、標(biāo)簽和第一關(guān)聯(lián)。這里的符合模式轉(zhuǎn)換條件的第一block的指示位用于指示第一block為關(guān)聯(lián)模式,第一block中僅包含一條有效的第一目錄信息,另外,還要求第一block中的第一標(biāo)簽與第一存儲(chǔ)地址中的標(biāo)簽對(duì)應(yīng)的域段相同,但第一block的標(biāo)簽中需要至少包含與第一存儲(chǔ)地址中的標(biāo)簽不匹配的內(nèi)容。這里的第一目錄字段依次包括第一標(biāo)簽、第一指示項(xiàng)、第一目錄信息,這里的第一指示項(xiàng)用來(lái)指示第一目錄信息在第一block為關(guān)聯(lián)模式時(shí)所對(duì)應(yīng)的位置。這里的第二目錄字段依次包括第二標(biāo)簽、第二指示項(xiàng)和第二目錄信息,這里的第二標(biāo)簽限定的是第一存儲(chǔ)地址中的標(biāo)簽與第一標(biāo)簽不匹配的內(nèi)容,這里的第二指示項(xiàng)是第一存儲(chǔ)地址中的第一關(guān)聯(lián)的值,這里的第二目錄信息,是在目錄cache接收到第一請(qǐng)求時(shí),系統(tǒng)根據(jù)第一請(qǐng)求所請(qǐng)求的狀態(tài)以及發(fā)送第一請(qǐng)求的處理器的標(biāo)識(shí)生成的目錄信息。
由于將第一block由關(guān)聯(lián)模式轉(zhuǎn)換為非關(guān)聯(lián)模式時(shí),第一block僅保留了關(guān)聯(lián)地址中有效的一條存儲(chǔ)地址的目錄信息,刪除了關(guān)聯(lián)地址中其他無(wú)效的存儲(chǔ)地址的目錄信息,使得第一block的剩余空間還能夠存儲(chǔ)被請(qǐng)求的其他非關(guān)聯(lián)地址的目錄信息,也即第一block可以存儲(chǔ)至少兩個(gè)非關(guān)聯(lián)地址的目錄信息;因此解決了相關(guān)技術(shù)中當(dāng)一個(gè)block中存儲(chǔ)的是關(guān)聯(lián)地址的目錄,且僅有一條目錄信息是非無(wú)效狀態(tài),其余目錄信息均為無(wú)效狀態(tài)時(shí),導(dǎo)致這個(gè)block的利用率較低的技術(shù)問(wèn)題,達(dá)到了提高目錄cache的利用率的效果。
另外,通過(guò)在block中增加指示位,可以快速確定出block是關(guān)聯(lián)模式還是非關(guān)聯(lián)模式。
在第一方面的第一種可能的實(shí)施方式中,在目錄cache接收到包含第一存儲(chǔ)地址的第一請(qǐng)求之后,根據(jù)第一存儲(chǔ)地址中的第一組索引查找到目錄cache中的一行,對(duì)于這一行中的所有block,將第一存儲(chǔ)地址中的標(biāo)簽與這一行中每個(gè)block中存儲(chǔ)的標(biāo)簽進(jìn)行比較,當(dāng)?shù)谝淮鎯?chǔ)地址中的標(biāo)簽與查找到的這一行中的每個(gè)block中的標(biāo)簽都不同,并且這一行block均被占用時(shí),就從這一行所有block中找出符合模式轉(zhuǎn)換條件的block,確定為第一block,用于后續(xù)的轉(zhuǎn)換。
由于是在根據(jù)第一存儲(chǔ)地址中的第一組索引查找到的一行block都被占用,且這一行block中的標(biāo)簽與第一存儲(chǔ)地址中的標(biāo)簽均不同時(shí),選取符合模式轉(zhuǎn)換條件的block作為第一block,相當(dāng)于從原本已經(jīng)存儲(chǔ)關(guān)聯(lián)地址的目錄信息的block中刪除無(wú)效狀態(tài)的目錄信息,以使得該block多出額外的空間來(lái)存儲(chǔ)其他存儲(chǔ)地址的目錄信息,從而使得目錄cache的利用率提高。
結(jié)合第一方面或者第一方面的第一種可能的實(shí)施方式,在第二種可能的實(shí)施方式中,當(dāng)?shù)谝籦lock已經(jīng)存儲(chǔ)了兩個(gè)非關(guān)聯(lián)地址的目錄字段時(shí),第一block的剩余位寬還允許存儲(chǔ)至少一個(gè)非關(guān)聯(lián)地址的目錄字段,則檢測(cè)訪問(wèn)目錄cache的第二請(qǐng)求是否符合在第一block中添加非關(guān)聯(lián)地址的添加條件,若符合,則將第二請(qǐng)求對(duì)應(yīng)的目錄字段添加進(jìn)已經(jīng)存儲(chǔ)的數(shù)據(jù)后面。這里的添加條件是指第二請(qǐng)求包括需要訪問(wèn)的第二數(shù)據(jù)的第二存儲(chǔ)地址中的組索引與第一存儲(chǔ)地址中的第一組索引相同,另外,第二存儲(chǔ)地址中的標(biāo)簽與第一block中存儲(chǔ)的所有標(biāo)簽均不同,也就是第二請(qǐng)求沒(méi)有命中第一block,第二存儲(chǔ)地址中的標(biāo)簽與第一block的第一標(biāo)簽的域段要相同,并且第二存儲(chǔ)地址中的標(biāo)簽至少包含與第一標(biāo)簽不匹配的內(nèi)容。
由于第一block的位寬可能允許存儲(chǔ)超過(guò)兩個(gè)非關(guān)聯(lián)地址的目錄字段,因此只要符合添加條件,就可以繼續(xù)往第一block中存儲(chǔ)非關(guān)聯(lián)地址的目錄字段,從而將block充分利用起來(lái),提高目錄cache的利用率。
結(jié)合第一方面、第一方面的第一種可能的實(shí)施方式或者第一方面的第二種可能的實(shí)施方式,在第三種可能的實(shí)施方式中,第二請(qǐng)求對(duì)應(yīng)的目錄字段依次包括:第三標(biāo)簽、第三指示項(xiàng)和第三目錄信息。這里的第三標(biāo)簽限定的是第二存儲(chǔ)地址中的標(biāo)簽中與第一標(biāo)簽不匹配的內(nèi)容,這里的第三指示項(xiàng)的值為第二存儲(chǔ)地址中的關(guān)聯(lián),這里的第三目錄信息是在第二請(qǐng)求訪問(wèn)目錄cache時(shí),系統(tǒng)根據(jù)第二請(qǐng)求所請(qǐng)求的狀態(tài)以及發(fā)送第二請(qǐng)求的處理器生成的目錄信息。
由于第一block中存儲(chǔ)的是非關(guān)聯(lián)地址的目錄字段,因此需要存儲(chǔ)標(biāo)簽、指示項(xiàng)和目錄信息,從而區(qū)分不同的存儲(chǔ)地址,并通過(guò)指示項(xiàng)可以確定出目錄信息在關(guān)聯(lián)模式的block中的存儲(chǔ)位置。
結(jié)合第一方面、第一方面的第一種可能的實(shí)施方式、第一方面的第二種可能的實(shí)施方式或者第一方面的第三種可能的實(shí)施方式,在第四種可能的實(shí)施方式中,當(dāng)有第三存儲(chǔ)地址訪問(wèn)目錄cache時(shí),即目錄cache接收到第三請(qǐng)求,當(dāng)?shù)谌?qǐng)求能夠命中目錄cache中的一個(gè)非關(guān)聯(lián)模式的block,并且與第三存儲(chǔ)地址中的標(biāo)簽相同的第四標(biāo)簽后的指示項(xiàng)與第三存儲(chǔ)地址中的關(guān)聯(lián)的值不等,稱該block為第二block,對(duì)第二block進(jìn)行非關(guān)聯(lián)模式至關(guān)聯(lián)模式的轉(zhuǎn)換,具體是先調(diào)整第二block中指示第二block為非關(guān)聯(lián)模式的指示位,使得指示位用于指示第二block為關(guān)聯(lián)模式,將第三請(qǐng)求定義的標(biāo)簽添加到指示位的后面,然后在第二block中獲取第四標(biāo)簽對(duì)應(yīng)的目錄字段,根據(jù)目錄字段中的指示項(xiàng),將目錄字段中的目錄信息移至該指示項(xiàng)所指示的關(guān)聯(lián)模式的第二block中的對(duì)應(yīng)位置,最后將第三請(qǐng)求的目錄信息添加至關(guān)聯(lián)模式的第二block中。這里的第三請(qǐng)求包括需要訪問(wèn)的第三數(shù)據(jù)的第三存儲(chǔ)地址,第三存儲(chǔ)地址包括第二組索引、標(biāo)簽和第二關(guān)聯(lián)。這里的被命中的非關(guān)聯(lián)模式的第二block,是指第二block中的第四標(biāo)簽與第三請(qǐng)求定義的標(biāo)簽相同,第二block中的第四標(biāo)簽后的指示項(xiàng)的值與第三存儲(chǔ)地址中的第二關(guān)聯(lián)的值不等。
由于在命中一個(gè)非關(guān)聯(lián)模式的第二block,且第二block中對(duì)應(yīng)的指示項(xiàng)的值與第三存儲(chǔ)地址中的第二關(guān)聯(lián)的值不等時(shí),表明第二block中存儲(chǔ)有一個(gè)目錄信息所對(duì)應(yīng)的存儲(chǔ)地址與第三請(qǐng)求中的第三存儲(chǔ)地址是關(guān)聯(lián)地址,而關(guān)聯(lián)模式的block中只需要存儲(chǔ)一個(gè)標(biāo)簽,另外不需要存儲(chǔ)指示項(xiàng),因此將第二block由非關(guān)聯(lián)模式轉(zhuǎn)換為關(guān)聯(lián)模式,可以空出部分字段存儲(chǔ)更多的關(guān)聯(lián)地址。
第二方面,提供了一種地址訪問(wèn)裝置,該地址訪問(wèn)裝置包括至少一個(gè)單元,該地址訪問(wèn)裝置的各個(gè)單元分別用于實(shí)現(xiàn)上述第一方面的地址訪問(wèn)方法中對(duì)應(yīng)的步驟。
第三方面,提供了一種硬件設(shè)備,該硬件設(shè)備包括:處理器、與處理器相連接的主存儲(chǔ)器和高速緩沖存儲(chǔ)器,該高速緩沖存儲(chǔ)器用于實(shí)現(xiàn)上述第一方面的地址訪問(wèn)方法中對(duì)應(yīng)的步驟。
第四方面,提供了一種計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)存儲(chǔ)用于實(shí)現(xiàn)第一方面所提供的地址訪問(wèn)方法的指令。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一個(gè)實(shí)施例提供的硬件設(shè)備的結(jié)構(gòu)示意圖;
圖2是本發(fā)明一個(gè)實(shí)施例提供的存儲(chǔ)地址訪問(wèn)目錄cache的示意圖;
圖3是本發(fā)明一個(gè)實(shí)施例提供的一種關(guān)聯(lián)模式的blcok和對(duì)應(yīng)的非關(guān)聯(lián)模式的block的數(shù)據(jù)結(jié)構(gòu)圖;
圖4A是本發(fā)明一個(gè)實(shí)施例提供的一種地址訪問(wèn)方法的方法流程圖;
圖4B是本發(fā)明一個(gè)實(shí)施例提供的將關(guān)聯(lián)模式的block轉(zhuǎn)換成非關(guān)聯(lián)模式的block的示意圖;
圖4C是本發(fā)明另一個(gè)實(shí)施例提供的一種地址訪問(wèn)方法的方法流程圖;
圖4D是本發(fā)明另一個(gè)實(shí)施例提供的將關(guān)聯(lián)模式的block轉(zhuǎn)換成非關(guān)聯(lián)模式的block的示意圖;
圖4E是本發(fā)明再一個(gè)實(shí)施例提供的一種地址訪問(wèn)方法的方法流程圖;
圖4F是本發(fā)明一個(gè)實(shí)施例提供的將非關(guān)聯(lián)模式的block轉(zhuǎn)換成關(guān)聯(lián)模式的block的示意圖;
圖4G是本發(fā)明另一個(gè)實(shí)施例提供的將非關(guān)聯(lián)模式的block轉(zhuǎn)換成關(guān)聯(lián)模式的block的示意圖;
圖5是本發(fā)明一個(gè)實(shí)施例提供的一種地址訪問(wèn)裝置的結(jié)構(gòu)方框圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
為了便于對(duì)本發(fā)明各實(shí)施例的理解,首先結(jié)合圖1對(duì)本發(fā)明各實(shí)施例所涉及的硬件設(shè)備的結(jié)構(gòu)進(jìn)行說(shuō)明。
圖1是本發(fā)明一個(gè)實(shí)施例提供的硬件設(shè)備的結(jié)構(gòu)示意圖。如圖1所示,硬件設(shè)備100包括處理器110、主存儲(chǔ)器120和目錄cache 130。
主存儲(chǔ)器120用于存儲(chǔ)數(shù)據(jù),不同的數(shù)據(jù)對(duì)應(yīng)不同的存儲(chǔ)地址,處理器110可以根據(jù)存儲(chǔ)地址訪問(wèn)主存儲(chǔ)器120中對(duì)應(yīng)的數(shù)據(jù)。
處理器110包括多個(gè)不同的處理器,各個(gè)處理器均可以對(duì)主存儲(chǔ)器120中的數(shù)據(jù)進(jìn)行讀或?qū)懖僮鳌J纠缘?,處理?10包括第一處理器111、第二處理器112和第三處理器113。
由于處理器110中的多個(gè)處理器均可以訪問(wèn)主存儲(chǔ)器120中的數(shù)據(jù),為了防止一個(gè)處理器在對(duì)某一數(shù)據(jù)進(jìn)行修改時(shí),另一個(gè)訪問(wèn)該數(shù)據(jù)的處理器獲取到不正確的數(shù)據(jù)的情況,在處理器110和主存儲(chǔ)器120之間設(shè)置有目錄cache 130。
目錄cache 130是靠近主存儲(chǔ)器120的一個(gè)存儲(chǔ)空間,可以根據(jù)處理器110中各個(gè)處理器請(qǐng)求訪問(wèn)主存儲(chǔ)器120中的數(shù)據(jù)時(shí)的訪問(wèn)記錄建立目錄。處理器110在根據(jù)存儲(chǔ)地址訪問(wèn)主存儲(chǔ)器120中存儲(chǔ)的數(shù)據(jù)之前,通過(guò)存儲(chǔ)地址到目錄cache 130中查詢?cè)摂?shù)據(jù)被訪問(wèn)的情況,可以確定出處理器110能不能訪問(wèn)該數(shù)據(jù)。
結(jié)合參考圖2,其示出了存儲(chǔ)地址訪問(wèn)目錄cache的示意圖。如圖2所示,目錄cache 130中包含m行乘以n列個(gè)block,其中,m、n為大于0的整數(shù),每一行稱之為一個(gè)set,每一列稱之為一個(gè)way。
當(dāng)處理器110需要訪問(wèn)主存儲(chǔ)器120中存儲(chǔ)的數(shù)據(jù)時(shí),處理器110會(huì)向目錄cache 130發(fā)送一個(gè)包含所要訪問(wèn)的數(shù)據(jù)的存儲(chǔ)地址的訪問(wèn)請(qǐng)求,存儲(chǔ)地址被劃分為三部分:index、tag和associate。目錄cache 130通過(guò)index引索引到一個(gè)set,該set中包括n個(gè)block,通過(guò)將存儲(chǔ)地址的tag與這n個(gè)block中的tag進(jìn)行比較,若存儲(chǔ)地址的tag與其中一個(gè)block中的tag相同,則該存儲(chǔ)地址命中其中一個(gè)block,那么該存儲(chǔ)地址對(duì)應(yīng)的數(shù)據(jù)被訪問(wèn)的目錄信息記錄在該block存儲(chǔ)的四組目錄ste和vect中,這四組目錄ste和vect分別是ste0+vect0、ste1+vect1、ste2+vect2和ste3+vect3。這四組目錄ste和vect分別記錄了四個(gè)關(guān)聯(lián)地址對(duì)應(yīng)的數(shù)據(jù)被訪問(wèn)的目錄信息,通過(guò)存儲(chǔ)地址中的associate[1:0]索引到其中一組ste和vect。比如,存儲(chǔ)地址的associate[1:0]=2’b00(即存儲(chǔ)地址的第0位和第1位分別是二進(jìn)制數(shù)0和0),則該存儲(chǔ)地址的目錄信息記錄在ste0+vect0的位置;存儲(chǔ)地址的associate[1:0]=2’b01(即存儲(chǔ)地址的第0位和第1位分別是二進(jìn)制數(shù)1和0),則該存儲(chǔ)地址的目錄信息記錄在ste1+vect1的位置;存儲(chǔ)地址的associate[1:0]=2’b10(即存儲(chǔ)地址的第0位和第1位分別是二進(jìn)制數(shù)0和1),則該存儲(chǔ)地址的目錄信息記錄在ste2+vect2的位置;存儲(chǔ)地址的associate[1:0]=2’b11(即存儲(chǔ)地址的第0位和第1位分別是二進(jìn)制數(shù)1和1),則該存儲(chǔ)地址的目錄信息記錄在ste3+vect3的位置。通過(guò)存儲(chǔ)地址的associate[1:0]索引到的ste和vect中存儲(chǔ)了該數(shù)據(jù)被訪問(wèn)的目錄信息,ste表示處理器所請(qǐng)求的數(shù)據(jù)的狀態(tài),包括共享狀態(tài)、讀狀態(tài)、空狀態(tài)以及無(wú)效狀態(tài),vect表示訪問(wèn)的處理器的標(biāo)識(shí)。
在實(shí)際應(yīng)用中,當(dāng)處理器請(qǐng)求的數(shù)據(jù)的狀態(tài)為共享狀態(tài)或空狀態(tài)時(shí),下一個(gè)請(qǐng)求該數(shù)據(jù)的處理器可以向主存儲(chǔ)器120請(qǐng)求訪問(wèn)該數(shù)據(jù),當(dāng)處理器請(qǐng)求的數(shù)據(jù)的狀態(tài)為讀狀態(tài)時(shí),下一個(gè)請(qǐng)求該數(shù)據(jù)的處理器需要等到讀狀態(tài)被修改為空狀態(tài)或共享狀態(tài)后,才能到主存儲(chǔ)器120中請(qǐng)求該數(shù)據(jù),當(dāng)處理器請(qǐng)求的數(shù)據(jù)的狀態(tài)為無(wú)效狀態(tài)時(shí),則該數(shù)據(jù)為無(wú)效數(shù)據(jù)。
結(jié)合圖1舉例說(shuō)明,當(dāng)?shù)谝惶幚砥?11通過(guò)第一存儲(chǔ)地址請(qǐng)求訪問(wèn)主存儲(chǔ)器120中的第一數(shù)據(jù),且請(qǐng)求的狀態(tài)為共享狀態(tài)時(shí),目錄cache 130根據(jù)第一存儲(chǔ)地址的associate將對(duì)應(yīng)位置的ste記為共享狀態(tài),將對(duì)應(yīng)位置的vect記為第一處理器111的標(biāo)識(shí);然后,當(dāng)?shù)诙幚砥?12通過(guò)第一存儲(chǔ)地址請(qǐng)求訪問(wèn)主存儲(chǔ)器120中的第一數(shù)據(jù),且請(qǐng)求的狀態(tài)為讀狀態(tài)時(shí),目錄cache 130將上述ste中記錄的共享狀態(tài)改為讀狀態(tài),將上述vect中記錄的第一處理器111的標(biāo)識(shí)改為第二處理器112的標(biāo)識(shí);然后,當(dāng)?shù)谌幚砥?13通過(guò)第一存儲(chǔ)地址請(qǐng)求訪問(wèn)主存儲(chǔ)器120中的第一數(shù)據(jù),且請(qǐng)求的狀態(tài)為共享狀態(tài)時(shí),由于第二處理器112訪問(wèn)第一數(shù)據(jù)為讀狀態(tài),因此第三處理器113需要等待第二處理器112在使用完第一數(shù)據(jù)之后,將讀狀態(tài)改為空狀態(tài)或共享狀態(tài),第三處理器113才能使用第一數(shù)據(jù),將共享狀態(tài)和第三處理器113的標(biāo)識(shí)記錄到對(duì)應(yīng)的ste和vect的位置。
在目錄cache中,一個(gè)block中可以存儲(chǔ)有多個(gè)關(guān)聯(lián)地址的目錄信息,如圖2所示,一個(gè)block中存儲(chǔ)有4個(gè)關(guān)聯(lián)地址對(duì)應(yīng)的數(shù)據(jù)被訪問(wèn)的目錄,一個(gè)目錄包括標(biāo)簽和一組目錄信息,由于關(guān)聯(lián)地址只有associate部分的內(nèi)容不同,因此在存儲(chǔ)關(guān)聯(lián)地址的目錄的block中只需要記錄一個(gè)標(biāo)簽,該標(biāo)簽是關(guān)聯(lián)地址的標(biāo)簽。
具體的,若第一存儲(chǔ)地址和第二存儲(chǔ)地址只有associate部分的內(nèi)容不同,則第一存儲(chǔ)地址對(duì)應(yīng)的第一數(shù)據(jù)與第二存儲(chǔ)地址對(duì)應(yīng)的第二數(shù)據(jù)可能是有關(guān)聯(lián)的,將第一存儲(chǔ)地址和第二存儲(chǔ)地址稱為關(guān)聯(lián)地址,在block中記錄關(guān)聯(lián)地址的目錄信息時(shí),由于第一存儲(chǔ)地址和第二存儲(chǔ)地址的標(biāo)簽相同,在block中只需要記錄一個(gè)標(biāo)簽,將處理器通過(guò)第一存儲(chǔ)地址請(qǐng)求第一數(shù)據(jù)的記錄存儲(chǔ)在與第一存儲(chǔ)地址的associate對(duì)應(yīng)的ste和vect中,將處理器110通過(guò)第二存儲(chǔ)地址請(qǐng)求第二數(shù)據(jù)的記錄存儲(chǔ)在與第二存儲(chǔ)地址的associate對(duì)應(yīng)的ste和vect中。
結(jié)合圖1舉例說(shuō)明,第一存儲(chǔ)地址與第二存儲(chǔ)地址是關(guān)聯(lián)地址,第一處理器111通過(guò)第一存儲(chǔ)地址請(qǐng)求訪問(wèn)主存儲(chǔ)器120中的第一數(shù)據(jù),且請(qǐng)求的狀態(tài)為共享狀態(tài),第一存儲(chǔ)地址的associate[1:0]=2’b00(即存儲(chǔ)地址的第0位和第1位分別是二進(jìn)制數(shù)0和0),則在ste0和vect0中分別記錄共享狀態(tài)和第一處理器111的標(biāo)識(shí)。第二處理器112通過(guò)第二存儲(chǔ)地址請(qǐng)求訪問(wèn)主存儲(chǔ)器120中的第二數(shù)據(jù),且請(qǐng)求的狀態(tài)為讀狀態(tài),第二存儲(chǔ)地址的associate[1:0]=2’b01(即存儲(chǔ)地址的第0位和第1位分別是二進(jìn)制數(shù)1和0),則在ste1和vect1中分別記錄讀狀態(tài)和第二處理器112的標(biāo)識(shí)。
在實(shí)際應(yīng)用中,處理器110不限定只包括第一處理器111、第二處理器112和第三處理器113,本方案不對(duì)處理器110包含的多個(gè)處理器的數(shù)量進(jìn)行限定。
在實(shí)際應(yīng)用中,目錄cache中的一個(gè)block可能會(huì)存儲(chǔ)多個(gè)關(guān)聯(lián)地址的目錄信息,而這些目錄信息中可能僅有一個(gè)是有效的,因此為了減少其他無(wú)效的目錄信息對(duì)該block的存儲(chǔ)空間的占用,本發(fā)明各個(gè)實(shí)施例中提出刪除該block中的這些無(wú)效的目錄信息,并在刪除這些目錄信息之后,在該block剩余的存儲(chǔ)空間存儲(chǔ)其他存儲(chǔ)地址的目錄信息,從而使得該block從原本的關(guān)聯(lián)模式轉(zhuǎn)換成了非關(guān)聯(lián)模式,并利用非關(guān)聯(lián)模式的block替換關(guān)聯(lián)模式的block進(jìn)行存儲(chǔ),以提高該block的利用率。其中關(guān)聯(lián)模式的block以及轉(zhuǎn)換后的非關(guān)聯(lián)模式的block的數(shù)據(jù)結(jié)構(gòu)如圖3所示。
圖3是本發(fā)明一個(gè)實(shí)施例提供的一種關(guān)聯(lián)模式的blcok和對(duì)應(yīng)的非關(guān)聯(lián)模式的block的數(shù)據(jù)結(jié)構(gòu)圖。如圖3所示,關(guān)聯(lián)模式的block中只存儲(chǔ)了一個(gè)標(biāo)簽,對(duì)應(yīng)圖3中的tag[w:z],該標(biāo)簽是block中存儲(chǔ)的各個(gè)目錄信息對(duì)應(yīng)的關(guān)聯(lián)地址定義的相同的標(biāo)簽,block中存儲(chǔ)的標(biāo)簽后面依次存儲(chǔ)了各個(gè)關(guān)聯(lián)地址對(duì)應(yīng)的目錄信息,如圖3所示的ste0和vect0、ste1和vect1、ste2和vect2、ste3和vect3,各個(gè)關(guān)聯(lián)地址與目錄信息的存儲(chǔ)位置是對(duì)應(yīng)的。
圖3中提供的非關(guān)聯(lián)模式的block的數(shù)據(jù)結(jié)構(gòu),由于非關(guān)聯(lián)地址的標(biāo)簽不同,因此非關(guān)聯(lián)模式的block中需要分別存儲(chǔ)各個(gè)非關(guān)聯(lián)地址的標(biāo)簽,比如圖3中存儲(chǔ)了標(biāo)簽tag[w:z]和tag1[x:y],tag[w:z]對(duì)應(yīng)的是第一個(gè)存儲(chǔ)地址的第w位到第z位的數(shù)據(jù),也就是說(shuō)第一個(gè)存儲(chǔ)地址的第w位到第z位的數(shù)據(jù)被劃分為第一個(gè)存儲(chǔ)地址的標(biāo)簽,而與第一個(gè)存儲(chǔ)地址非關(guān)聯(lián)的第二個(gè)存儲(chǔ)地址的標(biāo)簽對(duì)應(yīng)的是第二個(gè)存儲(chǔ)地址的第w位到第z位的內(nèi)容,即第一個(gè)存儲(chǔ)地址與第二個(gè)存儲(chǔ)地址的標(biāo)簽對(duì)應(yīng)的域段相同,都為域段[w:z],其中,第二個(gè)存儲(chǔ)地址的第x位到第y位的內(nèi)容與第一個(gè)存儲(chǔ)地址的第x位到第y位的內(nèi)容不同,將第二個(gè)存儲(chǔ)地址的第x位到第y位的內(nèi)容記為標(biāo)簽tag1,表示為tag1[x:y],域段[x:y]是域段[w:z]的其中一部分,也就是說(shuō),第一個(gè)存儲(chǔ)地址與第二個(gè)存儲(chǔ)地址的標(biāo)簽限定的內(nèi)容中,有一部分的內(nèi)容不同,不同的內(nèi)容為存儲(chǔ)地址的第x位到第y位。非關(guān)聯(lián)模式的block中各目錄信息前面還增加了指示項(xiàng),指示項(xiàng)的作用是指示緊跟在指示項(xiàng)后面的目錄信息在關(guān)聯(lián)模式的block中的存儲(chǔ)位置,比如圖3中的指示項(xiàng)ass[1:0]用于指示ste0和vect0存儲(chǔ)的目錄信息在關(guān)聯(lián)模式的block中的存儲(chǔ)位置,ass1[1:0]用于指示ste1和vect1存儲(chǔ)的目錄信息在關(guān)聯(lián)模式的block中的存儲(chǔ)位置。通過(guò)指示項(xiàng)可以確定出block中存儲(chǔ)的緊跟在指示項(xiàng)后面的目錄信息在關(guān)聯(lián)模式的block中的存儲(chǔ)位置,而處理器通過(guò)存儲(chǔ)地址訪問(wèn)目錄cache時(shí),需要知道目錄信息在關(guān)聯(lián)模式的block中的存儲(chǔ)位置,然后才能獲取數(shù)據(jù)在主存儲(chǔ)器中的存儲(chǔ)情況。
關(guān)聯(lián)模式的block只需要存儲(chǔ)一個(gè)標(biāo)簽,并且由于各個(gè)關(guān)聯(lián)地址與目錄信息的存儲(chǔ)位置是對(duì)應(yīng)的,因此關(guān)聯(lián)模式的block中不需要存儲(chǔ)指示項(xiàng),從而可以使block能夠空出部分字段用于存儲(chǔ)更多的關(guān)聯(lián)地址的目錄信息。非關(guān)聯(lián)模式的block由于存儲(chǔ)的是非關(guān)聯(lián)地址的目錄信息,因此非關(guān)聯(lián)模式的block中需要存儲(chǔ)至少兩個(gè)標(biāo)簽,當(dāng)一個(gè)存儲(chǔ)地址訪問(wèn)目錄cache時(shí),需要將存儲(chǔ)地址的標(biāo)簽與非關(guān)聯(lián)模式的block中存儲(chǔ)的至少兩個(gè)標(biāo)簽進(jìn)行比較,才能確定出該存儲(chǔ)地址是否命中該block。由于關(guān)聯(lián)模式與非關(guān)聯(lián)模式的block在實(shí)際應(yīng)用中都各有優(yōu)勢(shì),因此在利用block存儲(chǔ)存儲(chǔ)地址的目錄信息時(shí),可以根據(jù)實(shí)際情況選擇使用關(guān)聯(lián)模式還是非關(guān)聯(lián)模式,并且在滿足相應(yīng)的條件時(shí),可以將block在關(guān)聯(lián)模式和非關(guān)聯(lián)模式之間進(jìn)行相互轉(zhuǎn)換,比如一個(gè)能夠存儲(chǔ)4個(gè)關(guān)聯(lián)地址的目錄信息的block可以通過(guò)轉(zhuǎn)換變?yōu)橛脕?lái)存儲(chǔ)2個(gè)非關(guān)聯(lián)地址的目錄信息。在實(shí)際應(yīng)用中,目錄cache中可能部分block是關(guān)聯(lián)模式的,部分block是非關(guān)聯(lián)模式的,關(guān)聯(lián)模式與非關(guān)聯(lián)模式的block是可以并存的。
另外,在block中增加一位指示位,用no_ass表示。在實(shí)際應(yīng)用中,可以定義當(dāng)指示位no_ass為0時(shí),表示該block中存儲(chǔ)的四組目錄信息對(duì)應(yīng)的存儲(chǔ)地址是關(guān)聯(lián)的,即該block為關(guān)聯(lián)模式;當(dāng)指示位no_ass為1時(shí),表示該block中存儲(chǔ)的目錄信息對(duì)應(yīng)的存儲(chǔ)地址是非關(guān)聯(lián)的,即該block為非關(guān)聯(lián)模式。通過(guò)增加指示位可以快速確定出block是關(guān)聯(lián)模式還是非關(guān)聯(lián)模式的。
由圖3可以看出,關(guān)聯(lián)模式的block轉(zhuǎn)換成非關(guān)聯(lián)模式的block之后,該block可以存儲(chǔ)非關(guān)聯(lián)的存儲(chǔ)地址的目錄信息,且在根據(jù)不同請(qǐng)求的存儲(chǔ)地址索引目錄信息時(shí),非關(guān)聯(lián)模式的block中的目錄信息均可能會(huì)被索引到。
下面提到的關(guān)聯(lián)模式的block和非關(guān)聯(lián)模式的block都基于本實(shí)施例提供的數(shù)據(jù)結(jié)構(gòu)來(lái)進(jìn)行轉(zhuǎn)換的。
當(dāng)只利用一個(gè)存儲(chǔ)地址請(qǐng)求訪問(wèn)目錄cache時(shí),為了提高目錄cache的利用率,可以將符合條件的關(guān)聯(lián)模式的block轉(zhuǎn)換為非關(guān)聯(lián)模式的block,以用來(lái)存儲(chǔ)至少兩個(gè)非關(guān)聯(lián)地址的目錄信息,具體請(qǐng)參見(jiàn)如圖4A所示出的步驟。
圖4A是本發(fā)明一個(gè)實(shí)施例提供的一種地址訪問(wèn)方法的方法流程圖。該地址訪問(wèn)方法應(yīng)用在圖1所示的目錄cache 130中,該地址訪問(wèn)方法包括如下步驟:
401,接收第一請(qǐng)求,該第一請(qǐng)求包括需要訪問(wèn)的第一數(shù)據(jù)的第一存儲(chǔ)地址,第一存儲(chǔ)地址包括第一組索引、標(biāo)簽以及第一關(guān)聯(lián)。
處理器通過(guò)第一存儲(chǔ)地址請(qǐng)求存儲(chǔ)在主存儲(chǔ)器中的第一數(shù)據(jù),先利用第一存儲(chǔ)地址索引目錄cache中存儲(chǔ)的第一數(shù)據(jù)在主存儲(chǔ)器中的訪問(wèn)情況,具體是指第一數(shù)據(jù)有沒(méi)有被其他的處理器請(qǐng)求和請(qǐng)求的狀態(tài)是什么,狀態(tài)包括讀狀態(tài)、共享狀態(tài)、空狀態(tài)以及無(wú)效狀態(tài)。
舉例說(shuō)明,如圖4B所示,目錄cache接收到第一請(qǐng)求,該第一請(qǐng)求中包含一個(gè)存儲(chǔ)地址,第一請(qǐng)求中的存儲(chǔ)地址被劃分為index、tag[w:z]和associate[1:0],分別對(duì)應(yīng)第一組索引、標(biāo)簽和第一關(guān)聯(lián),tag[w:z]表示第一請(qǐng)求中的物理地址的第w位到第z位的數(shù)據(jù)為標(biāo)簽,associate[1:0]表示第一請(qǐng)求中的物理地址的第0位到第1位的數(shù)據(jù)是關(guān)聯(lián),即第一請(qǐng)求中的物理地址的最低兩位是關(guān)聯(lián)。
402,從第一組索引對(duì)應(yīng)的block中查找符合模式轉(zhuǎn)換條件的第一block。
目錄cache通過(guò)第一組索引可以索引到目錄cache中的一個(gè)set,該set中包含一行block,這一行block均為與第一組索引對(duì)應(yīng)的block。
這里所講的符合模式轉(zhuǎn)換條件是指block中存儲(chǔ)的指示位用于指示該block為關(guān)聯(lián)模式,且該block中的標(biāo)簽對(duì)應(yīng)的域段與第一請(qǐng)求中的標(biāo)簽對(duì)應(yīng)的域段相同,該block的標(biāo)簽至少包含與第一請(qǐng)求中的標(biāo)簽不匹配的內(nèi)容,且該block中僅包含一條有效的目錄信息。當(dāng)通過(guò)index索引到的一行block中查找到其中一個(gè)block滿足上述條件,則該block為符合模式轉(zhuǎn)換條件的第一block。
有效的目錄信息是指目錄狀態(tài)不是無(wú)效狀態(tài)的目錄信息。
舉例說(shuō)明,如圖4B所示,第一請(qǐng)求中存儲(chǔ)地址的標(biāo)簽對(duì)應(yīng)的域段為[w:z](也即該存儲(chǔ)地址的第w位到第z位的內(nèi)容為該存儲(chǔ)地址的標(biāo)簽),查找到的符合模式轉(zhuǎn)換條件的第一block的特征為:第一block的指示位為0、第一block中的第一標(biāo)簽tag對(duì)應(yīng)的域段也為[w:z]、第一標(biāo)簽中的域段[x:y]的內(nèi)容與第一請(qǐng)求的標(biāo)簽tag[w:z]中的域段[x:y]的內(nèi)容不同、第一block中只有一組目錄信息有效(比如圖4B中的目錄信息ste2和vect2)。
其中,第一block的指示位為0,則表明第一block是關(guān)聯(lián)模式的;第一block中的第一標(biāo)簽tag對(duì)應(yīng)的域段為[w:z],即第一block中存儲(chǔ)的目錄信息對(duì)應(yīng)的存儲(chǔ)地址的第w位到第z位的內(nèi)容為第一標(biāo)簽tag;域段[x:y]是域段[w:z]中的一部分,第一標(biāo)簽中的域段[x:y]的內(nèi)容與第一請(qǐng)求的標(biāo)簽tag[w:z]中的域段[x:y]的內(nèi)容不同,表明第一標(biāo)簽與第一請(qǐng)求的標(biāo)簽對(duì)應(yīng)的域段[w:z]的內(nèi)容中除了域段[x:y]的內(nèi)容不同,其他內(nèi)容均相同。
可選的,第一請(qǐng)求中的存儲(chǔ)地址的標(biāo)簽限定的內(nèi)容與關(guān)聯(lián)模式的第一block中的標(biāo)簽限定的內(nèi)容中不同的內(nèi)容對(duì)應(yīng)的域段可以是連續(xù)的,也可以是間隔的,只要求第一請(qǐng)求中的存儲(chǔ)地址的標(biāo)簽與關(guān)聯(lián)模式的第一block中的標(biāo)簽存在部分內(nèi)容不同,然后將不同的這部分內(nèi)容命名為標(biāo)簽tag1。
可選的,目錄cache在執(zhí)行從第一組索引對(duì)應(yīng)的block中查找符合模式轉(zhuǎn)換條件的第一block的步驟之前,可以先判定是否滿足查找到的block中的標(biāo)簽均與第一請(qǐng)求中的標(biāo)簽不同,且查找到的block均被占用的條件。
這里所講的查找到的block是通過(guò)第一請(qǐng)求中包含的存儲(chǔ)地址的index索引到的目錄cache的一個(gè)set對(duì)應(yīng)的一行block,在索引到這一行block之后,將第一請(qǐng)求中存儲(chǔ)地址的標(biāo)簽與這一行各個(gè)block中存儲(chǔ)的標(biāo)簽進(jìn)行比較。這里所講的查找到的block均被占用,是指通過(guò)index索引到的一行block中,沒(méi)有空的存儲(chǔ)空間用來(lái)存儲(chǔ)第一請(qǐng)求中的存儲(chǔ)地址的目錄信息。
可選的,在實(shí)際應(yīng)用中,目錄cache執(zhí)行從第一組索引對(duì)應(yīng)的block中查找符合模式轉(zhuǎn)換條件的第一block的步驟之前,不一定必須要在查找到的block中的標(biāo)簽均與第一請(qǐng)求中的標(biāo)簽不同,且查找到的block均被占用的條件下,目錄cache可以根據(jù)需求直接執(zhí)行從第一組索引對(duì)應(yīng)的block中查找符合模式轉(zhuǎn)換條件的第一block的步驟。
403,將第一block的指示位修改為用于指示第一block為非關(guān)聯(lián)模式。
為了區(qū)分關(guān)聯(lián)模式的block和非關(guān)聯(lián)模式的block,可以在block之前添加一個(gè)指示位,如圖3所示,在block之前添加一個(gè)指示位no_ass。
在一種實(shí)現(xiàn)中,指示位no_ass為0時(shí),可以表示block為關(guān)聯(lián)模式,no_ass為1時(shí),可以表示block為非關(guān)聯(lián)模式,如圖4B所示,因此這里可以將指示位no_ass由0修改為1。
在實(shí)際應(yīng)用中,并不局限于將上述指示位的取值與關(guān)聯(lián)模式或非關(guān)聯(lián)模式進(jìn)行對(duì)應(yīng),還比如,當(dāng)指示位為1時(shí),也可以表示block為關(guān)聯(lián)模式,對(duì)應(yīng)的,當(dāng)指示位為0時(shí),可以表示block為非關(guān)聯(lián)模式。本發(fā)明各個(gè)實(shí)施例中僅以指示位為0表示block為關(guān)聯(lián)模式、指示位為1表示block為非關(guān)聯(lián)模式為例進(jìn)行說(shuō)明。
404,依次將第一block中指示位后面的字段替換為第一目錄字段和第二目錄字段,得到非關(guān)聯(lián)模式的第一block。
這里所講的第一目錄字段依次包括第一標(biāo)簽、第一指示項(xiàng)、第一目錄信息,第二目錄字段依次包括第二標(biāo)簽、第二指示項(xiàng)以及第二目錄信息,第二標(biāo)簽限定了第一請(qǐng)求中的標(biāo)簽中與第一標(biāo)簽不匹配的內(nèi)容,第一指示項(xiàng)用于指示第一目錄信息在關(guān)聯(lián)模式的第一block中的位置,第二指示項(xiàng)為第一關(guān)聯(lián)的值,第二目錄信息是在接收第一請(qǐng)求時(shí),系統(tǒng)根據(jù)第一請(qǐng)求所請(qǐng)求的狀態(tài)以及發(fā)送第一請(qǐng)求的處理器生成的目錄信息。
比如,對(duì)應(yīng)圖1,當(dāng)?shù)谝惶幚砥?11通過(guò)第一存儲(chǔ)地址請(qǐng)求訪問(wèn)主存儲(chǔ)器120中的第一數(shù)據(jù),且請(qǐng)求的狀態(tài)為共享狀態(tài)時(shí),目錄cache 130根據(jù)第一存儲(chǔ)地址的第一關(guān)聯(lián)將對(duì)應(yīng)位置的ste記為共享狀態(tài),將對(duì)應(yīng)位置的vect記為第一處理器111的標(biāo)識(shí)。
如圖4B所示,以關(guān)聯(lián)模式的第一block存儲(chǔ)4個(gè)關(guān)聯(lián)地址的目錄信息為例,對(duì)該第一block進(jìn)行模式轉(zhuǎn)換。將第一block中存儲(chǔ)的所有數(shù)據(jù)定義為舊目錄,將第一block中的第一標(biāo)簽tag[w:z]保持不變,即第一標(biāo)簽限定的內(nèi)容保持不變,將一組有效的第一目錄信息ste2和vect2存儲(chǔ)到ste0和vect0的位置,在標(biāo)簽tag[w:z]后面存入第一指示項(xiàng)ass0[1:0],記錄ass0[1:0]=2’b10,即ass0[1:0]的值為兩位二進(jìn)制數(shù)10,二進(jìn)制數(shù)10等于十進(jìn)制數(shù)2,因此ass0[1:0]=2’b10用于指示緊跟指示項(xiàng)后面ste0和vect0中的目錄信息存儲(chǔ)在舊目錄的ste2和vect2的位置。將第一請(qǐng)求中的存儲(chǔ)地址的標(biāo)簽tag[w:z]的內(nèi)容中域段[x:y]的內(nèi)容命名為標(biāo)簽tag1,記錄到tag1的位置,tag[x:y]表示第一請(qǐng)求中的存儲(chǔ)地址的第x位到第y位的內(nèi)容,將第一請(qǐng)求中的associate[1:0]的值記錄到ass1[1:0]的位置,將系統(tǒng)根據(jù)第一請(qǐng)求所請(qǐng)求的狀態(tài)以及發(fā)送第一請(qǐng)求的處理器生成的新目錄信息記錄到ste1和vect1的位置。通過(guò)以上轉(zhuǎn)換,將舊目錄轉(zhuǎn)換成了新目錄,新目錄即為得到的非關(guān)聯(lián)模式的第一block。在實(shí)際應(yīng)用中,利用舊目錄生成新目錄之后,舊目錄中的數(shù)據(jù)均被新目錄中的數(shù)據(jù)替換,因此對(duì)應(yīng)于舊目錄的關(guān)聯(lián)模式的第一block被新目錄的非關(guān)聯(lián)模式的第一block替換存儲(chǔ)。
一般的,associate對(duì)應(yīng)的是存儲(chǔ)地址中的最低兩位的內(nèi)容,而本發(fā)明實(shí)施例提供的地址訪問(wèn)方法,associate可以選取不止兩位,也可以不限定在最低位,比如可以選取存儲(chǔ)地址中第5至8位的內(nèi)容作為associate。這使得associate可以有更多可選的方案。
上述步驟可以由圖1中的目錄cache 130來(lái)執(zhí)行。
綜上所述,本發(fā)明實(shí)施例提供的地址訪問(wèn)方法,
由于將第一block由關(guān)聯(lián)模式轉(zhuǎn)換為非關(guān)聯(lián)模式時(shí),第一block僅保留了關(guān)聯(lián)地址中有效的一條存儲(chǔ)地址的目錄信息,刪除了關(guān)聯(lián)地址中其他無(wú)效的存儲(chǔ)地址的目錄信息,使得第一block的剩余空間還能夠存儲(chǔ)被請(qǐng)求的其他非關(guān)聯(lián)地址的目錄信息,也即第一block可以存儲(chǔ)至少兩個(gè)非關(guān)聯(lián)地址的目錄信息;因此解決了相關(guān)技術(shù)中當(dāng)一個(gè)block中存儲(chǔ)的是關(guān)聯(lián)地址的目錄,且僅有一條目錄信息是非無(wú)效狀態(tài),其余目錄信息均為無(wú)效狀態(tài)時(shí),導(dǎo)致這個(gè)block的利用率較低的技術(shù)問(wèn)題,達(dá)到了提高目錄cache的利用率的效果。
另外,通過(guò)在block中增加指示位,可以快速確定出block是關(guān)聯(lián)模式還是非關(guān)聯(lián)模式。
另外,由于是在根據(jù)第一存儲(chǔ)地址中的第一組索引查找到的一行block都被占用,且這一行block中的標(biāo)簽與第一存儲(chǔ)地址中的標(biāo)簽均不同時(shí),選取符合模式轉(zhuǎn)換條件的block作為第一block,相當(dāng)于從原本已經(jīng)存儲(chǔ)關(guān)聯(lián)地址的目錄信息的block中刪除無(wú)效狀態(tài)的目錄信息,以使得該block多出額外的空間來(lái)存儲(chǔ)其他存儲(chǔ)地址的目錄信息,從而使得目錄cache的利用率提高。
圖4A中的步驟提供了轉(zhuǎn)換得到用于存儲(chǔ)兩個(gè)非關(guān)聯(lián)地址的目錄字段的非關(guān)聯(lián)模式的block的方法,在實(shí)際應(yīng)用中,當(dāng)block中已經(jīng)存儲(chǔ)了兩個(gè)非關(guān)聯(lián)地址的目錄字段后,block中的剩余位寬還允許存儲(chǔ)至少一個(gè)非關(guān)聯(lián)地址的目錄字段(標(biāo)簽+指示項(xiàng)+目錄信息)時(shí),對(duì)于符合條件的非關(guān)聯(lián)地址,可以按照與圖4A中類似的方式將符合條件的非關(guān)聯(lián)地址的目錄信息添加進(jìn)該block中,具體實(shí)現(xiàn)可以參見(jiàn)圖4C中所示的各個(gè)步驟。
圖4C是本發(fā)明另一個(gè)實(shí)施例提供的一種地址訪問(wèn)方法的方法流程圖。該地址訪問(wèn)方法應(yīng)用在圖1所示的目錄cache 130中,該地址訪問(wèn)方法包括如下步驟:
405,在得到非關(guān)聯(lián)模式的第一block之后,當(dāng)?shù)谝籦lock的剩余位寬允許存儲(chǔ)至少一個(gè)非關(guān)聯(lián)的存儲(chǔ)地址的目錄字段時(shí),檢測(cè)接收到的第二請(qǐng)求是否符合與第一block對(duì)應(yīng)的添加條件。
第二請(qǐng)求包括需要訪問(wèn)的第二數(shù)據(jù)的第二存儲(chǔ)地址。
這里所講的目錄字段包括:標(biāo)簽tag、指示項(xiàng)ass和目錄信息ste+vect,也就是說(shuō),當(dāng)?shù)谝籦lock中存儲(chǔ)有兩個(gè)非關(guān)聯(lián)地址的目錄字段后,第一block的剩余位寬還能存儲(chǔ)另一個(gè)非關(guān)聯(lián)地址的標(biāo)簽tag、指示項(xiàng)ass和目錄信息ste+vect。這種情況下,可以將符合第一block的添加條件的存儲(chǔ)地址的目錄字段存入第一block中。
舉例說(shuō)明,如圖4D所示,關(guān)聯(lián)模式的第一block能夠存儲(chǔ)6個(gè)關(guān)聯(lián)地址的目錄信息,將第一block轉(zhuǎn)換為非關(guān)聯(lián)模式后,通過(guò)圖4A所示的方法,第一block中已經(jīng)存儲(chǔ)有兩個(gè)非關(guān)聯(lián)地址的目錄字段,第一個(gè)存儲(chǔ)地址的目錄字段為tag[u:z]、ass0[2:0]和ste0+vect0,tag[u:z]表示第一個(gè)存儲(chǔ)地址的第u位到第z位的內(nèi)容為標(biāo)簽tag,由于目錄信息ste0+vect0原來(lái)在關(guān)聯(lián)模式中的存儲(chǔ)位置是ste2+vect2,因此記錄ass0[2:0]=3’b010,即ass0[2:0]的值為三位二進(jìn)制數(shù)010,二進(jìn)制數(shù)010等于十進(jìn)制數(shù)2;第二個(gè)存儲(chǔ)地址的目錄字段為tag1[x:y]、ass1[2:0]和ste1+vect1,其中,第一個(gè)存儲(chǔ)地址與第二個(gè)存儲(chǔ)地址的標(biāo)簽對(duì)應(yīng)的域段均為[u:z],也就是說(shuō),第二個(gè)存儲(chǔ)地址也是第u位到第z位的內(nèi)容為標(biāo)簽,域段[x:y]是第二個(gè)存儲(chǔ)地址的標(biāo)簽中與第一個(gè)存儲(chǔ)地址的標(biāo)簽中不匹配的內(nèi)容對(duì)應(yīng)的域段,tag1[x:y]表示第二個(gè)存儲(chǔ)地址的第x位到第y位的內(nèi)容被命名為tag1。
406,在第二請(qǐng)求符合與第一block對(duì)應(yīng)的添加條件時(shí),在第一block中已存儲(chǔ)的數(shù)據(jù)后面添加第二請(qǐng)求所對(duì)應(yīng)的目錄字段。
這里所講的與第一block對(duì)應(yīng)的添加條件為:第二請(qǐng)求包含的第二存儲(chǔ)地址的組索引與第一組索引相同,且第二請(qǐng)求包含的第二存儲(chǔ)地址的標(biāo)簽與第一block中的標(biāo)簽均不同,第二存儲(chǔ)地址的標(biāo)簽與第一標(biāo)簽的域段相同,且第二存儲(chǔ)地址的標(biāo)簽至少包含與第一標(biāo)簽不匹配的內(nèi)容。
這里所講的第二請(qǐng)求所對(duì)應(yīng)的目錄字段依次包括:第三標(biāo)簽、第三指示項(xiàng)和第三目錄信息,第三標(biāo)簽限定了第二存儲(chǔ)地址的標(biāo)簽中與第一標(biāo)簽不匹配的內(nèi)容對(duì)應(yīng)的域段,第三指示項(xiàng)為第二存儲(chǔ)地址的關(guān)聯(lián)的值,第三目錄信息是根據(jù)第二請(qǐng)求所請(qǐng)求的狀態(tài)以及發(fā)送第二請(qǐng)求的處理器生成的目錄信息。
請(qǐng)參見(jiàn)圖4D,目錄cache接收到第二請(qǐng)求,該第二請(qǐng)求中的存儲(chǔ)地址被劃分為index、tag[u:z]和associate[2:0]三部分。通過(guò)index可以索引到第一block所在的set,也就是說(shuō),第二請(qǐng)求中的存儲(chǔ)地址的index部分的內(nèi)容與第一block中已經(jīng)存儲(chǔ)的兩個(gè)非關(guān)聯(lián)的存儲(chǔ)地址的index部分的內(nèi)容相同。
第二請(qǐng)求中的存儲(chǔ)地址的標(biāo)簽tag[u:z]的域段[u:z]與關(guān)聯(lián)模式的第一block中的標(biāo)簽對(duì)應(yīng)的域段相同,也就是說(shuō),符合條件的存儲(chǔ)地址的標(biāo)簽限定的內(nèi)容的域段與關(guān)聯(lián)模式的block中的標(biāo)簽限定的內(nèi)容的域段要相同,由于關(guān)聯(lián)模式的block中的標(biāo)簽對(duì)應(yīng)的域段為第u位到第z位,即域段[u:z],而第二請(qǐng)求中的存儲(chǔ)地址的標(biāo)簽對(duì)應(yīng)的域段也是[u:z],因此第二請(qǐng)求中的存儲(chǔ)地址符合域段相同的要求。另外,第二請(qǐng)求中的存儲(chǔ)地址的標(biāo)簽對(duì)應(yīng)的域段[u:z]中的內(nèi)容與關(guān)聯(lián)模式的第一block的標(biāo)簽對(duì)應(yīng)的域段[u:z]中的內(nèi)容,除了域段[v:w]中的內(nèi)容不同,標(biāo)簽限定的其他內(nèi)容均相同,也就是說(shuō),第二請(qǐng)求中的存儲(chǔ)地址的標(biāo)簽與關(guān)聯(lián)模式的第一block中的標(biāo)簽限定的內(nèi)容有一部分不同,不同的這部分內(nèi)容對(duì)應(yīng)的域段是第v位到第w位。
將第二請(qǐng)求中的標(biāo)簽tag[u:z]的內(nèi)容中域段[v:w]的內(nèi)容命名為標(biāo)簽tag2,記錄到tag2的位置,將第二請(qǐng)求中的associate[2:0]的值記錄到ass2[2:0]的位置,將系統(tǒng)根據(jù)第二請(qǐng)求所請(qǐng)求的狀態(tài)以及發(fā)送第二請(qǐng)求的處理器生成的目錄信息記錄到ste2和vect2的位置。通過(guò)上述過(guò)程,可以將符合條件的其他的存儲(chǔ)地址的目錄字段添加到第一block中。
可選的,第二請(qǐng)求中的存儲(chǔ)地址的標(biāo)簽限定的內(nèi)容與關(guān)聯(lián)模式的第一block中的標(biāo)簽限定的內(nèi)容中不同的內(nèi)容對(duì)應(yīng)的域段可以是連續(xù)的,也可以是間隔的,只要求存儲(chǔ)地址的標(biāo)簽與關(guān)聯(lián)模式的第一block中的標(biāo)簽中的部分內(nèi)容不同,然后將不同的這部分內(nèi)容命名為標(biāo)簽tag2。
在實(shí)際應(yīng)用中,如果非關(guān)聯(lián)模式的block的剩余位寬允許存儲(chǔ)更多的非關(guān)聯(lián)地址的目錄字段,可以參照本實(shí)施例中各個(gè)步驟,將符合條件的其他非關(guān)聯(lián)地址的目錄字段添加到該非關(guān)聯(lián)模式的block中。
上述步驟可以由圖1中的目錄cache 130來(lái)執(zhí)行。
綜上所述,本發(fā)明實(shí)施例提供的地址訪問(wèn)方法,由于第一block的位寬可能允許存儲(chǔ)超過(guò)兩個(gè)非關(guān)聯(lián)地址的目錄字段,因此只要符合添加條件,就可以繼續(xù)往第一block中存儲(chǔ)非關(guān)聯(lián)地址的目錄字段,從而將block充分利用起來(lái),提高目錄cache的利用率。
另外,由于第一block中存儲(chǔ)的是非關(guān)聯(lián)地址的目錄字段,因此需要存儲(chǔ)標(biāo)簽、指示項(xiàng)和目錄信息,從而區(qū)分不同的存儲(chǔ)地址,并通過(guò)指示項(xiàng)可以確定出目錄信息在關(guān)聯(lián)模式的block中的存儲(chǔ)位置。
在實(shí)際應(yīng)用中,訪問(wèn)請(qǐng)求有可能命中目錄cache中的一個(gè)非關(guān)聯(lián)模式的block,并且訪問(wèn)請(qǐng)求包含的存儲(chǔ)地址可能與該block中存儲(chǔ)的其中一個(gè)目錄信息對(duì)應(yīng)的存儲(chǔ)地址是關(guān)聯(lián)地址,這時(shí)可以將非關(guān)聯(lián)模式的block轉(zhuǎn)換為關(guān)聯(lián)模式,以存儲(chǔ)更多的關(guān)聯(lián)地址。具體實(shí)現(xiàn)可以參見(jiàn)圖4E中所示的各個(gè)步驟。
圖4E是本發(fā)明再一個(gè)實(shí)施例提供的一種地址訪問(wèn)方法的方法流程圖。該地址訪問(wèn)方法應(yīng)用在圖1所示的目錄cache 130中,該地址訪問(wèn)方法包括如下步驟:
407,接收第三請(qǐng)求,第三請(qǐng)求包括需要訪問(wèn)的第三數(shù)據(jù)的第三存儲(chǔ)地址,第三存儲(chǔ)地址包括第二組索引、標(biāo)簽以及第二關(guān)聯(lián)。
這里的第三請(qǐng)求也是一個(gè)地址訪問(wèn)請(qǐng)求,其中包含一個(gè)需要訪問(wèn)的第三存儲(chǔ)地址,這個(gè)第三存儲(chǔ)地址被劃分為index、tag[w:z]和associate[1:0]三部分,分別對(duì)應(yīng)于第二組索引、標(biāo)簽和第二關(guān)聯(lián)。具體可以參見(jiàn)圖4F或者圖4G,圖4F和圖4G分別示出了將非關(guān)聯(lián)模式的block轉(zhuǎn)換為關(guān)聯(lián)模式的具體實(shí)現(xiàn)方式。其中,圖4F是在第三請(qǐng)求命中非關(guān)聯(lián)模式的block中存儲(chǔ)的第一個(gè)存儲(chǔ)地址的目錄字段的情況,圖4G是在第三請(qǐng)求命中非關(guān)聯(lián)模式的block中存儲(chǔ)的第二個(gè)存儲(chǔ)地址的目錄字段的情況。
408,查找目錄cache中與第二組索引對(duì)應(yīng)的block。
通過(guò)index可以索引到目錄cache中的set,該set中對(duì)應(yīng)一行block,這一行block均為與index對(duì)應(yīng)的block。
409,從查找到的block中確定出命中的非關(guān)聯(lián)模式的第二block。
這里所講的查找到的block是指通過(guò)第三請(qǐng)求中的存儲(chǔ)地址的index索引到的set對(duì)應(yīng)的一行block。
這里所講的第二block中存在與第三請(qǐng)求中的標(biāo)簽相同的第四標(biāo)簽,由于第三請(qǐng)求中的標(biāo)簽與第二block中存儲(chǔ)的其中一個(gè)標(biāo)簽相同,因此第三請(qǐng)求中的存儲(chǔ)地址命中該第二block。另外,第二block中第四標(biāo)簽后的指示項(xiàng)與第二關(guān)聯(lián)不同,由于指示項(xiàng)指示的是緊跟在指示項(xiàng)后面的目錄信息在關(guān)聯(lián)模式的block中的存儲(chǔ)位置,而關(guān)聯(lián)模式的block中目錄信息的存儲(chǔ)位置與存儲(chǔ)地址的associate限定的內(nèi)容之間的關(guān)系是對(duì)應(yīng)的,因此當(dāng)指示項(xiàng)與存儲(chǔ)地址的關(guān)聯(lián)的值不同時(shí),表明包括該指示項(xiàng)的目錄字段對(duì)應(yīng)的存儲(chǔ)地址與訪問(wèn)請(qǐng)求中的存儲(chǔ)地址除了associate部分的內(nèi)容不同,index和tag部分的內(nèi)容均相同,因此包括該指示項(xiàng)的目錄字段對(duì)應(yīng)的存儲(chǔ)地址與訪問(wèn)請(qǐng)求中的存儲(chǔ)地址是關(guān)聯(lián)地址。這種情況下需要將非關(guān)聯(lián)模式的block轉(zhuǎn)換為關(guān)聯(lián)模式用來(lái)存儲(chǔ)這兩個(gè)關(guān)聯(lián)地址的目錄信息。
410,將第二block的指示位調(diào)整為用于指示第二block為關(guān)聯(lián)模式。
411,將第四標(biāo)簽作為關(guān)聯(lián)模式的第二block的標(biāo)簽,將標(biāo)簽添加至指示位的后面。
這里所講的第四標(biāo)簽與第三請(qǐng)求中的標(biāo)簽相同,也就是將第三請(qǐng)求中的標(biāo)簽作為關(guān)聯(lián)模式的第二block中存儲(chǔ)的標(biāo)簽,將標(biāo)簽添加至指示位0后面。由于關(guān)聯(lián)模式的block中存儲(chǔ)的關(guān)聯(lián)地址的目錄信息,而關(guān)聯(lián)地址的標(biāo)簽是相同的,因此關(guān)聯(lián)模式的block中只需要存儲(chǔ)一個(gè)標(biāo)簽。
412,獲取第二block中具備第四標(biāo)簽的目錄字段,根據(jù)目標(biāo)字段中的指示項(xiàng)確定目標(biāo)字段中目錄信息在關(guān)聯(lián)模式的第二block中的位置,將目錄字段中的目錄信息移動(dòng)至關(guān)聯(lián)模式的第二block的位置。
將第二block轉(zhuǎn)換為關(guān)聯(lián)模式,由于關(guān)聯(lián)模式的block中目錄信息的存儲(chǔ)位置是與存儲(chǔ)地址的associate部分的內(nèi)容是對(duì)應(yīng)的,因此關(guān)聯(lián)模式的block中不需要存儲(chǔ)指示項(xiàng)來(lái)指示目錄信息的存儲(chǔ)位置,因此在將非關(guān)聯(lián)模式的block轉(zhuǎn)換為關(guān)聯(lián)模式之后,需要將非關(guān)聯(lián)模式的block中存儲(chǔ)的緊跟指示項(xiàng)后面的目錄信息根據(jù)指示項(xiàng)的值移至關(guān)聯(lián)模式的block中對(duì)應(yīng)的存儲(chǔ)位置。
413,在關(guān)聯(lián)模式的第二block中添加與第三請(qǐng)求對(duì)應(yīng)的目錄信息。
由于第三請(qǐng)求包含的存儲(chǔ)地址與具備第四標(biāo)簽的目錄字段對(duì)應(yīng)的存儲(chǔ)地址是關(guān)聯(lián)地址,經(jīng)過(guò)步驟411和步驟412的轉(zhuǎn)換,關(guān)聯(lián)模式的block中已經(jīng)存儲(chǔ)有標(biāo)簽,該標(biāo)簽即為第三請(qǐng)求中存儲(chǔ)地址的標(biāo)簽,因此,還需要將第三請(qǐng)求中存儲(chǔ)地址的目錄信息存入與第三請(qǐng)求中存儲(chǔ)地址的associate部分內(nèi)容對(duì)應(yīng)的ste和vect的位置。
經(jīng)過(guò)上述轉(zhuǎn)換,得到的關(guān)聯(lián)模式的block中只用到了存儲(chǔ)關(guān)聯(lián)地址的標(biāo)簽和兩組ste和vect的存儲(chǔ)空間,由于不需要存儲(chǔ)多個(gè)標(biāo)簽以及指示項(xiàng),因此關(guān)聯(lián)模式的block中一般還有空出的存儲(chǔ)空間,可以用來(lái)存儲(chǔ)其他關(guān)聯(lián)地址的目錄信息。
對(duì)于往關(guān)聯(lián)模式的block中存儲(chǔ)關(guān)聯(lián)地址的目錄信息的過(guò)程,可以由本領(lǐng)域技術(shù)人員所知的方式來(lái)實(shí)現(xiàn),這里就不再贅述。
如圖4F所示,目錄cache接收到一個(gè)包含存儲(chǔ)地址的第三請(qǐng)求請(qǐng)求,命中{index,tag[w:z]},即通過(guò)第三請(qǐng)求中存儲(chǔ)地址的index命中該block所在的set,通過(guò)tag[w:z]命中該set中的一個(gè)block,被命中的block的指示位為1,是非關(guān)聯(lián)模式。由于第三請(qǐng)求中存儲(chǔ)地址的標(biāo)簽tag[w:z]限定的內(nèi)容與非關(guān)聯(lián)模式的block中存儲(chǔ)的第一個(gè)存儲(chǔ)地址對(duì)應(yīng)的標(biāo)簽tag[w:z]限定的內(nèi)容相同,因此第三請(qǐng)求中存儲(chǔ)地址命中該block中存儲(chǔ)的第一個(gè)存儲(chǔ)地址的目錄字段,并且由于associate[1:0]的值與ass0[1:0]的值不相等,因此第三請(qǐng)求中存儲(chǔ)地址與該block中存儲(chǔ)的包括ass0[1:0]的目錄字段對(duì)應(yīng)的存儲(chǔ)地址是關(guān)聯(lián)地址。
利用{index,tag[w:x+1],tag1[x:y],tag[y-1:z],ass1[1:0]}替換出未被命中的第二個(gè)存儲(chǔ)地址。這里的tag[w:x+1],tag1[x:y],tag[y-1:z]的意思是用tag1對(duì)應(yīng)的域段[x:y]的內(nèi)容替換第一個(gè)存儲(chǔ)地址的標(biāo)簽tag[w:z]的內(nèi)容中域段[x:y]的內(nèi)容,將替換后的域段[w:z]中的內(nèi)容作為被替換出的存儲(chǔ)地址的標(biāo)簽,即標(biāo)簽對(duì)應(yīng)的域段是[w:z],其中,域段[w:x+1]和域段[y-1:z]中的內(nèi)容分別與第一個(gè)存儲(chǔ)地址對(duì)應(yīng)的標(biāo)簽中域段[w:x+1]和域段[y-1:z]中的內(nèi)容相同,域段[x:y]中的內(nèi)容與第二個(gè)存儲(chǔ)地址對(duì)應(yīng)的標(biāo)簽中域段[x:y]中的內(nèi)容相同。由于在得到非關(guān)聯(lián)模式的block時(shí),tag1[x:y]記錄的是第二個(gè)存儲(chǔ)地址的標(biāo)簽與第一個(gè)存儲(chǔ)地址的標(biāo)簽中不同的內(nèi)容,因此,這里通過(guò)利用tag1[x:y]限定的內(nèi)容替換第一個(gè)存儲(chǔ)地址的標(biāo)簽中域段[x:y]的內(nèi)容,可以得到第二個(gè)存儲(chǔ)地址的標(biāo)簽限定的內(nèi)容,結(jié)合index限定的內(nèi)容和指示項(xiàng)ass1[1:0]限定的內(nèi)容,可以恢復(fù)出第二個(gè)存儲(chǔ)地址。該存儲(chǔ)地址被替換出去后,系統(tǒng)會(huì)對(duì)其做其他處理。
然后將被命中的第一個(gè)存儲(chǔ)地址的標(biāo)簽tag[w:z]移至關(guān)聯(lián)模式的block中的標(biāo)簽位置。根據(jù)舊目錄中的指示項(xiàng)的值,ass0[1:0]=2’b10,由于ass0[1:0]的值是兩位二進(jìn)制數(shù)10,二進(jìn)制數(shù)10等于十進(jìn)制數(shù)2,因此將ste0和vect0存儲(chǔ)的目錄信息移至ste2和vect2的位置。
系統(tǒng)根據(jù)第三請(qǐng)求所請(qǐng)求的狀態(tài)以及發(fā)送第三請(qǐng)求的處理器生成新目錄信息,由于associate[1:0]的值是2’b00,即associate[1:0]的值是兩位二進(jìn)制數(shù)00,二進(jìn)制數(shù)00等于十進(jìn)制數(shù)0,因此將新目錄信息記錄到ste0和vect0的位置。
如圖4G所示,目錄cache接收到一個(gè)包含第三存儲(chǔ)地址的第三請(qǐng)求,命中{index,tag[w:x+1],tag1[x:y],tag[y-1:z]},即通過(guò)第三請(qǐng)求中第三存儲(chǔ)地址的index命中該block所在的set,通過(guò)tag[w:x+1],tag1[x:y],tag[y-1:z]命中該set中的一個(gè)block,被命中的block的指示位為1,是非關(guān)聯(lián)模式。這里的tag[w:x+1],tag1[x:y],tag[y-1:z]的意思是第三存儲(chǔ)地址中的標(biāo)簽限定的內(nèi)容中域段[x:y]的內(nèi)容與tag1[x:y]限定的內(nèi)容相同,除了域段[x:y]的內(nèi)容之外,標(biāo)簽限定的其他域段的內(nèi)容與第一個(gè)存儲(chǔ)地址的標(biāo)簽tag[w:z]限定的對(duì)應(yīng)域段的內(nèi)容相同。而非關(guān)聯(lián)模式的block中存儲(chǔ)的第二個(gè)存儲(chǔ)地址對(duì)應(yīng)的標(biāo)簽限定的內(nèi)容與第一個(gè)存儲(chǔ)地址對(duì)應(yīng)的標(biāo)簽限定的內(nèi)容除了域段[x:y]的內(nèi)容不同,并且不同的內(nèi)容記錄在tag1[x:y]中,標(biāo)簽限定的其他部分的內(nèi)容均相同,因此第三存儲(chǔ)地址的標(biāo)簽與非關(guān)聯(lián)模式的block中存儲(chǔ)的第二個(gè)存儲(chǔ)地址對(duì)應(yīng)的標(biāo)簽相同,因此第三存儲(chǔ)地址命中該block中存儲(chǔ)的第二個(gè)存儲(chǔ)地址的目錄字段,并且由于associate[1:0]的值與ass1[1:0]的值不相等,因此第三存儲(chǔ)地址與該block中存儲(chǔ)的包括ass1[1:0]的目錄字段對(duì)應(yīng)的存儲(chǔ)地址是關(guān)聯(lián)地址。
利用{index,tag[w:z],ass0[1:0]}替換出未被命中的第一個(gè)存儲(chǔ)地址。由于存儲(chǔ)地址被劃分為index、tag和associate三部分,每個(gè)部分限定存儲(chǔ)地址中的一部分內(nèi)容,這里通過(guò)index限定的內(nèi)容,結(jié)合tag[w:z]限定的內(nèi)容和指示項(xiàng)ass0[1:0]限定的內(nèi)容,可以恢復(fù)出第一個(gè)存儲(chǔ)地址。該存儲(chǔ)地址被替換出去后,系統(tǒng)會(huì)對(duì)其做其他處理。
然后將命中的第二個(gè)存儲(chǔ)地址的標(biāo)簽tag[w:x+1],tag1[x:y],tag[y-1:z]移至關(guān)聯(lián)模式的block中的標(biāo)簽位置,第三存儲(chǔ)地址的標(biāo)簽與新目錄中的標(biāo)簽tag[w:z]均記錄的是tag[w:x+1],tag1[x:y],tag[y-1:z]的內(nèi)容,即標(biāo)簽對(duì)應(yīng)的域段是[w:z],其中,域段[w:x+1]和域段[y-1:z]中的內(nèi)容與第一個(gè)存儲(chǔ)地址對(duì)應(yīng)的標(biāo)簽中域段[w:x+1]和域段[y-1:z]中的內(nèi)容相同,域段[x:y]中的內(nèi)容與第二個(gè)存儲(chǔ)地址對(duì)應(yīng)的標(biāo)簽中域段[x:y]中的內(nèi)容相同。根據(jù)舊目錄中的指示項(xiàng)的值,ass1[1:0]=2’b10,由于ass1[1:0]的值是兩位二進(jìn)制數(shù)10,二進(jìn)制數(shù)10等于十進(jìn)制數(shù)2,因此將ste1和vect1存儲(chǔ)的目錄信息移至ste2和vect2的位置。
系統(tǒng)根據(jù)第三請(qǐng)求所請(qǐng)求的狀態(tài)以及發(fā)送第三請(qǐng)求的處理器生成新目錄信息,由于associate[1:0]的值是2’b00,即associate[1:0]的值是兩位二進(jìn)制數(shù)00,二進(jìn)制數(shù)00等于十進(jìn)制數(shù)0,因此將新目錄信息記錄到ste0和vect0的位置。
上述步驟可以由圖2中的目錄cache 130來(lái)執(zhí)行。
綜上所述,本發(fā)明實(shí)施例提供的地址訪問(wèn)方法,由于在命中一個(gè)非關(guān)聯(lián)模式的第二block,且第二block中對(duì)應(yīng)的指示項(xiàng)的值與第三存儲(chǔ)地址中的第二關(guān)聯(lián)的值不等時(shí),表明第二block中存儲(chǔ)有一個(gè)目錄信息所對(duì)應(yīng)的存儲(chǔ)地址與第三請(qǐng)求中的第三存儲(chǔ)地址是關(guān)聯(lián)地址,而關(guān)聯(lián)模式的block中只需要存儲(chǔ)一個(gè)標(biāo)簽,另外不需要存儲(chǔ)指示項(xiàng),因此將第二block由非關(guān)聯(lián)模式轉(zhuǎn)換為關(guān)聯(lián)模式,可以空出部分字段存儲(chǔ)更多的關(guān)聯(lián)地址。
圖5是本發(fā)明一個(gè)實(shí)施例提供的一種地址訪問(wèn)裝置的結(jié)構(gòu)方框圖。該地址訪問(wèn)裝置可以通過(guò)軟件、硬件或者兩者的結(jié)合實(shí)現(xiàn)成上述圖2所示硬件設(shè)備200的全部或者一部分。該地址訪問(wèn)裝置可以包括:接收單元510、查找單元520、修改單元530和替換單元540。
接收單元510,用于實(shí)現(xiàn)上述步驟401的功能。
查找單元520,用于實(shí)現(xiàn)上述步驟402的功能。
修改單元530,用于實(shí)現(xiàn)上述步驟403的功能。
替換單元540,用于實(shí)現(xiàn)上述步驟404的功能。
可選的,本發(fā)明另一個(gè)實(shí)施例提供的地址訪問(wèn)裝置的框圖。該地址訪問(wèn)裝置可以包括:接收單元510、查找單元520、修改單元530和替換單元540。
接收單元510,用于實(shí)現(xiàn)上述步驟405、步驟407和步驟408的功能。
查找單元520,用于實(shí)現(xiàn)上述步驟409的功能。
修改單元530,用于實(shí)現(xiàn)上述步驟410的功能。
替換單元540,用于實(shí)現(xiàn)上述步驟406、步驟411、步驟412和步驟413的功能。
接收單元510,還用于實(shí)現(xiàn)上述查找目錄中與第一組索引對(duì)應(yīng)的block的功能。
查找單元520,還用于實(shí)現(xiàn)上述在查找到的block中的標(biāo)簽均與第一請(qǐng)求中的標(biāo)簽不同,且查找到的block均被占用時(shí),從第一組索引對(duì)應(yīng)的block中查找符合模式轉(zhuǎn)換條件的第一block的功能。
相關(guān)細(xì)節(jié)可結(jié)合參考上述方法實(shí)施例。
需要說(shuō)明的是:上述實(shí)施例提供的地址訪問(wèn)裝置在訪問(wèn)存儲(chǔ)地址的數(shù)據(jù)時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說(shuō)明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將設(shè)備的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的地址訪問(wèn)裝置與地址訪問(wèn)方法的方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過(guò)程詳見(jiàn)方法實(shí)施例,這里不再贅述。
應(yīng)當(dāng)理解的是,在本文中使用的,除非上下文清楚地支持例外情況,單數(shù)形式“一個(gè)”(“a”、“an”、“the”)旨在也包括復(fù)數(shù)形式。還應(yīng)當(dāng)理解的是,在本文中使用的“和/或”是指包括一個(gè)或者一個(gè)以上相關(guān)聯(lián)地列出的項(xiàng)目的任意和所有可能組合。
上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過(guò)硬件來(lái)完成,也可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤(pán)或光盤(pán)等。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。