課程計(jì)算機(jī)體系結(jié)構(gòu)實(shí)驗(yàn)soc中斷介紹_第1頁(yè)
課程計(jì)算機(jī)體系結(jié)構(gòu)實(shí)驗(yàn)soc中斷介紹_第2頁(yè)
課程計(jì)算機(jī)體系結(jié)構(gòu)實(shí)驗(yàn)soc中斷介紹_第3頁(yè)
課程計(jì)算機(jī)體系結(jié)構(gòu)實(shí)驗(yàn)soc中斷介紹_第4頁(yè)
課程計(jì)算機(jī)體系結(jié)構(gòu)實(shí)驗(yàn)soc中斷介紹_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

片上系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)CPU中斷中斷的定義中斷(英語(yǔ):Interrupt)是指處理器接收到來(lái)自硬件或軟件的信號(hào),提示發(fā)生了某個(gè)事件,應(yīng)該被注意,這種情況就稱為中斷。中斷的意義最初引入硬件中斷,只是出于性能上的考量。如果計(jì)算機(jī)系統(tǒng)沒(méi)有中斷,則處理器與外部設(shè)備通信時(shí),它必須在向該設(shè)備發(fā)出指令后進(jìn)行忙等待(Busywaiting),反復(fù)輪詢?cè)撛O(shè)備是否完成了動(dòng)作并返回結(jié)果。這就造成了大量處理器周期被浪費(fèi)。入中斷以后,當(dāng)處理器發(fā)出設(shè)備請(qǐng)求后就可以立即返回以處理其他任務(wù),而當(dāng)設(shè)備完成動(dòng)作后,發(fā)送中斷信號(hào)給處理器,后者就可以再回過(guò)頭獲取處理結(jié)果。這樣,在設(shè)備進(jìn)行處理的周期內(nèi),處理器可以執(zhí)行其他一些有意義的工作,而只付出一些很小的切換所引發(fā)的時(shí)間代價(jià)。中斷的分類硬件分類可屏蔽中斷(maskableinterrupt)。硬件中斷的一類,可通過(guò)在中斷屏蔽寄存器中設(shè)定位掩碼來(lái)關(guān)閉。非可屏蔽中斷(non-maskableinterrupt,NMI)。硬件中斷的一類,無(wú)法通過(guò)在中斷屏蔽寄存器中設(shè)定位掩碼來(lái)關(guān)閉。典型例子是時(shí)鐘中斷(一個(gè)硬件時(shí)鐘以恒定頻率—如50Hz—發(fā)出的中斷)。處理器間中斷(interprocessorinterrupt)。一種特殊的硬件中斷。由處理器發(fā)出,被其它處理器接收。僅見(jiàn)于多處理器系統(tǒng),以便于處理器間通信或同步。偽中斷(spuriousinterrupt)。一類不希望被產(chǎn)生的硬件中斷。發(fā)生的原因有很多種,如中斷線路上電氣信號(hào)異常,或是中斷請(qǐng)求設(shè)備本身有問(wèn)題。軟件分類軟件中斷。是一條CPU指令,用以自陷一個(gè)中斷。由于軟中斷指令通常要運(yùn)行一個(gè)切換CPU至內(nèi)核態(tài)(KernelMode/Ring0)的子例程,它常被用作實(shí)現(xiàn)系統(tǒng)調(diào)用(Systemcall)。中斷的分類(續(xù))精確中斷(preciseinterrupt)程序計(jì)數(shù)器的值被保存在已知位置。程序計(jì)數(shù)器所指向的指令之前的所有指令已被執(zhí)行完畢。程序計(jì)數(shù)器所指向的指令之后的所有指令不可被執(zhí)行。如果中斷信號(hào)到來(lái)后而轉(zhuǎn)入處理前發(fā)生了任何針對(duì)寄存器/內(nèi)存的更改,都必須予以還原。程序計(jì)數(shù)器所指向的指令地執(zhí)行狀態(tài)已知。非精確中斷(nonpreciseinterrupt)

無(wú)法滿足上述四個(gè)條件的,稱之為非精確中斷中斷的重點(diǎn)問(wèn)題特殊情況存在預(yù)取但是最終沒(méi)有執(zhí)行的指令不產(chǎn)生中斷在跳轉(zhuǎn)延時(shí)槽中產(chǎn)生中斷時(shí)需要確保正確跳轉(zhuǎn)中斷的返回位置內(nèi)部中斷:中斷指令處重新執(zhí)行外部中斷:中斷指令間隔的下一條指令跳轉(zhuǎn)延時(shí)槽處中斷:需保證正常跳轉(zhuǎn)中斷的應(yīng)用常見(jiàn)的中斷應(yīng)用包括以下幾種系統(tǒng)時(shí)鐘

