国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

RISC-V架構系列之1:指令集和特權模式

系統 Linux
從2010年開始的RISC-V 項目,已經有10年的時間,RISC-V基金會先后批準了RISC-V Base ISA, Privileged Architecture,Processor Trace等規范。RISC-V對Linux的基本支持也已經完成。

[[379500]]

從2010年開始的RISC-V 項目,已經有10年的時間,RISC-V基金會先后批準了RISC-V Base ISA, Privileged Architecture,Processor Trace等規范。RISC-V對Linux的基本支持也已經完成。本文嘗試通俗易懂的介紹RISC-V對于Linux的基本支持,包括指令集和異常處理。內存管理,遷移到RISC-V,UEFI,KVM等支持,歡迎繼續關注本公眾號。

ISA

眼見為實,下面就是RISC-V的匯編語言了。從筆者代碼中反匯編得來,功能是把傳入的字符c,通過RISC-V提供的標準接口(此處指OpenSBI,見 下文 )輸出到終端。

 

名正才能言順,RISC-V指令集規范

想做好一個生態,需要大家對齊目標,RISC-V的規范( Specifications,參考鏈接1)就起了這樣的作用,目前的規范分成兩部分,第1卷是非特權指令,第2卷是特權指令。在第一卷中,RISC-V已經定義了RV32I和RV64I兩個基礎整數運算,并有如下擴展。

 

現在問題來了,這么多規范,大家如果用的指令集不一致,豈不是沒法互操作了?別急,RISC-V還定義了下面指令集組合。

 

為了提高指令密度,更節省存儲空間,RISC-V還有上述的C擴展(壓縮指令),例如RV32GC表示使用壓縮指令的RV32G指令集,RV64GC表示使用壓縮指令的RV64G指令集。根據Andrew Waterman的測試,在Spec2006(一個測試cpu性能的商用測試套)中,RV32GC和RV64GC分別比RV32G和RV64G節省30%+的空間,而性能變化不大,見 參考資料2 。

除了非特權指令,RISC-V的規范還包括特權指令。Privileged Spec里面Machine ISA和Supervisor ISA已經release了1.11版本。而虛擬化Virtualization ISA目前是0.6,還在討論中。

ISA簡述

了解指令集有助于我們了解這個架構。RISC-V是一個RISC架構。所有的運算都在寄存器之間進行,通過單獨的load和store指令,把數據從內存中讀出或寫回。整體的指令集架構方面,包云崗老師帶領團隊已經做了很好的中文翻譯(參考鏈接3) ,我這邊就不再詳細的展開講,僅僅舉兩個例子

“Addi sp,sp,-32”是把sp寄存器的值減32并保存到sp寄存器中,這條指令在準備本函數自己的棧空間。

“Sd ra,24(sp)”是把本返回地址(ra)保存到棧上,24(sp)表示相對+24的位置,這是RISC-V二進制調用規范定義的。

偽匯編

平時讀代碼的時候,除了架構中定義的匯編指令還會遇到偽匯編。偽匯編是一些幫助我們平時手寫匯編提高效率的東西。比如說寄存器的賦值,下面的一條li偽指令會被翻譯為lui和addiw兩條指令。

 

再舉個例子,csrw用于寫入csr寄存器。其中csr的全稱是Control and Status Register,主要是和特權管理相關的寄存器。

 

異常處理

了解了基本的匯編語言,我們就可以進一步的了解RISC-V的異常,這是操作系統的職責之一(另一個重要職責是虛擬內存的管理,在下一篇文章介紹)。

為了便于理解,我們與ARM和X86對比下。

 

大約40年前,x86架構有了如上圖的保護模式。其中Level0跑操作系統,Level3跑應用。為了支持虛擬化,x86引入了VMX operation(如下圖),Guest操作系統和應用運行在non-root模式,Hypervisor運行在root模式。在這樣的設計下,支持Type-1和Type-2的虛擬機技術都比較方便,并且原有的操作系統不需要任何修改就可以作為Guest操作系統運行。不過早期的x86虛擬化也有缺點,例如不支持二級頁表轉換,需要用shadow page table,這樣效率很低,直到EPT的引入解決這一問題。

 

相比之下,ARM架構采取了不同的方式。由于ARM架構下已經有了如下圖的Normal和Secure world設計(這里指的是Normal world的操作系統,例如Linux,可以不加修改的運行在Secure world)。沒有用類似x86添加VMX root和non-root的operation的形式。

 

