0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RISC-V架構(gòu)在機(jī)器模式下對(duì)異常的處理

冬至配餃子 ? 來(lái)源:天奇工作室 ? 作者:LRC ? 2022-08-05 16:34 ? 次閱讀

上次我們講了處理器的中斷和異常,只是從高到低俯視了這一功能。沒(méi)有落到實(shí)處,沒(méi)有具體到細(xì)節(jié)。上一章有一處有問(wèn)題,在此改正一下,狹義的中斷和狹義的異常一起構(gòu)成了廣義的異常而非廣義的中斷。這一次,我們就來(lái)講講RISC-V特權(quán)架構(gòu),順便把RISC-V架構(gòu)中的中斷和異常探索得更加深入。

CPU可以運(yùn)行在好幾種特權(quán)模式下。RISC-V中定義了三種特權(quán)模式,分別是機(jī)器模式(machinemode)、監(jiān)管者模式(supervisor mode)和用戶模式(user mode)。不同的領(lǐng)域和不同的廠家有不同的稱呼。在操作系統(tǒng)中,機(jī)器模式體現(xiàn)為實(shí)模式,用戶模式則體現(xiàn)為保護(hù)模式。早期的dos系統(tǒng)就是運(yùn)行在實(shí)模式下。

pYYBAGLs1QaADQbQAABuQ8k9G-I949.png

RISC-V中的三種特權(quán)模式的編碼、名稱和縮寫

為什么要?jiǎng)澐诌@么多種的模式呢?目的是為了保護(hù)電腦運(yùn)行環(huán)境不被破壞。比如說(shuō)一個(gè)病毒線程想要篡改其他線程中的內(nèi)存數(shù)據(jù),甚至是破壞操作系統(tǒng),這種操作肯定是不被允許的。我們必須為每一個(gè)線程劃定一個(gè)空間,每個(gè)線程只能訪問(wèn)屬于自己的空間。具體操作以后會(huì)講。那問(wèn)題就解決了嗎?沒(méi)有。作為操作系統(tǒng),得能夠有效的控制別的線程的運(yùn)行情況,必要的時(shí)候?qū)⒆x寫一些線程。因此操作系統(tǒng)必須要被賦予更高級(jí)的權(quán)限,或者說(shuō)要與其他的應(yīng)用線程區(qū)別對(duì)待,因此不同特權(quán)模式應(yīng)運(yùn)而生。

其中操作系統(tǒng)的線程代碼就是運(yùn)行在機(jī)器模式下,應(yīng)用程序運(yùn)行在用戶模式下,有些時(shí)候比如windows系統(tǒng)里會(huì)忽然彈出一個(gè)管理員權(quán)限的許可窗口,如果你點(diǎn)了確定,可以理解為應(yīng)用程序的權(quán)限經(jīng)過(guò)你的許可提高到了監(jiān)管者模式。注意:機(jī)器模式的權(quán)限是最高的,用戶模式的權(quán)限是最低的。如果用戶的權(quán)限過(guò)高,他們可能會(huì)弄壞電腦。

那么RISC-V的CPU是怎么做的呢?

首先,RISC-V架構(gòu)中定義了一些控制和狀態(tài)寄存器(control and status register),簡(jiǎn)稱CSR,與32個(gè)物理寄存器不同(物理寄存器可以認(rèn)為是5位地址尋址的),這些CSR是用12位地址進(jìn)行尋址的,并且地址空間是私有獨(dú)立的,不同于全局地址空間。并且,針對(duì)這些CSR寄存器的讀寫有相應(yīng)的特殊指令,這些特殊指令都有被定義在之前講的RISC-V指令集圖卡中。其中某些特權(quán)指令只能在機(jī)器模式中被執(zhí)行(需要等級(jí)權(quán)限),如果在用戶模式中遇到這些特權(quán)指令,處理器就會(huì)拋出異常,相應(yīng)的線程可能會(huì)被殺死,或者由用戶自行決定。其次,CSR的種類有很多,舉幾個(gè)機(jī)器模式中要用到的CSR。比如mvendorid寄存器,它在12位的地址空間的地址是0xf11,它的用途是保存廠商標(biāo)識(shí)代碼的,所有的電子產(chǎn)品生產(chǎn)廠商可以向美國(guó)JEDEC協(xié)會(huì)付費(fèi)申請(qǐng)一個(gè)廠商標(biāo)識(shí)代碼(也可以向我申請(qǐng),我不收費(fèi),有意聯(lián)系)。再比如misa(指令集寄存器),地址是0x301,用途是指示此CPU支持哪些指令集。類似的CSR有很多,在此不一一贅述,下面重點(diǎn)說(shuō)說(shuō)八個(gè)和機(jī)器模式中斷與異常有關(guān)的CSR。