系統(tǒng)時(shí)鐘通過(guò)一個(gè)計(jì)數(shù)器(多基于某種振動(dòng)頻率)定期向CPU發(fā)出中斷,CPU通過(guò)專門(mén)的時(shí)鐘中斷處理程序來(lái)保持計(jì)時(shí)?,F(xiàn)代操作系統(tǒng)對(duì)系統(tǒng)時(shí)鐘的另一個(gè)主要應(yīng)用是為進(jìn)程切換提供時(shí)機(jī)。一旦時(shí)鐘中斷發(fā)生,程序計(jì)數(shù)器會(huì)被自動(dòng)壓棧,而此時(shí)操作系統(tǒng)就有機(jī)會(huì)將程序狀態(tài)及內(nèi)存映像轉(zhuǎn)存至別處,并調(diào)用進(jìn)程調(diào)度程序來(lái)選擇下一個(gè)進(jìn)程,并將其進(jìn)程狀態(tài),包括程序計(jì)數(shù)器,導(dǎo)入寄存器。這樣下一個(gè)程序就可以運(yùn)行。應(yīng)注意進(jìn)程調(diào)度程序的調(diào)度時(shí)機(jī)不止于時(shí)鐘中斷。磁盤(pán)輸入輸出

磁盤(pán)中斷標(biāo)識(shí)某個(gè)磁盤(pán)設(shè)備完成了數(shù)據(jù)的發(fā)送/接收。磁盤(pán)中斷發(fā)生后,等待這個(gè)中斷的進(jìn)程可以(但未必,這取決于進(jìn)程調(diào)度程序當(dāng)時(shí)的判斷)繼續(xù)執(zhí)行。斷電信號(hào)

斷電中斷指示計(jì)算機(jī)能源即將喪失,計(jì)算機(jī)可以相應(yīng)中斷程序作有序的關(guān)機(jī)處理。軟件自陷