而是如下圖添加了新的一個異常級別EL2(下圖的Hypervisor),很容易理解的是EL2比EL1有更多的級別。問題在于EL2并不是EL1的復制,也就是說Linux kernel沒法直接運行在EL2上。對于Xen這種典型的Type-1虛擬化機制沒問題,Xen hypervisor可以很開心的運行在EL2。但是對于KVM,KVM作為Linux kernel的一個模塊,就比較尷尬:KVM需要EL2的一些權限,但是Linux又只能運行在EL1。于是原本在x86上完整的KVM被拆成了high-visor和low-visor(需要EL2特權能力的部分)兩部分。平時KVM的high-visor愉快和Linux kernel一起運行在EL1,當需要虛擬化管理的特權操作時,KVM從high-visor陷入到low-visor處理。

 

ARM的虛擬化技術比x86的晚了很多年,有個好處是可以完成x86多次迭代得到的狀態,例如前文提到的x86為了避免shadow page table引入的EPT,在ARM虛擬化擴展時是原生支持的。同時,ARM的虛擬化擴展在32位和64位架構下是完全一樣的,早期的虛擬化工作,不論是xen還是KVM的工作都是在32位的ARMv7a架構的Cortex-A15和Cortex-A7上完成的。這樣ARM64推出后,虛擬化這部分工作不需要重新做。至于ARM虛擬化上更多異常處理導致的性能問題,從ARMv8.1開始,有了VHE模式,支持把EL1下沉到EL2運行,這樣KVM ARM就沒有了前述的開銷。

從上述歷史可以看出,軟硬件的協同,靈活可擴展的設計非常重要。RISC-V的設計中也體現了這一點。在沒有虛擬化特性情況下,RISC-V最多支持三個特權級別。通常來說,為了支持Linux這樣的Rich OS,需要同時支持這三個模式。每一層有不同的權限。Bootloader/BIOS/UEFI運行系統的最高級別machine mode,Linux kernel運行在supervisor mode,應用運行在user mode。默認情況下,所有的異常都在machine mode處理。在有Linux kernel時,這樣明顯降低了效率:所有原本可以由Linux kernel處理的異常,例如應用的缺頁異常,都需要先陷入到machine mode再轉發給kernel。為了允許軟件系統更靈活的管理異常,RISC-V引入了delegation機制,可以選擇把一部分異常和中斷由硬件直接交給supervisor mode的kernel處理。

 

現在問題來了,RISC-V的虛擬化是如何設計的呢?很明顯,虛擬化的特權級別需要支持Linux kernel這種Rich OS。所以RISC-V沒有像早期的ARM虛擬化一樣把虛擬化異常直接直接加到supervisor mode和machine mode之間,而是定義了獨立的virtualization mode,這個mode再與user和supervisor mode組合,于是有了下面的表格。

 

(表格來自The RISC-V Instruction Set Manual, Volume II: Privileged Architecture, Document Version 1.12-draft Table 5.1)

這么說有點抽象,用RISC-V kVM作者之一的Anup Patel畫的圖表示(圖片已獲得作者授權, 原圖見參考鏈接4)。

 

備注:RISC-V虛擬化規范目前處于0.6草稿狀態,未來可能還會有些小的變化。

SBI

了解了RISC-V的特權模式,不同層次的軟件調用遵循什么樣的規范呢?RISC-V的設計中,下層(硬件/軟件)對上層透明,規范會定義二進制接口,對具體如何實現沒有要求。例如Linux kernel在supervisor mode,對下面的特權級別,通過SBI(Supervisor Binary Interface)訪問,SBI訪問的軟件稱為SEE(Supervisor Execution Environment),SEE可以是bootloader,BIOS,也可以Hypervisor。和SEE類似的還有支持應用的運行環境AEE。

 

(圖片來自The RISC-V Instruction Set Manual, Volume II: Privileged Architecture, Document Version 1.12-draft Figure 1.1)

SBI的規范見參考鏈接5,規范定義了SBI的能力,例如獲得SBI規范的版本,發送或接收一個字符,remote fence,設置timer,發送IPI中斷,管理RISC-V處理器(RISC-V中稱為hart)等,以及SBI的二進制調用規范。截止這篇文章,SBI是0.3 draft,這個版本主要是增加了用于系統復位的SBI接口。既然SBI是個規范,那就有各種實現,OpenSBI就是其中一個實現,這個實現支持generic(用于支持qemu的RISC-V virt machine),sifive和k210等芯片。

這么說有點抽象,咱們舉個簡單的例子。如果想寫一個簡單的從supervisor mode調用SBI接口打印字符的代碼,要怎么做呢?

首先,假設,我們以及有了c語言的運行環境,那我們需要根據SBI定義的二進制調用規范,使用寄存器a7傳遞指定的extension ID。

 

(圖片來自 RISC-V Supervisor Binary Interface Specification Version 0.3-rc0 p6)

