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