表示軟件調(diào)用相應(yīng)的系統(tǒng)指令進(jìn)入內(nèi)核態(tài)。中斷處理過(guò)程CPU或外部設(shè)備捕獲中斷協(xié)處理器CP0依據(jù)中斷優(yōu)先級(jí)和當(dāng)前中斷狀況判斷是否啟動(dòng)中斷處理程序計(jì)算中斷處理程序地址并跳轉(zhuǎn)(硬件保存EPC,進(jìn)入內(nèi)核態(tài))中斷處理(保存上下文,處理中斷,恢復(fù)上下文)中斷處理程序返回(軟件執(zhí)行ERET指令)恢復(fù)被中斷程序執(zhí)行(硬件取回EPC,狀態(tài)變更)中斷的嵌套無(wú)嵌套簡(jiǎn)單不能很好的滿足操作系統(tǒng)需求(只能在SYSCALL內(nèi)部相應(yīng)外部中斷或者CPU中斷)有限嵌套建立中斷優(yōu)先級(jí)使用中斷屏蔽位放置相同或者較低優(yōu)先級(jí)中斷執(zhí)行無(wú)限嵌套需要考慮堆棧大?。梢越唤o軟件管理)實(shí)現(xiàn)復(fù)雜中斷處理過(guò)程CPU或外部設(shè)備捕獲中斷協(xié)處理器CP0依據(jù)中斷優(yōu)先級(jí)和當(dāng)前中斷狀況判斷是否啟動(dòng)中斷處理程序計(jì)算中斷處理程序地址并跳轉(zhuǎn)(硬件保存EPC,進(jìn)入內(nèi)核態(tài))中斷處理(保存上下文,處理中斷,恢復(fù)上下文)中斷處理程序返回(軟件執(zhí)行ERET指令)恢復(fù)被中斷程序執(zhí)行(硬件取回EPC,狀態(tài)變更)MIPS中斷實(shí)現(xiàn)兼容模式(InterruptCompatibilityMode)中斷向量模式(VectoredInterruptMode)外部控制模式(ExternalInterruptControllerMode)標(biāo)準(zhǔn)MIPS中斷實(shí)現(xiàn)-1兼容模式(InterruptCompatibilityMode)6個(gè)硬件中斷號(hào)和2個(gè)軟件中斷號(hào)使用統(tǒng)一的入口地址標(biāo)準(zhǔn)MIPS中斷實(shí)現(xiàn)-2中斷向量模式(VectoredInterruptMode)6個(gè)硬件中斷號(hào)和2個(gè)軟件中斷號(hào)按向量遞增方式?jīng)Q定入口地址標(biāo)準(zhǔn)MIPS中斷實(shí)現(xiàn)-2中斷向量表標(biāo)準(zhǔn)MIPS中斷實(shí)現(xiàn)-3外部控制模式(ExternalInterruptControllerMode)1-63共63個(gè)中斷號(hào)由外部控制器提供入口地址,甚至可編程控制MIPS中斷具體實(shí)現(xiàn)-CPOMIPS設(shè)置了至多3個(gè)的協(xié)處理器位置,用于實(shí)現(xiàn)CPU的功能擴(kuò)展。其中又以零號(hào)協(xié)處理器(Co-Processor0,CP0)最為重要。CP0:0號(hào)協(xié)處理器(Co-processor0)32個(gè)寄存器號(hào)(5個(gè)bit表示number)每個(gè)寄存器號(hào)內(nèi)包含8個(gè)寄存器(3個(gè)bit表示sel)每個(gè)寄存器32bitCP0操作指令MFC0:將數(shù)據(jù)從C0移至通用寄存器MTC0:將數(shù)據(jù)從通用寄存器移至C0標(biāo)準(zhǔn)MIPS的CP0設(shè)計(jì)十分復(fù)雜,遠(yuǎn)遠(yuǎn)超出了一般的教學(xué)范疇,因此在這里我們盡量將其簡(jiǎn)化,通過(guò)盡可能少的CP0寄存器設(shè)計(jì),實(shí)現(xiàn)必要的處理器擴(kuò)展,最終能夠支持一個(gè)完整的操作系統(tǒng)的運(yùn)行。標(biāo)準(zhǔn)MIPS中斷實(shí)現(xiàn)-CP0StatusRegister(CPRegister12,Select0)NameBitsDescriptionRead/WriteCU3-031-28協(xié)處理器存在標(biāo)志(0:不存在1:存在)R/WBEV22中斷向量行為(0:Normal1:Bootstrap)R/WSR20上電復(fù)位方式(0:硬復(fù)位1:軟復(fù)位)R/WIM7-015-8中斷允許位(0:屏蔽1:允許)R/WIPL15-10當(dāng)前中斷優(yōu)先級(jí)(僅EIC模式)R/WUM4當(dāng)前運(yùn)行級(jí)別(0:內(nèi)核態(tài)1:用戶態(tài))R/WERL2錯(cuò)誤標(biāo)志(0:正常1:錯(cuò)誤),在上電/復(fù)位時(shí)置位R/WEXL1異常標(biāo)志(0:正常1:異常),在內(nèi)部/外部/軟件中斷時(shí)置位R/WIE0全局中斷允許位(0:屏蔽1:允許)R/W自主MIPS中斷實(shí)現(xiàn)–CP0狀態(tài)寄存器(StatusRegister,SR)保存CPU狀態(tài)信息。NameBitsDescriptionRead/WriteEX31內(nèi)部異常標(biāo)志,置1表示發(fā)生了內(nèi)部異常。RIR30外部中斷標(biāo)志,置1表示發(fā)生了外部中斷。RSC29軟件自陷標(biāo)志,置1表示發(fā)生了軟件自陷。RWD28看門(mén)狗強(qiáng)制復(fù)位標(biāo)志,置1表示此次復(fù)位由看門(mén)狗引發(fā)。RExCode15-11標(biāo)識(shí)最近一次不可屏蔽中斷的中斷號(hào)。5位中斷號(hào)一共可以表示31種內(nèi)部異常(不包括0)。RScCode10-1記錄最近一次軟件自陷的自陷代碼。10位代碼共可以表示1023種軟件自陷(不包括0)。RUM0CPU模式位,置0表示內(nèi)核模式,置1表示用戶模式。R自主MIPS中斷實(shí)現(xiàn)–CP0異常返回地址寄存器(ExceptionProgramCounterRegister,EPCR)保存當(dāng)前異常的返回地址NameBitsDescriptionRead/WriteEPC31-2異常返回地址的高30位(其最低2位永遠(yuǎn)為0)。R/WEM0異常返回處用戶模式標(biāo)志。返回后會(huì)覆蓋狀態(tài)寄存器的UM位。R/WCP0功能介紹基于之前介紹的CP0,針對(duì)操作系統(tǒng)所提供的高級(jí)功能,并不是相互獨(dú)立的。從上面CP0的寄存器設(shè)計(jì)中也可以發(fā)現(xiàn),為了工程上的使用方便,CP0將各個(gè)功能模塊雜糅到了一起。功能介紹核心態(tài)控制與分頁(yè)管理內(nèi)部異??刂仆獠恐袛喙芾碥浖韵萜渌鸆P0功能-核心態(tài)控制與分頁(yè)管理核心態(tài)控制兩個(gè)全局運(yùn)行級(jí)別,用戶態(tài)和內(nèi)核態(tài)。其中,操作系統(tǒng)運(yùn)行在內(nèi)核態(tài),具有對(duì)整個(gè)系統(tǒng)的完整控制權(quán),用戶程序運(yùn)行在用戶態(tài),無(wú)法使用特權(quán)級(jí)指令(如MFC0、MTC0、ERET)。任意時(shí)刻CPU所處的狀態(tài),可以通過(guò)查詢SR.UM位獲得。分頁(yè)管理此外,操作系統(tǒng)還需要進(jìn)行多個(gè)進(jìn)程之間的相互隔離,來(lái)確保多個(gè)不同的程序能夠同時(shí)運(yùn)行。系統(tǒng)提供分頁(yè)機(jī)制來(lái)實(shí)現(xiàn)這一功能,由于是標(biāo)準(zhǔn)的32位架構(gòu),因此使用兩級(jí)頁(yè)表,每個(gè)頁(yè)的大小固定為4KB。如下圖:CP0–分頁(yè)管理分頁(yè)模式地址轉(zhuǎn)換CP0–分頁(yè)管理頁(yè)目錄和頁(yè)表項(xiàng)結(jié)構(gòu)NameBitsDescriptionENTRY31-12頁(yè)表基址或者頁(yè)基址的高20位C4Cache使能位。置1表示該頁(yè)數(shù)據(jù)可以使用Cache以便加速存取。X3可執(zhí)行權(quán)限位。置1表示程序可以將該頁(yè)內(nèi)容作為代碼執(zhí)行。W2可寫(xiě)權(quán)限位。置1表示程序可以向該頁(yè)寫(xiě)入數(shù)據(jù)。U1用戶模式位。置1表示用戶模式可訪問(wèn)。V0頁(yè)表項(xiàng)有效位。置1表示該項(xiàng)有效。頁(yè)目錄項(xiàng)和頁(yè)表項(xiàng)的屬性組合按約束從嚴(yán)處理CP0功能-內(nèi)部異??刂苾?nèi)部異常控制當(dāng)發(fā)生內(nèi)部異常時(shí),SR.EX會(huì)置位,在SR.ExCode中保存當(dāng)前的異常號(hào),將對(duì)應(yīng)的異常參數(shù)存入EAR,異常返回地址存入EPCR,同時(shí)CPU自動(dòng)跳轉(zhuǎn)到EHBR所指定的位置,執(zhí)行相應(yīng)的處理程序。CP0–內(nèi)部異??刂飘惓>幪?hào)和對(duì)應(yīng)信息異常編號(hào)異常名稱異常說(shuō)明異常參數(shù)1指令未對(duì)齊PC最后兩位不是0異常PC值2數(shù)據(jù)未對(duì)齊內(nèi)存操作的地址沒(méi)有對(duì)齊內(nèi)存操作的地址3未定義指令CPU無(wú)法識(shí)別指令異常PC值4非法指令在用戶態(tài)執(zhí)行特權(quán)指令異常PC值5頁(yè)表項(xiàng)不存在對(duì)應(yīng)的頁(yè)表項(xiàng)無(wú)效待訪問(wèn)的地址6非法訪問(wèn)在用戶態(tài)遇到頁(yè)表項(xiàng)的U位為0待訪問(wèn)的地址7非法執(zhí)行頁(yè)表項(xiàng)的X位為0待訪問(wèn)的地址8非法寫(xiě)入頁(yè)表項(xiàng)的W位為0待訪問(wèn)的地址9算術(shù)溢出算術(shù)指令出現(xiàn)結(jié)果溢出當(dāng)前PC值10除0錯(cuò)誤整數(shù)除法除數(shù)為0當(dāng)前PC值11指令總線錯(cuò)誤試圖從總線獲取指令時(shí)出錯(cuò)當(dāng)前PC值12數(shù)據(jù)總線錯(cuò)誤試圖通過(guò)總線讀寫(xiě)數(shù)據(jù)時(shí)出錯(cuò)待訪問(wèn)的地址CP0功能-外部中斷管理外部中斷管理外部中斷,是外部設(shè)備主動(dòng)發(fā)起請(qǐng)求,申請(qǐng)CPU執(zhí)行特定代碼的過(guò)程。中斷控制的引入,使得操作系統(tǒng)代碼不需要每時(shí)每刻去關(guān)心各個(gè)外設(shè)的當(dāng)前狀態(tài),而只需要在外設(shè)發(fā)出中斷請(qǐng)求的時(shí)候進(jìn)行適當(dāng)響應(yīng)即可。這種方式在某種程度上打亂了指令的正常執(zhí)行流程,但是卻能夠極大地提高整個(gè)系統(tǒng)的實(shí)時(shí)響應(yīng)能力和整體工作效率。在大部分現(xiàn)有的體系結(jié)構(gòu)中,CPU都使用一個(gè)額外的中斷控制器來(lái)實(shí)現(xiàn)中斷的復(fù)雜管理。這其中有一個(gè)很重要的原因在于,外部中斷一般需要給每個(gè)外設(shè)分配一根中斷信號(hào)線,如果直接將這些信號(hào)線與CPU相連的話,由于外設(shè)種類繁多,會(huì)占用相當(dāng)可觀的CPU引腳資源,直接增加CPU的設(shè)計(jì)、封裝等的復(fù)雜度。CP0功能-軟件自陷軟件自陷操作系統(tǒng)和硬件協(xié)同設(shè)置了核心態(tài)控制與分頁(yè)管理,來(lái)保證操作系統(tǒng)和上層用戶程序的隔離。然而,用戶程序必然需要通過(guò)操作系統(tǒng)來(lái)控制底層硬件,如通過(guò)串口輸出一串字符,或者在顯示器上顯示一句話等等,這就需要在隔離的基礎(chǔ)上,再添加有限的、能夠保證安全的“調(diào)用通道”。軟件自陷,就是其中非常重要,也是非常神奇的一種方式。用戶程序只能運(yùn)行在用戶態(tài),當(dāng)它們需要調(diào)用處于內(nèi)核態(tài)的操作系統(tǒng)相關(guān)函數(shù)實(shí)現(xiàn)某些功能時(shí),就通過(guò)軟件自陷指令進(jìn)入內(nèi)核態(tài)。在自陷進(jìn)入內(nèi)核態(tài)時(shí),CP0中的SR.SC置位,在SR.ScCode中保存對(duì)應(yīng)的軟件自陷號(hào),同時(shí)CPU自動(dòng)跳轉(zhuǎn)到EHBR所指定的位置,執(zhí)行相應(yīng)的處理程序。軟件自陷號(hào)完全由操作系統(tǒng)定義,用戶程序需要遵循操作系統(tǒng)的約定進(jìn)行自陷調(diào)用,才能夠得到正確的結(jié)果。操作系統(tǒng)可以在進(jìn)入軟件自陷的處理程序時(shí)進(jìn)行一系列的權(quán)限檢查,來(lái)保證該調(diào)用的安全性。CP0功能-其他其他除了上面列舉的幾個(gè)大功能之外,本SOC系統(tǒng)還通過(guò)CP0實(shí)現(xiàn)了一些其他功能,如TIR寄存器控制的內(nèi)部計(jì)時(shí)器,還有WDR寄存器控制的看門(mén)狗。