它們分別是:mepc(異常PC寄存器)、mtvec(異常向量基地址寄存器)、mcause(異常原因寄存器)、mie(中斷使能寄存器)、mip(中斷等待寄存器)、mtval(異常值寄存器)、mscratch(草稿寄存器)和mstatus(線程狀態(tài)寄存器)。其中每個(gè)寄存器命名開(kāi)頭的m是機(jī)器模式的意思。相應(yīng)的還有其他模式中斷與異常的CSR。

pYYBAGLs1TiAB17IAABx5rhXyVI465.png

mstatus寄存器的具體字段,僅需注意紅色畫圈部分

機(jī)器模式下,異常發(fā)生時(shí),mepc用于保存當(dāng)前線程的PC值(或者異常的PC值),并將異常服務(wù)程序的入口地址從mtvec寫入PC寄存器中。倘若支持向量中斷并且是狹義中斷發(fā)生時(shí),那么PC值設(shè)置為mtvec-1+異常序號(hào)編碼*4(之所以-1,是因?yàn)閙tvec最低位是硬件是否支持向量中斷的標(biāo)志位,1表示支持向量中斷,在硬件電路中我們大可以直接將最后一位抹掉實(shí)現(xiàn)-1),而狹義異常發(fā)生時(shí),PC值仍設(shè)置成mtvec不變。根據(jù)異常或中斷來(lái)源,將其來(lái)源序號(hào)寫入mcause中。將mtval設(shè)置為出錯(cuò)的地址或其他適用于特定異常的信息字。將mstatus中的MIE字段(注意,是MIE字段,不是mie寄存器,字段是指寄存器中的某一段數(shù)值,MIE字段屬于mstatus寄存器的一部分)寫到MPIE字段中后,再將MIE字段寫0,用以禁止接受狹義中斷,此時(shí)狹義中斷如果發(fā)生,硬件將不做響應(yīng)。因此,RISC-V能且只能支持軟件中斷嵌套。狹義異常是不需要嵌套的,異常服務(wù)程序中不會(huì)再發(fā)生狹義異常,除非你異常服務(wù)程序?qū)懙糜袉?wèn)題。將發(fā)生中斷前的權(quán)限模式寫到mstatus中的MPP字段內(nèi)??梢韵胂蟮?,當(dāng)中斷或異常結(jié)束后,這些保存了的東西是要復(fù)原回來(lái)的,線程方能繼續(xù)執(zhí)行。

注意:以上過(guò)程均是由硬件自己完成,該過(guò)程中,沒(méi)有指令被執(zhí)行。硬件準(zhǔn)備完成后,PC跳轉(zhuǎn)到mtvec這個(gè)統(tǒng)一的地址入口,異常服務(wù)程序才開(kāi)始處理異常。(以上過(guò)程有些繁雜,慢慢看,你會(huì)明白設(shè)計(jì)者的用意的)