從下圖可以看到,extension ID是1。同時我們看到函數原型是通過第一個參數傳入字符ch。

 

(圖片來自 RISC-V Supervisor Binary Interface Specification Version 0.3-rc0 p6)

RISC-V使用哪個寄存器保存第一個參數呢?根據RISC-V ELF psABI

specification的整數寄存器調用約定( 參考鏈接6 ),我們可以看到寄存器a0用于傳遞第一個參數。發送一個字符的對應的代碼是這個樣子

 

寫了SBI調用接口,還沒有萬事大吉,如果希望bootloader直接加載我們的代碼,我們還需要自己準備c語言運行環境。加上下面幾行匯編即可。

 

cpu_enter里面會打印字符串。我們選擇使用OpenSBI的fw_jump從固定的0x80200000加載我們的二進制,啟動效果如下。最后一行“Hello XU Xiake“是上面代碼打印的。希望我們像徐霞客一樣,通過編寫代碼,游覽RISC-V的各種特性。

 

參考鏈接

[1] RISC-V 規范: https://riscv.org/technical/specifications/

[2] Design of the RISC-V Instruction Set Architecture https://www2.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-1.pdf

[3] RISC-V 架構簡述:http://riscvbook.com/chinese/

[4] RISC-V虛擬化擴展:https://static.sched.com/hosted_files/osseu19/4e/Xvisor_Embedded_Hypervisor_for_RISCV_v5.pdf

[5] SBI規范:https://github.com/riscv/riscv-sbi-doc

[6] RISC-V Integer Register Convention https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md#integer-register-convention-

 

[7] RISC-V軟件狀態 https://github.com/riscv/riscv-software-list

本文轉載自微信公眾號「Linux閱碼場」,可以通過以下二維碼關注。轉載本文請聯系Linux閱碼場公眾號。

 

責任編輯:武曉燕 來源: Linux閱碼場
相關推薦

2021-10-19 13:44:05

處理器RISC-V架構

2019-03-10 22:03:52

框架工具開發

2021-02-04 14:31:30

RISC-V架構GPU

2021-12-29 15:30:32

RISC-VUbuntu Kyli架構

2023-03-03 10:45:41

支付寶支付芯組件

2021-09-05 15:01:52

蘋果RISC-V招聘

2023-09-28 10:57:17

2019-08-28 13:24:15

架構AI技術

2019-05-22 08:43:45

指令集RISC-V開源

2009-03-28 17:10:34

NehalemIntel服務器

2022-03-24 14:14:06

AMDRISC-VCPU

2021-12-24 17:15:25

芯片處理器RISC-V芯片

2019-05-17 09:49:58

架構運維技術

2024-11-29 15:48:46

JVM開發指令集

2018-07-20 08:29:16

RISC-V內存開放式

2022-06-09 14:40:14

系統移植鴻蒙

2023-10-11 11:29:51

2023-08-11 07:26:43

RISC-V CPU阿里單核

2019-10-22 08:52:33

開發者技能工具
點贊
收藏

51CTO技術棧公眾號

