RISC-V特權(quán)架構(gòu)
ARM有7種工作模式,而RISC-V也有不同的模式,這些模式在RISC-V中也被稱為特權(quán)架構(gòu)。
RISC-V總共有四種模式,分別是U、S、H和M模式:
U模式被編碼為00,S模式編碼為01,H模式編碼為10,M模式編碼為11。Level越高,等級越高。等級越高,擁有的訪問權(quán)限也更高。按照特權(quán)等級,由高到低依次為M、H、S、U。
上圖中編碼為10的模式是保留的,這個模式實際上就是H模式,H模式是用作虛擬化,但是目前RISC-V對虛擬化還不太完善,基本不支持。因此上圖并沒有將H模式標(biāo)出來,而是作為保留。也正是因此,有人經(jīng)常將RISC-V的模式說成三種U、S和M。
- U模式:User,用戶模式
- S模式:Supervisor,監(jiān)管者模式
- M模式:Machine,機器模式
以RISC-V Linux為例,Linux應(yīng)用程序處于U模式,Linux內(nèi)核/uboot處于S模式,M模式則是OpenSBI。M模式擁有最高訪問權(quán)限,Linux內(nèi)核如果要訪問CSR寄存器,則必須由S模式切換到M模式,由OpenSBI讀取CSR寄存器,然后將數(shù)據(jù)返回給內(nèi)核。
M模式是必須要選擇的,RISC-V的裸機代碼都運行在M模式下。
RISC-V通用寄存器
寄存器 | ABI名稱 | 說明 |
---|---|---|
x0 | zero | 0值寄存器,硬編碼為0,寫入數(shù)據(jù)忽略,讀取數(shù)據(jù)為0 |
x1 | ra | 用于返回地址(return address) |
x2 | sp | 用于棧指針(stack pointer) |
x3 | gp | 用于通用指針(global pointer) |
x4 | tp | 用于線程指針 |
x5 | t0 | 用于存放臨時數(shù)據(jù)或者備用鏈接寄存器 |
x6~x7 | t1~t2 | 用于存放臨時數(shù)據(jù)寄存器 |
x8 | s0/fp | 需要保存的寄存器或者幀指針寄存器 |
x9 | s1 | 需要保存寄存器 |
x10~x11 | a0~a1 | 函數(shù)參數(shù)或者返回值寄存器 |
x12~x17 | a2-a7 | 函數(shù)傳遞參數(shù)寄存器 |
x18~x27 | s2-s11 | 需要保存的寄存器 |
x28~x31 | t3~t6 | 用于存放臨時數(shù)據(jù)寄存器 |
RISC-V有x0 x31共32個通用寄存器,每個通用寄存器都有各自的用途,例如x2是作為sp棧指針、a0~a1用來保存函數(shù)參數(shù)或返回值。x0寄存器被硬編碼為了0,就是個0值寄存器。
ABI名稱相當(dāng)于這些通用寄存器的別名,在RISC-V匯編當(dāng)中,都使用ABI名稱來代表這些寄存器。
-
寄存器
+關(guān)注
關(guān)注
31文章
5357瀏覽量
120613 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1376瀏覽量
40316 -
Linux
+關(guān)注
關(guān)注
87文章
11314瀏覽量
209807 -
RISC
+關(guān)注
關(guān)注
6文章
463瀏覽量
83767 -
架構(gòu)
+關(guān)注
關(guān)注
1文章
516瀏覽量
25494
發(fā)布評論請先 登錄
相關(guān)推薦
評論