異常服務(wù)程序具體怎么做呢?如果不支持向量中斷,那么異常服務(wù)程序一上來(lái),就先查詢mcause寄存器,看看這個(gè)異常是狹義中斷還是狹義異常,具體是哪出了問(wèn)題。根據(jù)不同的問(wèn)題再次跳轉(zhuǎn)到不同的地址,對(duì)癥下藥解決問(wèn)題。比如說(shuō)打3d游戲的時(shí)候鼠標(biāo)傳來(lái)了一個(gè)中斷,CPU跳轉(zhuǎn)到異常服務(wù)程序,經(jīng)查詢mcause得知這是一個(gè)鼠標(biāo)傳來(lái)的中斷,進(jìn)而訪問(wèn)鼠標(biāo)的驅(qū)動(dòng)程序,并將相應(yīng)數(shù)值傳遞給這款3d游戲,從而3d游戲渲染新的一幀畫面,最后畫面完成旋轉(zhuǎn)。

以上便是RISC-V架構(gòu)在機(jī)器模式下對(duì)異常的處理。具體細(xì)節(jié)需要參考RISC-V架構(gòu)書。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    900

    瀏覽量

    41598
  • 狀態(tài)寄存器
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    7113
  • RISC-V
    +關(guān)注

    關(guān)注

    45

    文章

    2308

    瀏覽量

    46301
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RISC-V開(kāi)放架構(gòu)設(shè)計(jì)之道|閱讀體驗(yàn)】 RISC-V設(shè)計(jì)必備之案頭小冊(cè)

    ,最基礎(chǔ)的RV32已經(jīng)是完全不變化。以此來(lái)規(guī)避在過(guò)去指令集設(shè)計(jì)中的錯(cuò)誤。 然后開(kāi)始了RISC-V中應(yīng)該如何編寫匯編代碼,書中大致講了將c語(yǔ)言編譯成計(jì)算機(jī)執(zhí)行的機(jī)器語(yǔ)言程序的重要步驟,并對(duì)每個(gè)步驟進(jìn)行了簡(jiǎn)單的描述
    發(fā)表于 01-22 16:24

    RISC-V 生態(tài)架構(gòu)淺析

    RISC-V 生態(tài)架構(gòu)淺析前言RISC-V最近越來(lái)越多的出現(xiàn)在科技新聞中,大量的公司加入到RISC-V研究和生產(chǎn)中。越來(lái)越多的
    發(fā)表于 06-22 16:51

    簡(jiǎn)單就是美——RISC-V架構(gòu)的設(shè)計(jì)哲學(xué)

    大多數(shù)有選擇的情況,盡量選擇簡(jiǎn)潔的實(shí)現(xiàn)方案。筆者第一次閱讀了RISC-V架構(gòu)文檔之時(shí),不禁擊節(jié)贊嘆,拍案驚奇,因?yàn)?b class='flag-5'>RISC-V
    發(fā)表于 07-27 17:47

    學(xué)習(xí)RISC-V入門 基于RISC-V架構(gòu)的開(kāi)源處理器及SoC研究

    Waterman、Yunsup Lee決定設(shè)計(jì)一種新的指令級(jí)架構(gòu),并決定以BSD授權(quán)的方式開(kāi)源,希望借此可以有更多創(chuàng)新的處理器產(chǎn)生、有更多的處理器開(kāi)源,并以此降低電子產(chǎn)品成本[2]。RISC
    發(fā)表于 07-27 18:09

    科普RISC-V生態(tài)架構(gòu)(認(rèn)識(shí)RISC-V)

    RISC-V 生態(tài)架構(gòu)淺析前言RISC-V最近越來(lái)越多的出現(xiàn)在科技新聞中,大量的公司加入到RISC-V研究和生產(chǎn)中。越來(lái)越多的
    發(fā)表于 08-02 11:50

    RISC-V有哪些特點(diǎn)

    完全自由免費(fèi)使用,同時(shí)也容許企業(yè)添加自有指令集拓展而不必開(kāi)放共享以實(shí)現(xiàn)差異化發(fā)展。  第二點(diǎn)是簡(jiǎn)單,這也是RISC-V架構(gòu)的設(shè)計(jì)哲學(xué)。處理器領(lǐng)域,X86與ARM
    發(fā)表于 08-25 11:17

    ARM與RISC-V架構(gòu)的區(qū)別是什么?

    自己特色,根據(jù)不同用途有不同型號(hào)的處理架構(gòu)。 關(guān)于RISC-V RISC:Reduced Instruction Set Computer,即精簡(jiǎn)指令集計(jì)算機(jī)。
    發(fā)表于 04-25 09:13

    RISC-V的特色,大飽眼福?。?!

    RISC-V架構(gòu)秉承簡(jiǎn)單的設(shè)計(jì)哲學(xué)。體現(xiàn)為:處理器領(lǐng)域,主流的架構(gòu)為x86與ARM架構(gòu)。x86
    發(fā)表于 06-18 19:41

    分析RISC-V架構(gòu)的不同之處

    0 RISC-V和其他開(kāi)放架構(gòu)有何不同如果僅從“免費(fèi)”或“開(kāi)放”這兩點(diǎn)來(lái)評(píng)判,RISC-V架構(gòu)并不是第一個(gè)做到免費(fèi)或開(kāi)放的處理
    發(fā)表于 07-26 06:58

    RISC-V架構(gòu)簡(jiǎn)介

    【摘要】 本文首先對(duì)RISC-V架構(gòu)做了簡(jiǎn)要的介紹,在此基礎(chǔ)上實(shí)現(xiàn)了LiteOSRISC-V架構(gòu)上的適配過(guò)程的具體步驟,希望對(duì)你有所幫助
    發(fā)表于 07-28 07:46

    玄鐵VirtualZone:基于RISC-V架構(gòu)的安全擴(kuò)展

    Prevention(SMEP),從而增加對(duì)關(guān)鍵信息的保護(hù)。IOPMPRISC-V架構(gòu)提供了一種PMP物理內(nèi)存保護(hù)機(jī)制,用于保護(hù)RISC-V處理
    發(fā)表于 09-01 14:38

    我了解的RISC-V

    使用,同時(shí)也容許企業(yè)添加自有指令集拓展而不必開(kāi)放共享以實(shí)現(xiàn)差異化發(fā)展。 架構(gòu)簡(jiǎn)單 RISC-V架構(gòu)秉承簡(jiǎn)單的設(shè)計(jì)哲學(xué)。體現(xiàn)為: 處理器領(lǐng)域
    發(fā)表于 03-19 10:52

    RISC-V架構(gòu)

    繼續(xù)完善。雖然RISC-V現(xiàn)在的討論熱度很高,但是整個(gè)生態(tài)實(shí)際仍在建設(shè)初期,實(shí)踐過(guò)程中底層架構(gòu)上還存在bug需要解決。此外,RISC-V架構(gòu)
    發(fā)表于 04-03 15:29

    RISC-V的商業(yè)模式,國(guó)內(nèi)外RISC-V的產(chǎn)業(yè)生態(tài)分析

    RISC-V將是智慧物聯(lián)網(wǎng)創(chuàng)新發(fā)展的新機(jī)遇,本文首先介紹了什么是指令集架構(gòu),其次介紹了RISC-V的歷史機(jī)遇、RISC-V的商業(yè)模式及中國(guó)C
    的頭像 發(fā)表于 06-22 16:14 ?3564次閱讀
    <b class='flag-5'>RISC-V</b>的商業(yè)<b class='flag-5'>模式</b>,國(guó)內(nèi)外<b class='flag-5'>RISC-V</b>的產(chǎn)業(yè)生態(tài)分析

    RISC-V 與 ARM 架構(gòu)的區(qū)別 RISC-V機(jī)器學(xué)習(xí)的關(guān)系

    現(xiàn)代計(jì)算機(jī)架構(gòu)中,RISC-V和ARM是兩種流行的處理架構(gòu)。它們各自具有獨(dú)特的特點(diǎn)和優(yōu)勢(shì),適用于不同的應(yīng)用場(chǎng)景。 1.
    的頭像 發(fā)表于 12-11 17:50 ?1094次閱讀