中斷可能的硬件實(shí)現(xiàn)異常狀態(tài)捕獲內(nèi)部異常在IF、ID、EXE、MEM階段都有可能產(chǎn)生類似于其他數(shù)據(jù),跟隨流水線傳遞統(tǒng)一在MEM階段捕獲異常MEM之前的所有流水階段不會(huì)對(duì)CPU產(chǎn)生實(shí)際效果(REG/MEM)MEM之后的WB階段不會(huì)產(chǎn)生內(nèi)部異常流水線清空對(duì)每個(gè)流水階段傳遞過(guò)程進(jìn)行控制Stall–暫停流水線傳遞,該級(jí)流水線將保持上周期的數(shù)據(jù)Reset–清空流水線傳遞,該級(jí)流水線數(shù)據(jù)將全部清0不同流水階段可分別控制,以處理各種復(fù)雜情況數(shù)據(jù)沖突時(shí),暫停IF、ID、EXE階段,但MEM、WB階段繼續(xù)執(zhí)行發(fā)生中斷需要跳轉(zhuǎn)時(shí),清空所有階段嘗試用硬件在CP0操作指令前后插入足夠的NOP,可取消EHB指令中斷可能的硬件實(shí)現(xiàn)四級(jí)優(yōu)先級(jí)結(jié)構(gòu)上電/復(fù)位內(nèi)部CPU中斷外部IO中斷軟件中斷四級(jí)嵌套結(jié)構(gòu)僅高優(yōu)先級(jí)可嵌套低優(yōu)先級(jí)中斷多套寄存器切換使用多套的K0/K1寄存器和EPC寄存

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論