欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么 ,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)負(fù)責(zé)任的成都網(wǎng)站制作公司!

從2010年開始的RISC-V 項(xiàng)目,已經(jīng)有10年的時(shí)間,RISC-V基金會(huì)先后批準(zhǔn)了RISC-V Base ISA, Privileged  Architecture,Processor  Trace等規(guī)范。RISC-V對(duì)Linux的基本支持也已經(jīng)完成。本文嘗試通俗易懂的介紹RISC-V對(duì)于Linux的基本支持,包括指令集和異常處理。內(nèi)存管理,遷移到RISC-V,UEFI,KVM等支持,歡迎繼續(xù)關(guān)注本公眾號(hào)。

ISA

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

名正才能言順,RISC-V指令集規(guī)范

想做好一個(gè)生態(tài),需要大家對(duì)齊目標(biāo),RISC-V的規(guī)范(  Specifications,參考鏈接1)就起了這樣的作用,目前的規(guī)范分成兩部分,第1卷是非特權(quán)指令,第2卷是特權(quán)指令。在第一卷中,RISC-V已經(jīng)定義了RV32I和RV64I兩個(gè)基礎(chǔ)整數(shù)運(yùn)算,并有如下擴(kuò)展。

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

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

ISA簡(jiǎn)述

了解指令集有助于我們了解這個(gè)架構(gòu)。RISC-V是一個(gè)RISC架構(gòu)。所有的運(yùn)算都在寄存器之間進(jìn)行,通過單獨(dú)的load和store指令,把數(shù)據(jù)從內(nèi)存中讀出或?qū)懟?。整體的指令集架構(gòu)方面,包云崗老師帶領(lǐng)團(tuán)隊(duì)已經(jīng)做了很好的中文翻譯(參考鏈接3)  ,我這邊就不再詳細(xì)的展開講,僅僅舉兩個(gè)例子

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

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

偽匯編

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

再舉個(gè)例子,csrw用于寫入csr寄存器。其中csr的全稱是Control and Status Register,主要是和特權(quán)管理相關(guān)的寄存器。

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

異常處理

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

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

備注:RISC-V虛擬化規(guī)范目前處于0.6草稿狀態(tài),未來可能還會(huì)有些小的變化。

SBI

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

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

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

首先,假設(shè),我們以及有了c語(yǔ)言的運(yùn)行環(huán)境,那我們需要根據(jù)SBI定義的二進(jìn)制調(diào)用規(guī)范,使用寄存器a7傳遞指定的extension ID。

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

RISC-V使用哪個(gè)寄存器保存第一個(gè)參數(shù)呢?根據(jù)RISC-V ELF psABI

specification的整數(shù)寄存器調(diào)用約定( 參考鏈接6 ),我們可以看到寄存器a0用于傳遞第一個(gè)參數(shù)。發(fā)送一個(gè)字符的對(duì)應(yīng)的代碼是這個(gè)樣子

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

寫了SBI調(diào)用接口,還沒有萬(wàn)事大吉,如果希望bootloader直接加載我們的代碼,我們還需要自己準(zhǔn)備c語(yǔ)言運(yùn)行環(huán)境。加上下面幾行匯編即可。

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

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

RISC-V架構(gòu)中的指令集和特權(quán)模式是什么

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

當(dāng)前標(biāo)題:RISC-V架構(gòu)中的指令集和特權(quán)模式是什么
標(biāo)題路徑:http://aaarwkj.com/article34/gppdpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、品牌網(wǎng)站建設(shè)、Google、網(wǎng)站維護(hù)定制開發(fā)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
91av国产一区二区| 成人污视频网站在线观看| 五月婷久久精品国产亚洲av| 狠狠综合久久av一区二区大宝 | 人妻少妇久久中文字幕韩| 人妻少妇久久久久久69| 欧美日韩69av网| 91无人区一区二区三乱码| 日韩欧美亚洲一区二区| 久久久久精品国产亚洲av影院| 久久中文字幕av一区| 黄片视频免费观看一起草| 欧美又粗又成人大视频| 精品久久少妇激情视频| 国产二区三区在线播放| 蜜桃福利视频一区二区| 一区二区三区国产激情| 国产女技师口爆在线观看| 日韩人妻av免费电影| 搡老女人老91妇女老熟女| 蜜桃视频在线视频免费观看| 日本一区二区在线高清| 欧美精品国产一区二区免费| 日本 影院 一区 二区| 日本视频免费一区二区| 欧美av精品一区二区三区| 蜜桃av网站免费观看| 中文国产人精品久久蜜桃| 成年人免费在线观看毛片| 亚洲精品入口一区二区| 亚洲精品视频久久免费| 老牛av一区二区三区| 久久一区二区三区播放| 成人黄色片久久久大全| 高清av网站大全网站| 极品人妻视频中文字幕| 亚洲一区二区三区三洲| 亚洲国产欧美日韩国产| 日韩精品一区二区91| 日韩午夜免费一区二区蜜桃| 日韩精品一区二区三区都在看|