国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      復(fù)雜指令系統(tǒng)中tlbr內(nèi)部例外的處理方法和處理器的制作方法

      文檔序號:6559195閱讀:398來源:國知局
      專利名稱:復(fù)雜指令系統(tǒng)中tlbr內(nèi)部例外的處理方法和處理器的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及微處理器設(shè)計,更具體地,涉及一種復(fù)雜指令系統(tǒng)中 TLBR內(nèi)部例外的處理方法和處理器,能夠?qū)?fù)雜指令系統(tǒng)中的頁表進 行快速高效地替換。
      背景技術(shù)
      實現(xiàn)復(fù)雜指令集(典型地,如X86指令集)的一種通常做法是將一 條復(fù)雜指令譯碼成一條或多條微碼,然后通過微碼發(fā)射部件亂序發(fā)射 到各個功能部件執(zhí)行。微碼被發(fā)射到功能部件的同時也被送到一個被 稱為ROQ的隊列中,通過該隊列維護微碼的順序提交,保證精確例外和 程序的正確語義。圖1給出了按照這種方式工作的CPU結(jié)構(gòu)框圖,本發(fā) 明的后續(xù)說明均基于圖l給出的處理器基本結(jié)構(gòu)。
      對圖l中各部分簡要描述如下
      取指和部分譯碼(101):從內(nèi)存中取復(fù)雜指令流(如x86指令),對
      指令流進行恰當?shù)拈L度劃分和基本譯碼后送到微碼生成部件產(chǎn)生正確
      的微碼。為了提高處理性能,通常在這里還放置指令CACHE和指令TLB 部件,由于這些部件和本發(fā)明關(guān)系不大,在圖中沒有示出。
      微碼生成部件(102):從取指和部分譯碼部件獲得復(fù)雜指令(如 x86指令)的長度及部分譯碼信息,并據(jù)此產(chǎn)生正確的微碼送到后續(xù)部 件發(fā)射執(zhí)行。
      微碼亂序發(fā)射部件(103):主要完成微碼的發(fā)射。具體涉及的細 節(jié)包括從寄存器堆讀取操作數(shù),對寄存器進行重命名,檢測后續(xù)功能 部件和ROQ隊列是否可以容納待發(fā)射的微碼等等。同樣地,出于性能考
      慮,在一些具體的實施例中通常將寄存器重命名、讀取寄存器堆和微 碼發(fā)射分別放在獨立的模塊中完成(圖中沒有具體示出)。
      ROQ隊列(重排序緩沖隊列)(104):維護微碼的正確順序,保證
      程序的正確語義和精確例外。ROQ是整個處理器的控制中心,當一條復(fù)
      雜指令的所有微碼都執(zhí)行完以后,即將該復(fù)雜指令提交。
      執(zhí)行單元(105):典型的執(zhí)行單元如訪存單元、定點單元和浮點 單元等。執(zhí)行單元用來完成微碼要求的運算,然后將運算結(jié)果通過結(jié)
      果總線寫回到ROQ中。
      訪存微碼在開始真正的訪存之前,首先需要將程序員給出的線性 地址轉(zhuǎn)換成相應(yīng)的物理地址。在處理器設(shè)計中為了加速這一轉(zhuǎn)換過程, 在硬件上提供一個快速查找表TLB,其中每個線性地址和一個物理地址 對應(yīng)。處理器中TLB的典型結(jié)構(gòu)如圖2所示,每個TLB表項包括Valid(有 效位)、線性地址、物理地址和頁表屬性等域
      (1) Valid:如果該域為l,表示該TLB表項是有效的;反之該TLB 表項是無效的;
      (2) 線性地址程序員編程時使用的地址空間的地址。在訪存時 用線性地址域索弓ITLB找到匹配的表項,然后從匹配的表項中取出物理 地址域,形成實際內(nèi)存訪問使用的物理地址;
      (3) 物理地址物理內(nèi)存頁的基地址,訪問TLB時先用線性地址 索引出物理內(nèi)存頁的基地址,然后和頁內(nèi)偏移相加形成最后訪存的物 理地址。
      在進行虛實地址變換的時候,由于TLB中保存的頁表數(shù)目有限, 當在TLB中査詢頁表不命中的時候,需要進行TLB頁表替換?,F(xiàn)有的實 現(xiàn)復(fù)雜指令集,典型的如x86指令集的處理器中,實現(xiàn)TLB頁表替換的 的方法如下當一條復(fù)雜指令的某條需要訪存的微碼在訪存功能部件 中發(fā)現(xiàn)TLB MISS時,這一事件被功能部件作為一個特殊的內(nèi)部例外記 錄下來,然后隨著這條訪存微碼通過結(jié)果總線被送到ROQ中。ROQ發(fā)現(xiàn) 這一條復(fù)雜指令發(fā)生了TLB MISS,于是往例外總線上送出刷流水線的 控制信號,這樣流水線被刷空。微碼生成部件開始發(fā)送針對TLB MISS 的TLB Refill例外處理的微碼,待TLB MISS這一例外事件處理完成時 再重新對引起該內(nèi)部例外的復(fù)雜指令取指、譯碼、發(fā)射和執(zhí)行。
      上述處理方法在某些情況下會引起較高的性能損失。假定一條復(fù) 雜指令被翻譯成圖3所示的微碼序列,圖中的省略號表示略去了一些和
      本發(fā)明無關(guān)的微碼。如果在執(zhí)行前n-l個load操作的時候都TLB命中, 而在執(zhí)行Load regn, addrn的時候引起TLB Ref ill內(nèi)部例外(例如 addrn的對應(yīng)的物理地址和addrl-addrn對應(yīng)的物理地址不在同一內(nèi)存 頁面,而且是第一次訪問addrn對應(yīng)的物理頁面,此時必定會引起TLB Miss),那么原來的處理方法將前面順利做完的n-l條load微碼取消, 待處理完load regn, addrn引起的TLB Ref ill內(nèi)部例外以后重新取指 并執(zhí)行該復(fù)雜指令。事實上既然前n-l個load己經(jīng)能夠順利做完,只需 要在TLB Refill以后重新執(zhí)行第n個load微碼就可以了。更壞的情況 是,如果在執(zhí)行一條復(fù)雜指令時發(fā)生多次TLB Miss,那么則會將該指 令取消并重新嘗試執(zhí)行多次。
      本發(fā)明提供的方法和處理器能基本解決上面的問題。

      發(fā)明內(nèi)容
      本發(fā)明的目的是提出一種復(fù)雜指令系統(tǒng)中TLBR內(nèi)部例外的處理 方法和處理器,能夠?qū)?fù)雜指令系統(tǒng)中的頁表進行快速高效地替換。
      為了實現(xiàn)上述目的,根據(jù)本發(fā)明,提出了一種復(fù)雜指令系統(tǒng)中 TLBR內(nèi)部例外的處理方法,包括從內(nèi)存中獲取復(fù)雜指令流,對指令 流進行長度劃分和基本譯碼;緩存指令流中的復(fù)雜指令及所述復(fù)雜指 令的長度及部分譯碼信息;根據(jù)緩存的復(fù)雜指令及所述復(fù)雜指令的長 度及部分譯碼信息,產(chǎn)生與復(fù)雜指令相對應(yīng)的微碼;以及在檢測到一 微碼在執(zhí)行時發(fā)生TLBR內(nèi)部例外時,保持例外以前己經(jīng)完成的部分微 碼的執(zhí)行結(jié)果,并取消例外微碼之后的所有微碼,并進行TLB替換,在 TLB替換成功之后,重新生成發(fā)生例外的微碼及其后面的微碼并從發(fā)生 例外的微碼處開始執(zhí)行。
      優(yōu)選地,所述進行TLB替換的步驟包括生成并執(zhí)行用于TLB替換 的微碼序列;如果用于TLB替換的微碼序列中的微碼發(fā)生TLBR內(nèi)部例外 而形成嵌套時,先處理內(nèi)層的TLBR內(nèi)部例外。
      優(yōu)選地,如果TLB替換不成功,則觸發(fā)外部例外以便由系統(tǒng)程序 員處理。
      優(yōu)選地,所述TLBR內(nèi)部例外包括TLB MISS。
      根據(jù)本發(fā)明,還提出了一種復(fù)雜指令系統(tǒng)中TLBR內(nèi)部例外的處理 器,包括取指和部分譯碼模塊,用于從內(nèi)存中獲取復(fù)雜指令流,對 指令流進行長度劃分和基本譯碼并傳送到指令隊列;指令隊列,用于 緩存取指和部分譯碼模塊傳送來的己經(jīng)取指和部分譯碼的復(fù)雜指令及 所述復(fù)雜指令的長度及部分譯碼信息;微碼生成部件,根據(jù)從指令隊 列獲取的復(fù)雜指令及所述復(fù)雜指令的長度及部分譯碼信息,產(chǎn)生與復(fù) 雜指令相對應(yīng)的微碼并發(fā)送到微碼執(zhí)行單元;微碼執(zhí)行單元,在R0Q 隊列的控制下,執(zhí)行微碼生成部件發(fā)送來的微碼,以及R0Q隊列,在檢 測到一微碼在微碼執(zhí)行單元中執(zhí)行時發(fā)生TLBR內(nèi)部例外時,保持例外 以前已經(jīng)完成的部分微碼的執(zhí)行結(jié)果,并取消例外微碼之后的所有微 碼,并控制微碼生成部件進行TLB替換,并在TLB替換成功之后,由微 碼生成部件重新生成發(fā)生例外的微碼及其后面的微碼并發(fā)送到微碼執(zhí) 行單元執(zhí)行。
      優(yōu)選地,所述指令隊列為先入先出隊列,并由三個指針head—dec、 head—cmt和tai1—dec來維護,其中,指針head—dec指向正在譯碼的 復(fù)雜指令;指針head—cmt指向正在執(zhí)行中但是還沒有提交的復(fù)雜指 令;以及指針tail—dec指向隊列中的第一個空項。


      通過參考以下結(jié)合圖對所采用的優(yōu)選實施例的詳細描述,本發(fā)明
      的上述目的、優(yōu)點和特征將變得顯而易見,其中
      圖l是示出了能夠應(yīng)用本發(fā)明的微處理器基本框圖2是示出了TLB的典型結(jié)構(gòu)示例的示意圖3是示出了作為示例的某條復(fù)雜指令翻譯后的微碼序列的示意
      圖4是用于說明內(nèi)部例外和外部例外執(zhí)行路徑的區(qū)別的示意圖; 圖5是示出了根據(jù)本發(fā)明實施例的復(fù)雜指令系統(tǒng)中頁表替換的微 處理器的方框圖6是示出了在圖5的系統(tǒng)中指令隊列的狀態(tài)圖示的示意圖7是示出了根據(jù)本發(fā)明實施例的用內(nèi)部例外機制處理TLB頁面 替換的流程圖8是示出了可能引起TLBR內(nèi)部例外的復(fù)雜指令的執(zhí)行的流程 圖;以及
      圖9是示出了訪存部件的基本結(jié)構(gòu)的示意圖。
      具體實施例方式
      下面將參考附圖來描述本發(fā)明的優(yōu)選實施例。
      一條復(fù)雜指令在執(zhí)行的過程中可能引起多種例外,本發(fā)明中所有 這些例外被定義為2類(l)外部例外,即在執(zhí)行一條復(fù)雜指令的過程 中發(fā)生的例外導(dǎo)致程序執(zhí)行路徑的改變。例如如果一條復(fù)雜指令在訪 存時,對應(yīng)的內(nèi)存頁表項為空,那么將觸發(fā)page fault外部例外。在 這種情況下,操作系統(tǒng)執(zhí)行一個page fault外部例外處理程序,將要 訪問的內(nèi)存頁表項設(shè)置好,然后重新執(zhí)行引起例外的復(fù)雜指令;(2) 內(nèi)部例外,即在執(zhí)行一條復(fù)雜指令的過程中發(fā)生的例外事件不會引起 程序執(zhí)行路徑的改變。比如一條復(fù)雜指令在訪存時發(fā)生了TLB MISS, 但是對應(yīng)的內(nèi)存頁表項是有效的,這個時候可能引起一個TLBR內(nèi)部例 外。在內(nèi)部例外發(fā)生時,ROQ通過例外總線信號告訴微碼生成部件發(fā)送 內(nèi)部例外處理微碼,將內(nèi)存頁表中的有效頁表項調(diào)入TLB翻譯后援緩沖 器中,這樣在重新執(zhí)行引起TLB Refill例外的復(fù)雜訪存指令時就能正 常訪存。這里,通常的內(nèi)部例外包括內(nèi)存頁臟、內(nèi)存依賴預(yù)測錯誤以 及TLB重填等。
      內(nèi)部例外和外部例外的圖示如圖4所示,從圖中可以更加清楚地 看到它們的區(qū)別。外部例外引起了復(fù)雜指令(如x86指令)執(zhí)行路徑的改 變,而內(nèi)部例外則不會改變復(fù)雜代碼(如x86代碼)的執(zhí)行路徑。
      基于內(nèi)部例外機制的頁表替換,其基本工作機制如圖5所示???以看出,圖5和圖1的主要區(qū)別在于取指和部分譯碼部件與微碼產(chǎn)生部 件之間插入了一個先入先出指令隊列,增加這個隊列是為了能緩存前 端已經(jīng)取指和部分譯碼完成的復(fù)雜指令。隊列中每條復(fù)雜指令的生命 周期從該復(fù)雜指令從取指和部分譯碼部件送入指令隊列開始,到這條
      復(fù)雜指令的所有微碼在功能部件中執(zhí)行完畢并已經(jīng)在ROQ中提交為止。 這樣,如果某條復(fù)雜指令在功能部件中發(fā)生了TLB MISS,在TLB MISS
      內(nèi)部例外以前己經(jīng)完成的部分微碼的執(zhí)行結(jié)果可以保留,只在完成了 TLB替換后,繼續(xù)做未完成的工作。這樣就不需要因為發(fā)生TLB MISS 內(nèi)部例外而重新取該復(fù)雜指令,但依然可以知道該指令所需提供的譯 碼信息。
      該指令隊列可以按照典型的先入先出循環(huán)隊列組織,其基本工作 方式如下微碼產(chǎn)生部件中的隊列控制邏輯維護2個隊列頭指針 (head—dec, head—cmt)和一個隊列尾指針tai1—dec。其中head—dec指 向第一條等待譯碼的復(fù)雜指令,head一cmt指向正在功能部件中運算但 是還沒有提交的第一條復(fù)雜指令,該復(fù)雜指令已經(jīng)被譯碼完畢,但是 可能會因為內(nèi)部例外而重新譯碼。微碼產(chǎn)生部件每譯碼一條復(fù)雜指令 就將heacLdec指針移向下一條復(fù)雜指令;ROQ每提交一條復(fù)雜指令就將 head—cmt指針移向隊列中的下一條復(fù)雜指令。如果head—cmt指向的復(fù) 雜指令在執(zhí)行過程中發(fā)生內(nèi)部例外(如TLBMISS),貝UROQ通過例外總線 通知微碼產(chǎn)生部件重新對head—cmt指向的復(fù)雜指令譯碼,同時修改 heacLdec指針為head—cmt指針。如果隊列中還有空項,tail—dec指針 指向隊列尾的第一個空項。取指和部分譯碼部件每處理完一條復(fù)雜指 令,就將該部分譯碼的復(fù)雜指令放入指令隊列尾,當隊列滿時則停止 往指令隊列中送復(fù)雜指令。運行過程中隊列的典型狀態(tài)如圖6所示。
      用內(nèi)部例外機制進行頁面替換的基本流程如圖7所示。當用一個 線性地址在TLB中索引時找不到與之對應(yīng)的物理地址時,即表明發(fā)生了 TLB MISS (翻譯后援緩沖器不命中)(702)。此時,訪存部件將該微碼 置上TLBR(翻譯后援緩沖器重填)內(nèi)部例外(即需要替換TLB表項),并 通過結(jié)果總線將這一例外信息送入到ROQ中(703) 。ROQ檢測到該微碼引 起了TLBMISS,需要重新發(fā)射微碼將內(nèi)存中的頁表項填回TLB后才能重 新執(zhí)行,于是將隊列中發(fā)生例外的微碼后面的所有微碼取消(704)。之 所以要取消,是因為后續(xù)的微碼可能依賴于前面發(fā)生TLB MISS的微碼 的訪存結(jié)果。隨后,ROQ部件通過例外總線通知微碼生成部件發(fā)送進行 TLB表項替換操作的微碼序列(705),該微碼序列隨后被發(fā)射部件送到
      各個功能部件執(zhí)行(706h需要注意的是,由于進行TLB表項替換的微 碼序列也需要訪存,因此可能再度引發(fā)TLBMISS(707),因此會在TLBR 內(nèi)部例外中嵌套新的TLBR內(nèi)部例外。當發(fā)生TLBR內(nèi)部例外嵌套時,先 處理最內(nèi)層的TLBR內(nèi)部例外,然后再處理往外一級的TLBR內(nèi)部例外, 最后直到最外層的TLBR內(nèi)部例外得到處理。這樣當處理TLBR內(nèi)部例外 的過程中發(fā)生TLBR內(nèi)部例外時,需要回到步驟705,先處理最近發(fā)生的 TLBR內(nèi)部例外,當最里層的TLBR內(nèi)部例外處理完以后,繼續(xù)處理外層 的TLBR內(nèi)部例外。進行TL:B表項替換的微碼序列的主要功能,是查詢和 MISS的線性地址對應(yīng)的內(nèi)存頁表中的頁表項(709)。如果該頁表項有 效,就將其填入處理器的TLB中;反之,如果該頁表項在內(nèi)存頁表中不 存在或無效,則觸發(fā)Page Fault外部例外(710),由系統(tǒng)程序員處理。 如果發(fā)生Page Fault外部例外,則需要改變程序的執(zhí)行路徑,即跳轉(zhuǎn) 到Page Fault外部例外的處理程序去執(zhí)行,這種情況下ROQ通知前端刷
      空指令隊列中的所有指令,轉(zhuǎn)到外部例外的處理程序入口取指執(zhí)行 (711)。如果在內(nèi)存頁表中找到了和MISS的線性地址對應(yīng)的頁表項,那 么就將該頁表項裝入到處理器的TLB中,完成此次TLB表項替換。在TLB 頁面替換完成后,前端指令隊列中的hea(Lcmt指針仍然指向因TLBR內(nèi) 部例外而停頓的復(fù)雜指令,此時調(diào)整head一dec指針使之指向head—cmt 所指向的復(fù)雜指令,重新譯碼、執(zhí)行該隊列中后續(xù)的所有指令。微碼 生成部件每成功譯碼一條復(fù)雜指令就修改head一dec指針使之指向未譯 碼的下一條復(fù)雜指令;而head—cmt指針只有當其指向的復(fù)雜指令在ROQ
      中被提交時(即該復(fù)雜指令的所有微碼都已經(jīng)成功完成)才能指向下一 條未提交的復(fù)雜指令,heacLcmt先前指向的復(fù)雜指令所在隊列項被釋 放,以用來存放新入隊的復(fù)雜指令。當指令隊列因為外部例外(如Page Fault外部例外)被刷空時,head—dec指針和head—cmt指針復(fù)位。
      圖8給出了可能發(fā)生例外的復(fù)雜指令在使用了本發(fā)明的處理器中 的執(zhí)行流程。首先譯碼并第一次嘗試執(zhí)行該復(fù)雜指令(801),如果該復(fù) 雜指令的微碼在執(zhí)行過程中沒有任何例外(803),則所有微碼正確完成 并通過結(jié)果總線提交到ROQ中,ROQ隨后刪除已經(jīng)順利完成的復(fù)雜指令 的所有微碼,并通知前端指令隊列控制邏輯修改head—cmt指針使之指 向下一條未提交的復(fù)雜指令。但是如果該復(fù)雜指令的微碼在功能部件
      中發(fā)生例外,那么需要分TLBR內(nèi)部例外和其它例外兩種情況處理。如 果是其它例外(806),則很可能引起程序執(zhí)行路徑的改變,因此在處理 完例外以后需要清除指令隊列中的所有隊列項,復(fù)位heacLcmt 、 heactdec和tai1—dec指針,重新取指并執(zhí)行下一條復(fù)雜指令(809);如 果發(fā)生了TLBR內(nèi)部例外(807),那么在完成TLB表項的替換后需要修正 head—dec指針使之指向發(fā)生內(nèi)部例外的復(fù)雜指令(即head一cmt指針指 向的復(fù)雜指令),微碼生成邏輯隨后嘗試重新譯碼并執(zhí)行該復(fù)雜指令 (808),需要注意,在重新執(zhí)行的過程中仍然可能發(fā)生例外。
      前面已經(jīng)提到前端引進的指令隊列的基本操作以及基于內(nèi)部例 外機制的TLB頁面替換流程。下面說明本發(fā)明如何使得引起TLBR內(nèi)部例 外的復(fù)雜指令在觸發(fā)TLBR之前完成的工作可以保留,只在TLBR內(nèi)部例 外處理之后繼續(xù)做該指令未完成的工作。首先需要提及,前端的微碼 生成部件對于操作復(fù)雜程度不同的復(fù)雜指令其生成微碼的方法不同 對于簡單的復(fù)雜指令只需要通過組合邏輯就能直接生成微碼輸出;而 對于操作復(fù)雜的復(fù)雜指令,微碼產(chǎn)生部件需要查詢一個uRom來獲得翻 譯后的微碼輸出。根據(jù)這一差別,下面分成操作簡單的復(fù)雜指令和操 作復(fù)雜的復(fù)雜指令兩種情況進行討論
      (1) 對于操作簡單的復(fù)雜指令(例如x86中M0V訪存指令),微碼生 成部件直接生成對應(yīng)于該復(fù)雜指令的微碼。如果head一cmt指向的是一 條簡單復(fù)雜指令而且該指令在執(zhí)行過程中發(fā)生了內(nèi)部例外(如TLB Miss),那么微碼生成部件重新譯碼head—cmt指針指向的復(fù)雜指令,然 后送到后續(xù)的功能部件重新執(zhí)行。這樣一來,在再次執(zhí)行的時候就不 需要重新取指和進行部分譯碼,從而避免了因為重新取指而引起的較 大訪存延遲。雖然在發(fā)生TLBR內(nèi)部例外以后仍然需要微碼生成部件重 新產(chǎn)生該復(fù)雜指令的微碼,但是由于這種復(fù)雜指令操作簡單,譯碼(直 接通過組合邏輯完成)能以很高的效率完成,和取指時的訪存延遲相 比,重新譯碼的開銷可以忽略不計。
      (2) 對于操作復(fù)雜的復(fù)雜指令,微碼生成部件從uRom中查找該復(fù) 雜指令的微碼,將其取出后送到后續(xù)的發(fā)射模塊。如果head一cmt指向
      的是一條操作復(fù)雜的復(fù)雜指令而且該指令在執(zhí)行過程中發(fā)生了內(nèi)部例
      外(如TLBMiss),則首先保存ROQ中該復(fù)雜指令引起例外的微碼前面所 有已經(jīng)正確做完的微碼狀態(tài),然后通過例外總線將發(fā)生例外的微碼的 uRomPC送到微碼產(chǎn)生部件。微碼產(chǎn)生部件在送完內(nèi)部例外處理微碼后, 不需要重新譯碼head一cmt指向的復(fù)雜復(fù)雜指令,而是用uRomPC從uRom 中索引,從引起內(nèi)部例外的微碼處送后續(xù)的微碼。
      本發(fā)明可以用在使用了TLB的實現(xiàn)復(fù)雜指令集的處理器中。具體 實施可以參考圖5實現(xiàn),但是需要進一步作如下方面的考慮
      (1) 需要在前端取指和譯碼部件與微碼生成部件之間設(shè)置一個指 令隊列,用來存放尚未成功提交的復(fù)雜指令,對該隊列的操作方式在 發(fā)明內(nèi)容部分已經(jīng)進行過詳細說明;
      (2) 需要對訪存部件的結(jié)構(gòu)進行恰當設(shè)計以便充分利用本專利中 提出的內(nèi)部例外機制。本發(fā)明中一種推薦的訪存部件基本結(jié)構(gòu)如圖9 所示,此結(jié)構(gòu)可以作為基本功能部件集成到圖l所示的處理器結(jié)構(gòu)中。 當訪存微碼,典型的如加載/存儲從發(fā)射部件送到訪存部件時,首先需 要經(jīng)過一級流水計算線性地址(901);然后用計算的線性地址索引數(shù)據(jù) cache (902),與此同時査DTLB,實現(xiàn)虛實地址變換(903); cache tag 比較用來選擇正確cache:-ine中的數(shù)據(jù)(904),同時可以進行一些必要 的訪存權(quán)限檢査;最后,訪存微碼進入到訪存隊列開始訪存調(diào)度(905)。 如果在訪問DTLB時發(fā)現(xiàn)TLB MISS,此時記錄一個TLBR內(nèi)部例外,待微 碼進入到訪存隊列后,通過結(jié)果總線送到ROQ中,由ROQ通知微碼生成 部件發(fā)送TLBR內(nèi)部例外的處理微碼。
      盡管以上己經(jīng)結(jié)合本發(fā)明的優(yōu)選實施例示出了本發(fā)明,但是本領(lǐng) 域的技術(shù)人員將會理解,在不脫離本發(fā)明的精神和范圍的情況下,可 以對本發(fā)明進行各種修改、替換和改變。因此,本發(fā)明不應(yīng)由上述實 施例來限定,而由所附權(quán)利要求及其等價物來限定。
      權(quán)利要求
      1、一種復(fù)雜指令系統(tǒng)中TLBR內(nèi)部例外的處理方法,包括從內(nèi)存中獲取復(fù)雜指令流,對指令流進行長度劃分和基本譯碼;緩存指令流中的復(fù)雜指令及所述復(fù)雜指令的長度及部分譯碼信息;根據(jù)緩存的復(fù)雜指令及所述復(fù)雜指令的長度及部分譯碼信息,產(chǎn)生與復(fù)雜指令相對應(yīng)的微碼;以及在檢測到一微碼在執(zhí)行時發(fā)生TLBR內(nèi)部例外時,保持例外以前已經(jīng)完成的部分微碼的執(zhí)行結(jié)果,并取消例外微碼之后的所有微碼,并進行TLB替換,在TLB替換成功之后,重新生成發(fā)生例外的微碼及其后面的微碼并從發(fā)生例外的微碼處開始執(zhí)行。
      2、 根據(jù)權(quán)利要求l所述的方法,其特征在于所述進行TLB替換的步驟包括生成并執(zhí)行用于TLB替換的微碼序列;如果用于TLB替換的微碼序列中的微碼發(fā)生TLBR內(nèi)部例外而形成 嵌套時,先處理內(nèi)層的TLBR內(nèi)部例外。
      3、 根據(jù)權(quán)利要求l所述的方法,其特征在于如果TLB替換不成功, 則觸發(fā)外部例外以便由系統(tǒng)程序員處理。
      4、 根據(jù)權(quán)利要求l所述的方法,其特征在于所述TLBR內(nèi)部例外包 括TLB MISS。
      5、 一種復(fù)雜指令系統(tǒng)中TLBR內(nèi)部例外的處理器,包括 取指和部分譯碼模塊,用于從內(nèi)存中獲取復(fù)雜指令流,對指令流進行長度劃分和基本譯碼并傳送到指令隊列;指令隊列,用于緩存取指和部分譯碼模塊傳送來的已經(jīng)取指和部 分譯碼的復(fù)雜指令及所述復(fù)雜指令的長度及部分譯碼信息;微碼生成部件,根據(jù)從指令隊列獲取的復(fù)雜指令及所述復(fù)雜指令 的長度及部分譯碼信息,產(chǎn)生與復(fù)雜指令相對應(yīng)的微碼并發(fā)送到微碼 執(zhí)行單元; 微碼執(zhí)行單元,在ROQ隊列的控制下,執(zhí)行微碼生成部件發(fā)送來 的微碼,以及R0Q隊列,在檢測到一微碼在微碼執(zhí)行單元中執(zhí)行時發(fā)生TLBR內(nèi) 部例外時,保持例外以前己經(jīng)完成的部分微碼的執(zhí)行結(jié)果,并取消例 外微碼之后的所有微碼,并控制微碼生成部件進行TLB替換,并在TLB 替換成功之后,由微碼生成部件重新生成發(fā)生例外的微碼及其后面的 微碼并發(fā)送到微碼執(zhí)行單元執(zhí)行。
      6、 根據(jù)權(quán)利要求5所述的處理器,其特征在于所述ROQ隊列通過 例外總線通知微碼生成部件發(fā)送用于TLB替換的微碼序列,并將所述微 碼序列發(fā)送到微碼執(zhí)行單元執(zhí)行。
      7、 根據(jù)權(quán)利要求5所述的處理器,其特征在于所述ROQ隊列在TLB 替換不成功的情況下,觸發(fā)外部例外以便由系統(tǒng)程序員處理。
      8、 根據(jù)權(quán)利要求5所述的處理器,其特征在于所述TLBR內(nèi)部例外 包括TLB MISS。
      9、 根據(jù)權(quán)利要求5所述的處理器,其特征在于所述指令隊列為先 入先出隊列,并由三個指針head—dec、 head—cmt和tai1—dec來維護, 其中,指針heacLdec指向正在譯碼的復(fù)雜指令;指針head—cmt指向正在執(zhí)行中但是還沒有提交的復(fù)雜指令;以及指針tai 1—dec指向隊列中的第一個空項。
      全文摘要
      根據(jù)本發(fā)明,提出了一種復(fù)雜指令系統(tǒng)中TLBR內(nèi)部例外的處理方法,包括從內(nèi)存中獲取復(fù)雜指令流,對指令流進行長度劃分和基本譯碼;緩存指令流中的復(fù)雜指令及所述復(fù)雜指令的長度及部分譯碼信息;根據(jù)緩存的復(fù)雜指令及所述復(fù)雜指令的長度及部分譯碼信息,產(chǎn)生與復(fù)雜指令相對應(yīng)的微碼;以及在檢測到一微碼在執(zhí)行時發(fā)生TLBR內(nèi)部例外時,保持例外以前已經(jīng)完成的部分微碼的執(zhí)行結(jié)果,并取消例外微碼之后的所有微碼,并進行TLB替換,在TLB替換成功之后,重新生成發(fā)生例外的微碼及其后面的微碼并從發(fā)生例外的微碼處開始執(zhí)行。
      文檔編號G06F9/22GK101114216SQ20061008893
      公開日2008年1月30日 申請日期2006年7月27日 優(yōu)先權(quán)日2006年7月27日
      發(fā)明者范東睿, 楠 袁, 龍國平 申請人:中國科學(xué)院計算技術(shù)研究所
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1