專利名稱:多個(gè)轉(zhuǎn)換高速緩存缺失的處理方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總體上涉及處理命令隊(duì)列中的命令。更具體地,本發(fā)明涉及在地址轉(zhuǎn)換中發(fā)生多個(gè)高速緩存缺失(miss,未找到,未命中)之后保持命令隊(duì)列中的命令排序。
背景技術(shù):
計(jì)算系統(tǒng)通常包括一個(gè)或者多個(gè)通信耦合到內(nèi)存(memory,存儲(chǔ)器,記憶體)和輸入輸出(IO)設(shè)備的中央處理器(CPU)。內(nèi)存可以是包含計(jì)算機(jī)執(zhí)行計(jì)算所必需的一個(gè)或者多個(gè)程序和數(shù)據(jù)的隨機(jī)存取存儲(chǔ)器(RAM)。例如,內(nèi)存可以包含用于對(duì)數(shù)據(jù)加密的程序以及要被加密的數(shù)據(jù)。IO設(shè)備可以包括視頻卡、聲卡、圖形處理單元等,被配置為發(fā)出命令和從CPU接收響應(yīng)。
CPU可以解釋和執(zhí)行從內(nèi)存或者IO設(shè)備接收到的一個(gè)或者多個(gè)命令。例如,系統(tǒng)可以接收將兩個(gè)數(shù)相加的請(qǐng)求。CPU可以執(zhí)行包含所述將兩個(gè)數(shù)相加的邏輯的程序(在內(nèi)存中)的命令的序列。CPU還可以從輸入設(shè)備接收輸入兩個(gè)要相加的數(shù)的用戶輸入。在計(jì)算的末尾,CPU可以在輸出設(shè)備比如顯示屏上顯示結(jié)果。
由于在處理了前一命令之后發(fā)送來(lái)自設(shè)備的下一個(gè)命令可能需要比較長(zhǎng)的時(shí)間,在此期間CPU可能不得不保持空閑狀態(tài),這樣來(lái)自設(shè)備的多個(gè)命令就可能在CPU中的命令隊(duì)列中排隊(duì)。因此,CPU可以在處理了上一個(gè)命令之后快速訪問(wèn)下一個(gè)命令。由于命令之間的相關(guān)性,CPU可能被要求按照給定的順序執(zhí)行命令。因此,可以將命令置于隊(duì)列中,按照先進(jìn)先出(FIFO)的順序處理,以確保相關(guān)的命令按照正確的順序被執(zhí)行。例如,如果在某個(gè)內(nèi)存位置的讀操作在該內(nèi)存位置的寫操作之后,則必須首先執(zhí)行寫操作,以確保在讀操作期間讀出正確的數(shù)據(jù)。因此,源自同一I/O設(shè)備的命令可以由CPU按照它們被接收到的順序加以處理,而來(lái)自不同設(shè)備的命令可以亂序處理。
CPU接收的命令可以大致分類為(a)要求地址轉(zhuǎn)換的命令以及(b)沒(méi)有地址的命令。沒(méi)有地址的命令可以包括中斷和同步命令,比如PowerPC的eieio(Enforce In-order Execution of Input/Output,按順序執(zhí)行輸入輸出)命令。中斷命令可以是從設(shè)備到CPU,請(qǐng)求CPU將正在做的事情擱置一邊,做別的事情的命令??梢园l(fā)出同步命令,使得在該同步命令之前的所有命令被處理完之前不處理隨后的命令。因?yàn)闆](méi)有地址與這些命令相關(guān)聯(lián),它們可以不需要地址轉(zhuǎn)換。
要求地址轉(zhuǎn)換的命令包括讀命令和寫命令。讀命令可以包括要讀的數(shù)據(jù)的位置的地址。類似地,寫命令可以包括要寫入數(shù)據(jù)的位置的地址。因?yàn)樵诿钪刑峁┑牡刂房梢允翘摂M地址,在執(zhí)行讀或?qū)懼埃摰刂房赡苄枰D(zhuǎn)換為內(nèi)存中的實(shí)際物理地址。
地址轉(zhuǎn)換可能需要查找段表和/或頁(yè)表,以用物理地址匹配虛擬地址。對(duì)于最近的目標(biāo)地址,頁(yè)表和段表?xiàng)l目可以被保持在高速緩存中,以便快速高效地訪問(wèn)。但是,即使通過(guò)高速緩存進(jìn)行快速高效的訪問(wèn),在地址轉(zhuǎn)換過(guò)程中,隨后的命令也可能在流水線中停頓下來(lái)。對(duì)這種問(wèn)題的一個(gè)解決辦法是在地址轉(zhuǎn)換的過(guò)程中處理命令隊(duì)列中隨后的命令。但是,對(duì)于來(lái)自同一I/O設(shè)備的命令,仍必須保持命令順序。
如果在轉(zhuǎn)換期間在高速緩存中沒(méi)有找到將虛擬地址轉(zhuǎn)換為物理地址的表?xiàng)l目,則可能不得不從內(nèi)存取該條目。在未找到轉(zhuǎn)換高速緩存時(shí)的取條目操作會(huì)導(dǎo)致實(shí)質(zhì)性的等待時(shí)間。當(dāng)對(duì)某個(gè)命令發(fā)生了轉(zhuǎn)換高速緩存缺失時(shí),隨后的命令的地址轉(zhuǎn)換可能仍在繼續(xù)。但是,系統(tǒng)可能只允許一個(gè)轉(zhuǎn)換高速緩存缺失。因此,只有那些轉(zhuǎn)換高速緩存命中(hit,找到)(缺失之后的命中,即未找到之后的找到)的隨后的命令,或者那些不要求地址轉(zhuǎn)換的命令,才能在處理轉(zhuǎn)換高速緩存缺失的同時(shí)被處理。因?yàn)閷?duì)轉(zhuǎn)換高速緩存缺失的處理可能要花較長(zhǎng)時(shí)間,在處理第一個(gè)轉(zhuǎn)換高速緩存缺失的同時(shí)發(fā)生第二個(gè)轉(zhuǎn)換高速緩存缺失的概率比較高。
對(duì)這種問(wèn)題的一種解決方案是一次只處理一個(gè)命令。但是,如上所述,這可能導(dǎo)致性能的嚴(yán)重下降,因?yàn)樵诘刂忿D(zhuǎn)換期間命令可能在流水線中停頓下來(lái)。另一種解決方案是包括處理多個(gè)缺失的硬件。但是,對(duì)于必須要處理的每一個(gè)增加的多個(gè)缺失,這種解決方案可能使系統(tǒng)越來(lái)越復(fù)雜。還有一種解決方案可以是轉(zhuǎn)換高速緩存的預(yù)載入,其中用軟件確保沒(méi)有缺失的情況。但是,這種解決方案導(dǎo)致了不受歡迎的大量軟件開(kāi)銷。
因此,需要高效處理命令隊(duì)列中的多個(gè)高速緩存缺失的系統(tǒng)和方法。
發(fā)明內(nèi)容
本發(fā)明總體上提供了用于處理命令隊(duì)列中的命令的方法系統(tǒng)。更具體地,本發(fā)明涉及在地址轉(zhuǎn)換中發(fā)生多個(gè)高速緩存缺失之后保持命令隊(duì)列中的命令排序。
本發(fā)明的一種實(shí)施方式提供了一種用于處理命令隊(duì)列中的多個(gè)轉(zhuǎn)換高速緩存缺失的方法,所述命令隊(duì)列中存儲(chǔ)了從一個(gè)或者多個(gè)輸入輸出設(shè)備接收到的命令序列。該方法總體上包括將命令隊(duì)列中的第一命令的目標(biāo)地址發(fā)送給地址轉(zhuǎn)換邏輯以被轉(zhuǎn)換,如果判定在包含命令隊(duì)列中的第一命令的目標(biāo)地址的虛擬到實(shí)際轉(zhuǎn)換的轉(zhuǎn)換邏輯的地址轉(zhuǎn)換表中不存在地址轉(zhuǎn)換條目,則啟動(dòng)從內(nèi)存中取地址轉(zhuǎn)換條目。該方法還包括在取所述第一命令的條目的同時(shí),處理在該第一命令之后接收到的一個(gè)或者多個(gè)命令,其中,所述處理包括將命令隊(duì)列中第二命令的目標(biāo)地址發(fā)送到地址轉(zhuǎn)換邏輯以被轉(zhuǎn)換,如果判定在包含該第二命令的目標(biāo)地址的虛擬到實(shí)際轉(zhuǎn)換的轉(zhuǎn)換邏輯的地址轉(zhuǎn)換表中不存在地址轉(zhuǎn)換條目,則停止隨后的命令的處理,直到取到所述第一條目的目標(biāo)地址的地址轉(zhuǎn)換條目,其中,停止所述命令的處理包括停止處理命令,并設(shè)置指向命令隊(duì)列中的第二命令的指針。
本發(fā)明的另一種實(shí)施方式提供了一種總體上包括一個(gè)或者多個(gè)輸入輸出設(shè)備和處理器的系統(tǒng)。該處理器總體上包括(i)命令隊(duì)列,被配置為存儲(chǔ)從一個(gè)或者多個(gè)輸入輸出設(shè)備接收到的命令序列,(ii)輸入控制器,被配置為以流水線方式處理來(lái)自所述命令隊(duì)列的命令,(iii)地址轉(zhuǎn)換邏輯,被配置為使用具有包含虛擬到實(shí)際地址轉(zhuǎn)換的條目的地址轉(zhuǎn)換表,轉(zhuǎn)換所述輸入控制器處理的命令的目標(biāo)地址,以及(iv)控制邏輯,被配置為,如果判定在包含在第一命令之后接收到的第二命令的目標(biāo)地址的虛擬到實(shí)際轉(zhuǎn)換的轉(zhuǎn)換邏輯的地址轉(zhuǎn)換表中不存在地址轉(zhuǎn)換條目,則停止輸入控制器對(duì)在正在取地址轉(zhuǎn)換條目的第一命令之后收到的命令的處理,直到取到第一命令的目標(biāo)地址的地址轉(zhuǎn)換條目,并設(shè)置指向所述第二命令在命令隊(duì)列中的地址的指針。
本發(fā)明的再一種實(shí)施方式包括一種微處理器,其總體上包括(i)命令隊(duì)列,被配置為存儲(chǔ)來(lái)自輸入輸出設(shè)備的命令序列,(ii)輸入控制器,被配置為以流水線方式處理所述命令隊(duì)列中的命令,(iii)地址轉(zhuǎn)換邏輯,被配置為使用高速緩存的地址轉(zhuǎn)換條目將虛擬地址轉(zhuǎn)換為物理地址,如果在高速緩存中未找到某個(gè)命令的地址轉(zhuǎn)換條目,則從內(nèi)存中取對(duì)應(yīng)的地址轉(zhuǎn)換條目,以及(iv)輸出控制器,被配置為,如果檢測(cè)到在第一命令之后接收到的第二命令的目標(biāo)地址的轉(zhuǎn)換條目在地址轉(zhuǎn)換表中不存在,則停止處理在第一命令之后收到的命令的處理,直到取到第一命令的目標(biāo)地址的地址轉(zhuǎn)換條目,并設(shè)置指向所述第二命令在命令隊(duì)列中的地址的指針。
為了更好地理解上述特征、優(yōu)點(diǎn)和本發(fā)明的目的,下面參照輔以附解的實(shí)施例詳細(xì)說(shuō)明在上面已概要說(shuō)明的本發(fā)明。
但是應(yīng)當(dāng)注意,附圖只是圖解了本發(fā)明的典型實(shí)施方式,因此不應(yīng)視為限制本發(fā)明的范圍,因?yàn)楸景l(fā)明還可以有其他等效的實(shí)施方式。
圖1圖解了本發(fā)明的一種實(shí)施方式的系統(tǒng)示例;圖2圖解了本發(fā)明的一種實(shí)施方式的命令處理器;圖3是由轉(zhuǎn)換接口輸入控制(translate interface input control)執(zhí)行的處理輸入命令FIFO隊(duì)列中的命令的示例操作的流程圖;
圖4是由轉(zhuǎn)換邏輯執(zhí)行的將虛擬地址轉(zhuǎn)換為物理地址的示例操作的流程圖;圖5是由轉(zhuǎn)換接口輸出控制(translate interface output control)執(zhí)行的處理多個(gè)轉(zhuǎn)換高速緩存缺失的示例操作的流程圖;圖6是在重新處理導(dǎo)致缺失之后又缺失的命令之前執(zhí)行的刷新流水線的示例操作的流程圖。
具體實(shí)施例方式
本發(fā)明的實(shí)施方式提供了在處理多個(gè)轉(zhuǎn)換高速緩存缺失的同時(shí)保持處理命令隊(duì)列中的命令時(shí)的命令順序的方法和系統(tǒng)。命令可以在CPU中的輸入命令隊(duì)列中排隊(duì)。在命令的地址轉(zhuǎn)換期間,可以處理后面的命令以提高效率。處理后的命令可以放在輸出隊(duì)列中,由輸入輸出設(shè)備按順序送給CPU。在地址轉(zhuǎn)換期間,如果在正在處理尚未解決的缺失的同時(shí)又發(fā)生轉(zhuǎn)換高速緩存缺失,則可以使流水線停頓,可以在處理了第一個(gè)缺失之后再處理導(dǎo)致第二個(gè)缺失的命令和所有隨后的命令。
下面的說(shuō)明將參照本發(fā)明的一些實(shí)施方式。但是,應(yīng)當(dāng)理解,本發(fā)明不限于這里具體描述的實(shí)施方式。相反,下面的特征和元素?zé)o論是否和不同的實(shí)施方式相關(guān),都可以想到對(duì)它們進(jìn)行任意組合來(lái)實(shí)現(xiàn)和實(shí)施本發(fā)明。另外,在各種實(shí)施方式中,本發(fā)明提供了許多相對(duì)于現(xiàn)有技術(shù)的優(yōu)點(diǎn)。但是,盡管本發(fā)明的實(shí)施方式可以實(shí)現(xiàn)相對(duì)于現(xiàn)有技術(shù)和/或其他可能解決方案的優(yōu)點(diǎn),但是某一給定實(shí)施方式是否實(shí)現(xiàn)某一特定優(yōu)點(diǎn)并不是對(duì)本發(fā)明的限制。因此,下面的各個(gè)方面、特征、實(shí)施方式和優(yōu)點(diǎn)只是說(shuō)明性的,不應(yīng)視為所附權(quán)利要求的元素或者限制,除非在權(quán)利要求書中明確記載。類似地,當(dāng)說(shuō)“本發(fā)明”時(shí),不應(yīng)理解為是對(duì)這里所公開(kāi)的發(fā)明主題的概括,也不應(yīng)視為所附權(quán)利要求的要素或者限制,除非在權(quán)利要求書中明確記載。
系統(tǒng)示例圖1圖解了一個(gè)系統(tǒng)示例100,其中可以實(shí)現(xiàn)本發(fā)明的各實(shí)施方式。系統(tǒng)100可以包括通信耦合到輸入輸出(I/O)設(shè)備120和內(nèi)存140的中央處理器(CPU)110。例如,CPU110可以利用總線通過(guò)輸入輸出橋120耦合到輸入輸出設(shè)備130和內(nèi)存140。輸入輸出設(shè)備130可以被配置為提供對(duì)CPU110的輸入,例如,如圖所示,通過(guò)命令131。輸入輸出設(shè)備的例子包括圖形處理單元、視頻卡、聲卡、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)等。
輸入輸出設(shè)備130也可以被配置為從CPU110接收響應(yīng)132。響應(yīng)132例如可以包括可以顯示給用戶的CPU110的計(jì)算結(jié)果。響應(yīng)132還可以包括對(duì)內(nèi)存設(shè)備比如上述DRAM設(shè)備執(zhí)行的寫操作。盡管在圖1中圖解的是一個(gè)輸入輸出設(shè)備120,但本領(lǐng)域普通技術(shù)人員知道可以在同一條或者多條總線上向CPU耦合任意數(shù)量的輸入輸出設(shè)備130。
內(nèi)存140最好是隨機(jī)存取存儲(chǔ)器比如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)。內(nèi)存140可以足夠大,以保存一個(gè)或者多個(gè)程序和/或由CPU處理的數(shù)據(jù)結(jié)構(gòu)。盡管內(nèi)存140被圖示為單個(gè)實(shí)體,但是應(yīng)當(dāng)理解,內(nèi)存140事實(shí)上可以包括多個(gè)模塊,并且內(nèi)存140可以有多種層次,從高速緩存一直到低速但是容量更大的DRAM芯片。
CPU110可以包括命令處理器111、轉(zhuǎn)換邏輯112、內(nèi)嵌處理器(embedded processor)113和高速緩存114。命令處理器110可以從輸入輸出設(shè)備120接收一個(gè)或者多個(gè)命令131并處理所述命令。每一個(gè)命令131可以寬泛地分類為需要地址轉(zhuǎn)換的命令和沒(méi)有地址的命令。因此,對(duì)命令的處理可以包括確定該命令是否要求地址轉(zhuǎn)換。如果命令需要地址轉(zhuǎn)換,則命令處理器可以將該命令分派到轉(zhuǎn)換邏輯112進(jìn)行地址轉(zhuǎn)換。在命令131中要求轉(zhuǎn)換的命令都被轉(zhuǎn)換后,命令處理器可以將有序的命令133放到芯片內(nèi)總線117上,由內(nèi)存控制118上的內(nèi)嵌處理器113處理。
轉(zhuǎn)換邏輯112可以從命令處理器111接收一個(gè)或者多個(gè)要求地址轉(zhuǎn)換的命令。要求地址轉(zhuǎn)換的命令例如可以包括讀命令和寫命令。讀命令可以包括要讀的數(shù)據(jù)的位置的地址。類似地,寫操作可以包括數(shù)據(jù)要寫到的位置的地址。
包括在要求轉(zhuǎn)換的命令中的地址可以是虛擬地址。虛擬地址可以指向分配給特定程序的虛擬內(nèi)存。虛擬內(nèi)存可以是分配給該程序的連續(xù)的存儲(chǔ)空間,該空間映射到內(nèi)存140內(nèi)的不同的、不相鄰的物理存儲(chǔ)位置。例如,虛擬內(nèi)存地址可以映射到物理內(nèi)存(memory)和/或輔助存儲(chǔ)器(secondary storage)中的不同的不相鄰的存儲(chǔ)位置。因此,當(dāng)使用虛擬內(nèi)存地址時(shí),虛擬地址必須被轉(zhuǎn)換為實(shí)際的物理地址以對(duì)該位置執(zhí)行操作。
地址轉(zhuǎn)換可能涉及到查找段表和/或頁(yè)表。段表和頁(yè)表可以將虛擬地址與物理地址相匹配。這些轉(zhuǎn)換表?xiàng)l目可以駐留在存儲(chǔ)區(qū)140中。最近訪問(wèn)的數(shù)據(jù)的地址轉(zhuǎn)換可以被保持在高速緩存114中的段表?xiàng)l目116和頁(yè)表?xiàng)l目115中,以減少隨后的對(duì)先前訪問(wèn)過(guò)的地址的訪問(wèn)的轉(zhuǎn)換時(shí)間。如果在高速緩存114中沒(méi)有找到某個(gè)地址轉(zhuǎn)換,那么在必要的情況下,可以將所述轉(zhuǎn)換從內(nèi)存或者其他存儲(chǔ)器引入所述高速緩存。
段表?xiàng)l目116可以表明虛擬地址是否在被分配給特定程序的存儲(chǔ)段內(nèi)。段可以是虛擬內(nèi)存中大小可變的塊,每一個(gè)塊被分配給特定的程序或者進(jìn)程。因此,可以首先訪問(wèn)段表。如果虛擬地址指向程序的段的邊界之外的區(qū)域,則可能發(fā)生分段錯(cuò)誤(segmentation fault)。
每一個(gè)段可以進(jìn)一步分為稱為頁(yè)的固定大小的塊。虛擬地址可以指向段內(nèi)所包含的一個(gè)或者多個(gè)頁(yè)。頁(yè)表115可以將虛擬地址映射到內(nèi)存140內(nèi)的頁(yè)。如果在內(nèi)存中沒(méi)有找到某頁(yè),可以從可能駐留有希望的頁(yè)的輔助存儲(chǔ)器中取出該頁(yè)。
命令處理圖2是根據(jù)本發(fā)明的一種實(shí)施方式的命令處理器111的詳細(xì)視圖,該命令處理器111可以被配置為處理來(lái)自輸入輸出設(shè)備130的命令。命令處理器111可以包含輸入命令FIFO201、轉(zhuǎn)換接口輸入控制(translate interface input control)202、轉(zhuǎn)換接口輸出控制(translateinterface output control)203和命令FIFO204。輸入命令FIFO201可以是足夠大的緩沖器,以能保持至少預(yù)定數(shù)量的可能由輸入輸出設(shè)備120發(fā)給CPU的命令131。命令131可以按照其被收到的順序依次放入輸入命令FIFO201中。
轉(zhuǎn)換接口輸入控制(TIIC)202可以監(jiān)視和管理輸入命令FIFO201。TIIC可以維護(hù)讀指針210和寫指針211。讀指針210可以指向輸入命令FIFO中用于處理的下一個(gè)可用的命令。寫指針211可以指向輸入命令FIFO中用于寫新接收到的命令的下一個(gè)可用的位置。隨著從輸入命令FIFO中取出每一個(gè)命令來(lái)進(jìn)行處理,讀指針增一。類似地,隨著從輸入輸出設(shè)備接收每一個(gè)命令,寫指針也增一。如果讀或?qū)懼羔樀竭_(dá)輸入命令FIFO的末尾,則可以重置指針,使其在下一次增一時(shí)指向輸入命令FIFO的開(kāi)始。
TIIC202可以被配置為通過(guò)防止寫指針的增加超過(guò)讀指針,確保輸入命令FIFO不溢出。例如,如果寫指針增加了并指向與讀指針相同的位置,則緩沖器填滿了未被處理的命令。如果再收到任何命令,則TIIC可以發(fā)出出錯(cuò)消息,指出命令不能被栓鎖在CPU中。
TIIC202還可以判斷在輸入命令FIFO201中收到的命令是否是要求地址轉(zhuǎn)換的命令。如果收到了要求轉(zhuǎn)換的命令,則可以將該命令送到轉(zhuǎn)換邏輯112進(jìn)行處理。但是,如果該命令不要求地址轉(zhuǎn)換,則該命令可以在流水線中往下傳。
圖3是由TIIC執(zhí)行的處理輸入命令FIFO中的命令的示例操作的流程圖。TIIC執(zhí)行的操作可以是流水線操作。因此,在任何給定時(shí)間可能有多個(gè)命令在進(jìn)程中。例如,TIIC可能從輸入命令FIFO收到第一命令進(jìn)行處理。在收到第一命令的時(shí)候,以前收到的第二命令可以由TIIC發(fā)送給轉(zhuǎn)換邏輯進(jìn)行地址轉(zhuǎn)換。
TIIC中的操作始于步驟301,從輸入命令FIFO接收命令。例如,TIIC可以讀所述讀指針?biāo)傅拿?。在讀該命令后,讀指針可以增一以指向下一個(gè)命令。在步驟302,TIIC可以判斷所取得命令是否要求地址轉(zhuǎn)換。如判定該命令要求地址轉(zhuǎn)換,則該命令可以在步驟303被送往轉(zhuǎn)換邏輯112進(jìn)行地址轉(zhuǎn)換。在步驟304,被送往轉(zhuǎn)換邏輯的該命令的輸入命令FIFO地址可以在流水線中向下傳送。在步驟302,如果判定該命令不要求地址轉(zhuǎn)換,則可以將該命令和該命令的輸入命令FIFO地址在步驟305在流水線中向下傳送。
現(xiàn)在回到圖2,轉(zhuǎn)換邏輯112可以處理來(lái)自TIIC的地址轉(zhuǎn)換請(qǐng)求。地址轉(zhuǎn)換可能涉及查找段表和頁(yè)表,以將虛擬地址轉(zhuǎn)換為內(nèi)存140中的實(shí)際物理地址。在某些實(shí)施方案中,轉(zhuǎn)換邏輯可以允許對(duì)頁(yè)表和段表高速緩存進(jìn)行流水線訪問(wèn)。如果在地址轉(zhuǎn)換過(guò)程中碰到頁(yè)或段高速緩存缺失,則在處理該高速緩存缺失的同時(shí),高速緩存可以繼續(xù)對(duì)隨后的命令提供高速緩存命中。
如果在地址轉(zhuǎn)換過(guò)程中沒(méi)有出現(xiàn)缺失,則轉(zhuǎn)換邏輯可以向轉(zhuǎn)換接口輸出控制(TIOC)203提供轉(zhuǎn)換結(jié)果,如圖2所示。但是,如果發(fā)生了缺失的情況,則轉(zhuǎn)換邏輯可以將導(dǎo)致缺失的命令通知給TIOC。
圖4是由轉(zhuǎn)換邏輯執(zhí)行的進(jìn)行地址轉(zhuǎn)換的示例操作的流程圖。與TIIC一樣,由轉(zhuǎn)換邏輯執(zhí)行的操作也可以流水線化。因此,在任何給定時(shí)間,可以有多個(gè)命令在進(jìn)程中。操作可以開(kāi)始于步驟401,從TIIC接收進(jìn)行地址轉(zhuǎn)換的請(qǐng)求。在步驟402,轉(zhuǎn)換邏輯可以訪問(wèn)段表和頁(yè)表高速緩存,以取出對(duì)應(yīng)的條目來(lái)將虛擬地址轉(zhuǎn)換為物理地址。在步驟403,如果在高速緩存中找到了對(duì)應(yīng)的頁(yè)表和段表?xiàng)l目,則可以將地址轉(zhuǎn)換結(jié)果在步驟404發(fā)送給TIOC。
但是,如果在段表和頁(yè)表高速緩存中沒(méi)有找到頁(yè)表和段表?xiàng)l目,則可在步驟405中將有關(guān)該命令地址的轉(zhuǎn)換缺失的通知發(fā)送給TIOC。在步驟406,轉(zhuǎn)換邏輯可以啟動(dòng)缺失處理程序。例如,缺失處理可以包括向內(nèi)存發(fā)送對(duì)對(duì)應(yīng)的頁(yè)表和段表?xiàng)l目的請(qǐng)求。
重要的是要注意到,對(duì)于某些實(shí)施方式,當(dāng)有未解決的缺失正在被處理時(shí),轉(zhuǎn)換邏輯只能處理一個(gè)轉(zhuǎn)換高速緩存缺失。如果發(fā)生第二個(gè)缺失,則可以將缺失通知發(fā)送給TIOC。下面將詳細(xì)討論在正在處理未解決的缺失時(shí)對(duì)第二個(gè)缺失的處理。另外,在正在處理未解決的缺失時(shí),隨后的要求地址轉(zhuǎn)換的命令可以繼續(xù)被處理。因?yàn)閺膬?nèi)存或者輔助存儲(chǔ)器取頁(yè)表和段表?xiàng)l目可能需要比較長(zhǎng)的時(shí)間,停止隨后的命令可能使性能產(chǎn)生實(shí)質(zhì)性的下降。因此,在正在處理某個(gè)缺失時(shí),可以處理找到了轉(zhuǎn)換高速緩存的隨后的命令。
處理缺失之后的命中回到圖2,TIOC可以跟蹤正在被轉(zhuǎn)換邏輯處理的未解決的缺失的數(shù)量,并基于命令之間的相關(guān)關(guān)系維持命令的排序。例如,TIOC可以接收被送往轉(zhuǎn)換邏輯進(jìn)行地址轉(zhuǎn)換的命令以及不要求地址轉(zhuǎn)換的命令的輸入命令FIFO地址。如果命令是從同一輸入輸出設(shè)備亂序收到的,則TIOC可以將這些命令保持在命令隊(duì)列204中,并基于這些命令的輸入命令FIFO地址按照所要求的順序?qū)⑦@些命令分派給CPU。圖2圖解了TIOC存儲(chǔ)在命令隊(duì)列204中的命令。如果命令對(duì)于輸入輸出設(shè)備來(lái)說(shuō)不是亂序的,則TIOC可以如圖所示將命令133分派給CPU。
例如,輸入命令FIFO中的第一命令可能要求地址轉(zhuǎn)換,可以被轉(zhuǎn)到轉(zhuǎn)換邏輯中進(jìn)行地址轉(zhuǎn)換。在正在轉(zhuǎn)換第一命令的同時(shí),依賴于該第一命令、不要求地址轉(zhuǎn)換的隨后的第二命令可能在第一命令的轉(zhuǎn)換完成之前傳遞給TIOC。由于所述依賴性,TIOC可以將該第二命令保持在命令隊(duì)列中,直到第一命令被處理完。之后,第一命令可以在第二命令之前被分派給CPU。類似地,在正在轉(zhuǎn)換第一命令的同時(shí),依賴于該第一命令的隨后的第三命令可能命中轉(zhuǎn)換高速緩存,被傳遞到TIOC。與第二命令一樣,第三命令也可以被保持在命令隊(duì)列中,直到第一命令被處理完并被分派。
TIOC還可以監(jiān)視在轉(zhuǎn)換邏輯中發(fā)生的未命中(缺失)的次數(shù),以識(shí)別“缺失之后的缺失”(miss under miss)。如上所述,轉(zhuǎn)換邏輯中每一次發(fā)生未命中時(shí),可以發(fā)通知給TIOC,識(shí)別產(chǎn)生缺失的命令。由于某些實(shí)施方式一次只允許處理一個(gè)轉(zhuǎn)換高速緩存缺失,如果在正在處理第一個(gè)缺失時(shí)發(fā)生第二個(gè)缺失,則TIOC可以停止流水線,直到第一個(gè)缺失被處理完。圖2圖解了從TIOC發(fā)給TIIC、識(shí)別導(dǎo)致第二個(gè)缺失的命令的停止流水線信號(hào)。
圖5是由TIOC執(zhí)行的處理地址轉(zhuǎn)換時(shí)的缺失(未命中)的示例操作的流程圖。操作始于步驟501,從轉(zhuǎn)換邏輯接收缺失通知。在步驟502,TIOC判斷是否有別的未解決的缺失正在由轉(zhuǎn)換邏輯處理。如果沒(méi)有未解決的缺失正在由轉(zhuǎn)換邏輯處理,在步驟511,TIOC記錄該命令的輸入命令FIFO地址。在步驟512,TIOC可以允許處理在導(dǎo)致缺失的命令之后的命令,以提高性能。另一方面,如果在步驟502判定有未解決的缺失正在處理,則可以停止流水線。這可以在步驟503通過(guò)向TIIC與導(dǎo)致第二個(gè)缺失的命令的輸入命令FIFO地址一起發(fā)送一個(gè)停止指示來(lái)進(jìn)行。在步驟504,TIOC可以忽略在導(dǎo)致第二個(gè)缺失的命令之后的所有命令。TIOC可以通過(guò)它們的輸入命令FIFO地址來(lái)確定這些命令。
作為對(duì)從TIOC接收到停止通知的響應(yīng),TIIC可以停止流水線,不發(fā)出命令,直到有來(lái)自TIOC的進(jìn)一步通知。流水線的停頓可以一直到第一個(gè)缺失被處理完,TIOC接收到轉(zhuǎn)換結(jié)果。TIIC也可以將讀指針重置為指向輸入命令FIFO中導(dǎo)致第二個(gè)缺失的命令。因此,在完成第一個(gè)缺失的處理之后,可以重新發(fā)出導(dǎo)致第二個(gè)缺失的命令和隨后的命令。
在重新發(fā)出導(dǎo)致第二個(gè)缺失的命令和隨后的命令之前,可以將流水線排干。圖6是在完成了對(duì)未解決的轉(zhuǎn)換高速緩存缺失的處理之后重新發(fā)出導(dǎo)致第二個(gè)缺失的命令的示例操作的流程圖。這些操作始于步驟601,即完成第一個(gè)缺失的處理。在步驟602,可以由轉(zhuǎn)換邏輯向TIOC發(fā)出通知,指出已經(jīng)完成第一個(gè)缺失的處理。在步驟603,可以將流水線停止一段預(yù)定的時(shí)間以允許流水線排干。
之后,在步驟604,可以重新開(kāi)始處理導(dǎo)致第二個(gè)缺失的命令以及隨后的命令。重新開(kāi)始處理導(dǎo)致第二個(gè)缺失的命令以及隨后的命令的一種簡(jiǎn)單的方式可以是重發(fā)所述命令。例如,TIIC可以從輸入命令FIFO接收導(dǎo)致缺失的第二命令和隨后的命令,并如上所述處理所述命令。這樣就維持了命令的順序。
結(jié)論通過(guò)在給定命令的地址轉(zhuǎn)換期間允許處理隨后的命令,總體性能可以大大提高。另外,通過(guò)監(jiān)視地址轉(zhuǎn)換高速緩存的缺失并在發(fā)生“缺失后的缺失”的情況下停止流水線,本發(fā)明的各實(shí)施方式可以有助于在處理多個(gè)轉(zhuǎn)換高速緩存缺失時(shí)保持命令的順序。
盡管前面針對(duì)本發(fā)明的各實(shí)施方式進(jìn)行了描述,也可以想出本發(fā)明的其他的和進(jìn)一步的實(shí)施方式而不偏離本發(fā)明的基本范圍,這種范圍是由所附的權(quán)利要求確定的。
權(quán)利要求
1.一種用于處理命令隊(duì)列中的多個(gè)轉(zhuǎn)換高速緩存缺失的方法,所述命令隊(duì)列中存儲(chǔ)了從一個(gè)或者多個(gè)輸入輸出設(shè)備接收到的命令序列,該方法包括將命令隊(duì)列中的第一命令的目標(biāo)地址發(fā)送給地址轉(zhuǎn)換邏輯以被轉(zhuǎn)換;如果判定在包含命令隊(duì)列中的第一命令的目標(biāo)地址的虛擬到實(shí)際轉(zhuǎn)換的轉(zhuǎn)換邏輯的地址轉(zhuǎn)換表中不存在地址轉(zhuǎn)換條目,則啟動(dòng)從存儲(chǔ)器中取地址轉(zhuǎn)換條目;在取所述第一命令的條目的同時(shí),處理在該第一命令之后接收到的一個(gè)或者多個(gè)命令,其中,該處理包括將命令隊(duì)列中第二命令的目標(biāo)地址發(fā)送到地址轉(zhuǎn)換邏輯以被轉(zhuǎn)換;以及如果判定在包含該第二命令的目標(biāo)地址的虛擬到實(shí)際轉(zhuǎn)換的轉(zhuǎn)換邏輯的地址轉(zhuǎn)換表中不存在地址轉(zhuǎn)換條目,則停止隨后的命令的處理,直到取到所述第一命令的目標(biāo)地址的地址轉(zhuǎn)換條目,其中,停止所述命令的處理包括停止處理命令,并設(shè)置指向命令隊(duì)列中的第二命令的指針。
2.如權(quán)利要求1所述的方法,其中所述命令包括下述命令之一要求地址轉(zhuǎn)換的命令;和沒(méi)有地址的命令。
3.如權(quán)利要求1所述的方法,其中,所述地址轉(zhuǎn)換表包括段表和頁(yè)表。
4.如權(quán)利要求1所述的方法,其中,所述命令隊(duì)列是先進(jìn)先出隊(duì)列。
5.如權(quán)利要求1所述的方法,還包括在接收到所述第一命令的地址轉(zhuǎn)換之后,處理所述第二命令以及第二命令之后的命令。
6.如權(quán)利要求1所述的方法,還包括在第二命令隊(duì)列中存儲(chǔ)處理后的命令;以及對(duì)于每一個(gè)輸入輸出設(shè)備,按照從所述輸入輸出設(shè)備接收所述命令的順序,向CPU發(fā)出處理后的從每一個(gè)輸入輸出設(shè)備接收到的命令。
7.如權(quán)利要求6所述的方法,還包括亂序發(fā)出處理后的從不同的輸入輸出設(shè)備接收到的命令。
8.一種系統(tǒng),包括一個(gè)或者多個(gè)輸入輸出設(shè)備;以及處理器,該處理器包括(i)命令隊(duì)列,被配置為存儲(chǔ)從所述一個(gè)或者多個(gè)輸入輸出設(shè)備接收到的命令序列,(ii)輸入控制器,被配置為以流水線方式處理來(lái)自所述命令隊(duì)列的命令,(iii)地址轉(zhuǎn)換邏輯,被配置為使用具有包含虛擬到實(shí)際地址轉(zhuǎn)換的條目的地址轉(zhuǎn)換表,轉(zhuǎn)換所述輸入控制器處理的命令的目標(biāo)地址,以及(iv)控制邏輯,被配置為如果判定在包含在第一命令之后接收到的第二命令的目標(biāo)地址的虛擬到實(shí)際轉(zhuǎn)換的轉(zhuǎn)換邏輯的地址轉(zhuǎn)換表中不存在地址轉(zhuǎn)換條目,則停止輸入控制器對(duì)在正在取地址轉(zhuǎn)換條目的第一命令之后收到的命令的處理,直到取到第一命令的目標(biāo)地址的地址轉(zhuǎn)換條目,并設(shè)置指向所述第二命令在命令隊(duì)列中的地址的指針。
9.如權(quán)利要求8所述的系統(tǒng),其中,所述地址轉(zhuǎn)換邏輯還被配置為將轉(zhuǎn)換后的地址提供給控制邏輯;以及如果在地址轉(zhuǎn)換表中沒(méi)有找到某個(gè)地址的轉(zhuǎn)換,則通知控制邏輯。
10.如權(quán)利要求8所述的系統(tǒng),其中,為了停止命令的處理,控制邏輯被配置為向輸入控制器發(fā)送停止信號(hào)和第二命令在命令隊(duì)列中的地址。
11.如權(quán)利要求8所述的系統(tǒng),其中,所述輸入控制器被配置為在取到第一命令的地址轉(zhuǎn)換之后發(fā)出所述第二命令和隨后的命令。
12.一種微處理器,包括(i)命令隊(duì)列,被配置為存儲(chǔ)來(lái)自輸入輸出設(shè)備的命令序列;(ii)輸入控制器,被配置為以流水線方式處理所述命令隊(duì)列中的命令;(iii)地址轉(zhuǎn)換邏輯,被配置為使用高速緩存的地址轉(zhuǎn)換條目將虛擬地址轉(zhuǎn)換為物理地址,如果在高速緩存中未找到某個(gè)命令的地址轉(zhuǎn)換條目,則從存儲(chǔ)器中取對(duì)應(yīng)的地址轉(zhuǎn)換條目,以及(iv)輸出控制器,被配置為,如果檢測(cè)到在第一命令之后接收到的第二命令的目標(biāo)地址的轉(zhuǎn)換條目在地址轉(zhuǎn)換表中不存在,則停止對(duì)在第一命令之后收到的命令的處理,直到取到第一命令的目標(biāo)地址的地址轉(zhuǎn)換條目,并設(shè)置指向所述第二命令在命令隊(duì)列中的地址的指針。
13.如權(quán)利要求12所述的微處理器,其中,所述命令隊(duì)列是先進(jìn)先出隊(duì)列。
14.如權(quán)利要求12所述的微處理器,其中,所述地址轉(zhuǎn)換表是段表和頁(yè)表之一。
15.如權(quán)利要求12所述的微處理器,其中,響應(yīng)于命令要求地址轉(zhuǎn)換的判定,所述輸入控制器被配置為將所述命令發(fā)送給地址轉(zhuǎn)換邏輯;以及將所述命令在所述命令隊(duì)列中的地址發(fā)送給所述輸出控制器。
16.如權(quán)利要求12所述的微處理器,其中,所述地址轉(zhuǎn)換邏輯被進(jìn)一步配置為將轉(zhuǎn)換后的地址提供給輸出控制器;以及如果在轉(zhuǎn)換表中沒(méi)有找到某個(gè)地址的轉(zhuǎn)換,則通知輸出控制器。
17.如權(quán)利要求12所述的微處理器,其中,為了停止命令的處理,所述輸出控制器被配置為向所述輸入控制器發(fā)送停止信號(hào)和第二命令在命令隊(duì)列中的地址。
18.如權(quán)利要求12所述的微處理器,其中,所述輸入控制器被配置為在取到所述第一命令的地址轉(zhuǎn)換之后,發(fā)出所述第二命令和隨后的命令。
19.如權(quán)利要求12所述的微處理器,其中,所述輸出控制器被進(jìn)一步配置為;在第二命令隊(duì)列中存儲(chǔ)處理后的命令;以及對(duì)于每一個(gè)輸入輸出設(shè)備,按照從該輸入輸出設(shè)備接收到命令的順序,向CPU發(fā)送處理后的從該輸入輸出設(shè)備接收到的命令。
20.如權(quán)利要求19所述的微處理器,其中,所述輸出控制器被進(jìn)一步配置為亂序發(fā)出處理后的來(lái)自不同輸入輸出設(shè)備的命令。
全文摘要
本發(fā)明涉及多個(gè)轉(zhuǎn)換高速緩存缺失的處理方法和系統(tǒng)。本發(fā)明的實(shí)施方式提供了在處理多個(gè)轉(zhuǎn)換高速緩存缺失的同時(shí)處理命令隊(duì)列中的命令時(shí)保持命令順序的方法和系統(tǒng)。命令可以在CPU中的輸入命令隊(duì)列中排隊(duì)。在命令的地址轉(zhuǎn)換期間,可以處理隨后的命令以提高效率。處理后的命令可以放在輸出隊(duì)列中并按順序發(fā)給CPU。在地址轉(zhuǎn)換期間,如果正在處理未解決的缺失的時(shí)候發(fā)生轉(zhuǎn)換高速緩存缺失,則可以停止流水線,在處理完第一個(gè)缺失之后重新處理導(dǎo)致第二個(gè)缺失的命令以及所有隨后的命令。
文檔編號(hào)G06F9/38GK101013402SQ200710001449
公開(kāi)日2007年8月8日 申請(qǐng)日期2007年1月8日 優(yōu)先權(quán)日2006年2月1日
發(fā)明者伊布拉西姆·A.·奧達(dá), 約翰·D.·艾利史, 查德·B.·麥克布里德 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司