RISC-V Linux支持sv32、sv39、sv48等虛擬地址格式,分別代表32為虛擬地址、38位虛擬地址和48位虛擬地址。RISC-VLinux默認(rèn)也是使用sv39格式,sv39的虛擬地址、物理地址、PTE格式如下:
虛擬地址格式:
物理地址格式:
PTE格式:
虛擬地址使用39位表示,其中低12位代表pageoffset,高位劃分為了三部分:VPN[0]、VPN[1]和VPN[2],分別代表虛擬地址VA在PTE、PMD和PGD中的索引。
物理地址使用56位表示,低12位代表page offset,高位是物理頁P(yáng)PN[0]、PPN[1]和PPN[2]
PTE保存了物理頁P(yáng)PN[0]、PPN[1]和PPN[2],和物理地址中的PPN相對(duì)應(yīng);PTE的低10位代表物理地址的訪問權(quán)限,當(dāng)RWX全為0時(shí),則代表該P(yáng)TE存儲(chǔ)的地址是下一級(jí)頁表的物理地址,否則代表當(dāng)前頁表是最后一級(jí)頁表。
再看看sv39 的頁表格式,sv39使用的是三級(jí)頁表,PGD、PMD和PTE,每一個(gè)級(jí)頁表使用9bit表示,即每一級(jí)頁表都有512個(gè)頁表項(xiàng)。
在代碼中,創(chuàng)建一個(gè)有512個(gè)元素的數(shù)組即代表一個(gè)頁表。一個(gè)PTE有512個(gè)頁表項(xiàng),每一個(gè)頁表項(xiàng)占用8字節(jié),5128=4096字節(jié),所以一個(gè)PTE代表4K。一個(gè)PMD也是512個(gè)頁表項(xiàng),每一項(xiàng)可代表一個(gè)PTE,5124 K=2M,所以一個(gè)PMD就代表2M。以此類推,一個(gè)PGD代表512 * 2M=1G。
重要結(jié)論:PGD代表1G、PMD代表2M、PTE代表4K。sv39默認(rèn)的頁大小是4K。
三級(jí)頁表虛擬地址轉(zhuǎn)為物理地址過程示意圖:
sv39三級(jí)頁表虛擬地址轉(zhuǎn)為物理地址過程:
MMU通過satp寄存器得到PGD的物理地址,結(jié)合PGD index(即VPN[2])找到PMD;找到PMD后,再結(jié)合PMDindex(即VPN[1])找到PTE,然后結(jié)合PTE index(即VPN[0])得到VA在PTE索引中的值,從而得到物理地址。
最后在PTE中取出PPN[2]、PPN[1]和PPN[0],再和虛擬地址的低12位offset相加,得到最終的物理地址。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
MMU(Memory Management Unit,內(nèi)存管理單元)是一種硬件模塊,用于在CPU和內(nèi)存之間實(shí)現(xiàn)虛擬內(nèi)存管理。
發(fā)表于 08-03 10:05
?822次閱讀
in-order pipeline. The C906 supports the Sv39 virtual address system with custom page attribute
發(fā)表于 05-20 14:52
/run-mbedtls.md) **編寫中**。- [運(yùn)行SV39 MMU測(cè)試](./doc/run-mmu_sv39.md) **編寫中
發(fā)表于 06-01 15:22
world 編寫中。運(yùn)行Free rtos 編寫中。運(yùn)行mbedtls 編寫中。運(yùn)行SV39 MMU測(cè)試 編寫
發(fā)表于 06-01 16:15
以下為DY-SV5W介紹摘抄模塊應(yīng)用手冊(cè)1.產(chǎn)品概述DY-SV5W是本司自主研發(fā)的一款智能語音模塊,集成IO分段觸發(fā),UART串口控制,ONE_line單總線串口控制,標(biāo)準(zhǔn)MP3等7種工作模式,簡(jiǎn)單
發(fā)表于 02-10 06:25
mbedtls編寫中 。運(yùn)行SV39 MMU測(cè)試 編寫中 。運(yùn)行mtime測(cè)試編寫中 。運(yùn)行mtime測(cè)試 編寫
發(fā)表于 08-22 16:36
有RISC-V跑uCLinux或者NO MMU的Linux的項(xiàng)目嗎?
發(fā)表于 04-03 17:54
processor : 0
hart: 1
isa : rv64imafdc
mmu : sv39
uarch: sifive,u74-mc
mvendorid : 0x489
marchid
發(fā)表于 08-03 23:12
uCLinux是針對(duì)控制領(lǐng)域的嵌入式linux操作系統(tǒng),它從Linux 2.0/2.4內(nèi)核派生而來,沿襲了主流Linux的絕大部分特性。適合不具備內(nèi)存管理單元(MMU)的微處理器/微控
發(fā)表于 11-04 10:42
?2次下載
CPU通過地址來訪問內(nèi)存中的單元,地址有虛擬地址和物理地址之分,如果CPU沒有MMU(Memory Management Unit,內(nèi)存管理單元),或者有MMU但沒有啟用,CPU核在取指令或訪問內(nèi)存
發(fā)表于 03-28 11:05
?14次下載
本文講解Linux內(nèi)核虛擬內(nèi)存管理中的mmu_gather操作,看看它是如何保證刷tlb和釋放物理頁的順序的,又是如何將更多的頁面聚集起來統(tǒng)一釋放的。
發(fā)表于 05-20 14:37
?1832次閱讀
MMU(Memory Management Unit,內(nèi)存管理單元)是一種硬件模塊,用于在CPU和內(nèi)存之間實(shí)現(xiàn)虛擬內(nèi)存管理。
發(fā)表于 04-23 10:48
?802次閱讀
在內(nèi)存管理方面,MMU可以通過頁面表(Page Table)實(shí)現(xiàn)虛擬內(nèi)存管理。頁面表是一種數(shù)據(jù)結(jié)構(gòu),記錄了每個(gè)虛擬頁面和其對(duì)應(yīng)的物理頁面之間的映射關(guān)系。
發(fā)表于 10-09 11:27
?1152次閱讀
嵌入式Linux運(yùn)行一定需要MMU嗎?為什么需要MMU?? 嵌入式Linux運(yùn)行需要MMU,這是因?yàn)?b class='flag-5'>MM
發(fā)表于 10-29 16:28
?631次閱讀
頁命中、缺頁 (1)頁命中 ? a) 處理器要對(duì)虛擬地址VA進(jìn)行訪問。 ? b) MMU的TLB沒有命中,通過TWU遍歷主存頁表中的PTEA(PTE地址)。 ? c) 主存向MMU返回PTE
發(fā)表于 11-26 16:19
?821次閱讀
評(píng)論