欧美aaaaa成人免费观看视频| 日韩欧美99| 久久精品99| 91高清在线观看视频| 亚欧成人精品| 国产精品扒开做爽爽爽的视频| 国产色产综合产在线视频| 亚洲中文字幕无码专区| 久久综合色综合88| 中文字幕电影在线观看| 一本色道久久综合精品竹菊| 日本中文字幕在线2020| 国产午夜精品美女视频明星a级| 高清一区二区三区av| 欧美中文字幕第一页| 黑丝一区二区| 日韩欧美视频免费在线观看| 久久久久九九视频| 校园春色欧美| 日韩精品电影网| 欧美美女在线直播| 91麻豆精品秘密入口| 狠狠色丁香婷综合久久| 制服丝袜综合网| 欧美三级在线播放| 亚洲精品一区二区在线播放∴| 国产精品美女呻吟| 美女视频黄a大片欧美| 亚洲综合婷婷久久| 这里只有精品免费| 免费观看性欧美大片无片| 99在线视频首页| 成人激情视频网站| 中文字幕高清在线观看| 日韩精品在线私人| 国产欧美日韩| 热这里只有精品| 亚洲精品亚洲人成人网在线播放| 欧美日韩人人澡狠狠躁视频| 欧美寡妇性猛交xxx免费| 97在线看福利| 日本中文字幕不卡| 理论片鲁丝二区爱情网| 日韩成人网免费视频| 欧美综合另类| 亚洲bbw性色大片| 国产精品影片在线观看| 亚洲视频每日更新| 亚洲美女炮图| 日韩精品小视频| 日韩成人三级| 国产成人艳妇aa视频在线| 亚洲午夜精品久久久久久久久| 亚洲天堂手机| 国产精品第一视频| 成人黄色大片在线观看| 五月天婷婷在线视频| 97婷婷大伊香蕉精品视频| 久久国产精品色婷婷| 欧美午夜一区| 国产精品第157页| 色综合天天综合| 麻豆一区二区麻豆免费观看| 国产精品免费免费| 蜜桃av噜噜一区二区三区小说| 国产精品综合一区二区| 美日韩一级片在线观看| 视频二区欧美| 蜜臀久久99精品久久久酒店新书| 日韩欧美一级精品久久| 国产精品18hdxxxⅹ在线| 久久艹中文字幕| 久久久亚洲高清| 国产第一精品| 欧美亚洲色图视频| 亚洲精品久久久久久久久| 久久激情婷婷| 国产美女情趣调教h一区二区| 国产精品三区www17con| 欧美一区二区三区白人| 日韩和欧美一区二区三区| 亚洲无线看天堂av| 日韩黄色影视| 日本精品性网站在线观看| 国产成人短视频在线观看| 粗暴蹂躏中文一区二区三区| 激情综合五月婷婷| 成人在线免费av| 最新天堂中文在线| 国产原创欧美精品| 欧美网站一区二区| 轻轻草成人在线| 青青草精品视频| 天天久久夜夜| 欧美日韩高清免费| 一本大道久久a久久综合婷婷| 久久99精品国产麻豆婷婷洗澡| a天堂资源在线| 日韩欧美精品一区二区| 国产乱码精品一区二区三区av | 亚洲在线观看免费| 亚洲丝袜一区在线| 免费在线成人| 国产黄色在线网站| 国产精品永久入口久久久| 日韩欧美在线免费观看| 禁断一区二区三区在线| 国产无遮挡在线视频免费观看| 国产精品久久不能| 午夜精品影院在线观看| 欧美精品欧美精品系列| 视频在线这里都是精品| 欧美日韩一区二区视频在线观看| 欧美日韩成人激情| 久久国产精品亚洲77777| 欧美xxxxhdvideosex| 一区不卡字幕| 亚洲成人精品视频| 国产成人av自拍| 日本一区二区三区播放| 久草.com| 国产日韩视频在线观看| 色综合亚洲欧洲| 久久美女性网| 日韩性xxx| v888av成人| 91九色对白| 亚洲第一精品电影| 91麻豆产精品久久久久久| 国产精品日韩精品中文字幕| 大胆av不用播放器在线播放| 熟女视频一区二区三区| 欧美精品videosex性欧美| 欧美日韩裸体免费视频| 开心九九激情九九欧美日韩精美视频电影| 另类视频在线观看| 中文字幕日韩一区二区| 午夜精品网站| sis001欧美| 国产91福利| 久久久亚洲综合网站| 中文字幕不卡av| 欧美一区激情| 亚洲丝袜精品| 777米奇影视第四色| 成人在线视频网| 亚洲精品国产精品国自产观看浪潮| 久久精品日韩一区二区三区| 欧美成人国产| 精品176极品一区| 亚洲一区二区三区成人| 伊甸园精品99久久久久久| 国内伊人久久久久久网站视频| 欧洲中文字幕精品| 国产91综合网| 女人天堂亚洲aⅴ在线观看| 奇米777日韩| 在线播放你懂的| 欧美中文字幕在线观看视频| 国产日本欧美视频| 国产一区二区三区久久精品| 午夜婷婷国产麻豆精品| 国产精品99久久久久久久vr| 天堂网av成人| 超碰资源在线| 麻豆电影在线| 国产女大学生av| 国产精品久久久久av福利动漫| zzijzzij亚洲日本成熟少妇| 日韩人体视频一二区| 91丝袜国产在线播放| 亚洲专区一区| 女优一区二区三区| 国产精品美女午夜爽爽| 一广人看www在线观看免费视频| 亚洲欧美日韩综合网| 国产又粗又大又爽的视频| 97超碰人人看人人| 久久久久女教师免费一区| 亚洲精品二三区| 日本精品视频一区二区| 国产精品久久久久aaaa樱花| 国产激情偷乱视频一区二区三区 | www久久日com| 免费观看的av网站| 久久久999免费视频| 欧美精品二区三区四区免费看视频 | 视频一区视频二区视频| 国产精品精品久久久| 日韩中文字幕在线观看| 欧美日本精品一区二区三区| 有码一区二区三区| 久久综合九色综合久久久精品综合| 日本最新不卡在线| 黄色精品免费| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 中文字幕日韩精品在线观看| 国产精品一区电影| 91精品国产综合久久男男| 国产精欧美一区二区三区|