From 6e1dc816c2df1ebe667c81d2c12a4821f9bd1f0b Mon Sep 17 00:00:00 2001 From: hzc1998 <2323168280@qq.com> Date: Mon, 11 Apr 2022 22:28:29 +0800 Subject: [PATCH] feat(*): update mmu --- .../port/riscv/figures/sv39-full.png | Bin 0 -> 141865 bytes programing-manual/port/riscv/mmu-sv39.md | 151 ++++++++++++++++++ programing-manual/port/riscv/riscv.md | 145 +---------------- 3 files changed, 152 insertions(+), 144 deletions(-) create mode 100644 programing-manual/port/riscv/figures/sv39-full.png create mode 100644 programing-manual/port/riscv/mmu-sv39.md diff --git a/programing-manual/port/riscv/figures/sv39-full.png b/programing-manual/port/riscv/figures/sv39-full.png new file mode 100644 index 0000000000000000000000000000000000000000..5678542eb3eefe7f421d84f8f5ba2ecf1e7496ec GIT binary patch literal 141865 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 literal 0 HcmV?d00001 diff --git a/programing-manual/port/riscv/mmu-sv39.md b/programing-manual/port/riscv/mmu-sv39.md new file mode 100644 index 0000000..361b1d3 --- /dev/null +++ b/programing-manual/port/riscv/mmu-sv39.md @@ -0,0 +1,151 @@ +# MMU-sv39 映射的实现 + +`NX_HalMapPage` 是映射虚拟地址,会自动分配物理地址并映射页面。 + +`NX_HalMapPageWithPhy` 映射虚拟地址,但是会指定物理地址,就不用自动分配物理地址了。 + +`NX_HalUnmapPage` 解除地址映射,解除后就不能访问了。 + +`NX_HalVir2Phy` 可以通过虚拟地址找到其映射的物理地址。 + +`NX_HalSetPageTable` 设置页表的地址到硬件寄存器中,当访问虚拟地址的时候,会根据设置的页表进行地址转换。 + +`NX_HalGetPageTable` 可以获取页表的地址。 + +`NX_HalEnable` 是使能 `MMU` ,所有地址都变成虚拟地址了。 + +* 文件:src/arch/riscv64/port/mmu.c + +```c +NX_PRIVATE void *NX_HalMapPage(NX_Mmu *mmu, NX_Addr virAddr, NX_Size size, NX_UArch attr) +{ + NX_ASSERT(mmu); + if (!attr) + { + return NX_NULL; + } + + virAddr = virAddr & NX_PAGE_ADDR_MASK; + size = NX_PAGE_ALIGNUP(size); + + NX_UArch level = NX_IRQ_SaveLevel(); + void *addr = __MapPage(mmu, virAddr, size, attr); + NX_IRQ_RestoreLevel(level); + return addr; +} + +NX_PRIVATE void *NX_HalMapPageWithPhy(NX_Mmu *mmu, NX_Addr virAddr, NX_Addr phyAddr, NX_Size size, NX_UArch attr) +{ + NX_ASSERT(mmu); + if (!attr) + { + return NX_NULL; + } + + virAddr = virAddr & NX_PAGE_ADDR_MASK; + phyAddr = phyAddr & NX_PAGE_ADDR_MASK; + size = NX_PAGE_ALIGNUP(size); + + NX_UArch level = NX_IRQ_SaveLevel(); + void *addr = __MapPageWithPhy(mmu, virAddr, phyAddr, size, attr); + NX_IRQ_RestoreLevel(level); + return addr; +} + +NX_PRIVATE NX_Error NX_HalUnmapPage(NX_Mmu *mmu, NX_Addr virAddr, NX_Size size) +{ + NX_ASSERT(mmu); + + virAddr = virAddr & NX_PAGE_ADDR_MASK; + size = NX_PAGE_ALIGNUP(size); + + NX_Addr addrStart = virAddr; + NX_Addr addrEnd = virAddr + size - 1; + NX_Size pages = GET_PF_ID(addrEnd) - GET_PF_ID(addrStart) + 1; + + NX_UArch level = NX_IRQ_SaveLevel(); + NX_Error err = __UnmapPage(mmu, virAddr, pages); + NX_IRQ_RestoreLevel(level); + return err; +} + +NX_PRIVATE void *NX_HalVir2Phy(NX_Mmu *mmu, NX_Addr virAddr) +{ + NX_ASSERT(mmu); + + NX_Addr pagePhy; + NX_Addr pageOffset; + + MMU_PDE *pageTable = (MMU_PDE *)mmu->table; + + MMU_PTE *pte = PageWalk(pageTable, virAddr, NX_False); + if (pte == NX_NULL) + { + NX_PANIC("vir2phy walk fault!"); + } + + if (!PTE_USED(*pte)) + { + NX_PANIC("vir2phy pte not used!"); + } + + pagePhy = PTE2PADDR(*pte); + pageOffset = virAddr % NX_PAGE_SIZE; + return (void *)(pagePhy + pageOffset); +} + +NX_PRIVATE void NX_HalSetPageTable(NX_Addr addr) +{ + WriteCSR(satp, MAKE_SATP(addr)); + MMU_FlushTLB(); +} + +NX_PRIVATE NX_Addr NX_HalGetPageTable(void) +{ + NX_Addr addr = ReadCSR(satp); + return (NX_Addr)GET_ADDR_FROM_SATP(addr); +} + +NX_PRIVATE void NX_HalEnable(void) +{ + MMU_FlushTLB(); +} + +NX_INTERFACE struct NX_MmuOps NX_MmuOpsInterface = +{ + .setPageTable = NX_HalSetPageTable, + .getPageTable = NX_HalGetPageTable, + .enable = NX_HalEnable, + .mapPage = NX_HalMapPage, + .mapPageWithPhy = NX_HalMapPageWithPhy, + .unmapPage = NX_HalUnmapPage, + .vir2Phy = NX_HalVir2Phy, +}; +``` + +监管者模式的页表的地址是由地址转换寄存器 `SATP` 保存的,其格式如下: +![地址转换](figures/satp.png) + +具体字段的解析如下: + +* Mode - MMU 地址翻译模式 + +|Value |Name |Description| +| ------- | ---------- | ---------- | +|0 |Bare |No translation or protection| +|1-7| - |Reserved| +|8 |Sv39 |Page-based 39-bit virtual addressing| +|9 |Sv48 |Page-based 48-bit virtual addressing| +|10 |Sv57 |Reserved for page-based 57-bit virtual addressing| +|11 |Sv64 |Reserved for page-based 64-bit virtual addressing| +|12-15| - |Reserved| + +当 Mode 为 0 时,MMU 关闭。 + +* ASID – 当前 ASID。表示当前程序的 ASID 号。 +* PPN – 硬件回填根 PPN。第一级硬件回填使用的 PPN (Phsical Page Number)。 + +接下来,我们给出 SV39 地址转换的全过程图示(来源于 MIT 6.828 课程)来介绍多级页表原理的介绍: +![sv39-full](figures/sv39-full.png) + + diff --git a/programing-manual/port/riscv/riscv.md b/programing-manual/port/riscv/riscv.md index a065fbc..868efaa 100644 --- a/programing-manual/port/riscv/riscv.md +++ b/programing-manual/port/riscv/riscv.md @@ -66,28 +66,6 @@ RISC-V的中断管理由处理器核局部中断CLINT(CoreLocalInterrupt)和 RISC-V的MMU支持多种模式,有Sv32/Sv39/Sv48/Sv57/Sv64等。不同的模式映射的页面等级,页面大小是有差异的。在64位处理器种最常用的是Sv39,它是3级4KB页面大小映射。 -监管者模式的页表的地址是由地址转换寄存器 `SATP` 保存的,其格式如下: -![地址转换](figures/satp.png) - -具体字段的解析如下: - -* Mode - MMU 地址翻译模式 - -|Value |Name |Description| -| ------- | ---------- | ---------- | -|0 |Bare |No translation or protection| -|1-7| - |Reserved| -|8 |Sv39 |Page-based 39-bit virtual addressing| -|9 |Sv48 |Page-based 48-bit virtual addressing| -|10 |Sv57 |Reserved for page-based 57-bit virtual addressing| -|11 |Sv64 |Reserved for page-based 64-bit virtual addressing| -|12-15| - |Reserved| - -当 Mode 为 0 时,MMU 关闭。 - -* ASID – 当前 ASID。表示当前程序的 ASID 号。 -* PPN – 硬件回填根 PPN。第一级硬件回填使用的 PPN (Phsical Page Number)。 - ## 三、代码移植 移植一个新的平台需要实现如下内容: @@ -862,128 +840,7 @@ NX_INTERFACE NX_IRQ_Controller NX_IRQ_ControllerInterface = 目前支持的是mmu-sv39,3级页表,页表和物理页都是4kb大小。 -`NX_HalMapPage` 是映射虚拟地址,会自动分配物理地址并映射页面。 - -`NX_HalMapPageWithPhy` 映射虚拟地址,但是会指定物理地址,就不用自动分配物理地址了。 - -`NX_HalUnmapPage` 解除地址映射,解除后就不能访问了。 - -`NX_HalVir2Phy` 可以通过虚拟地址找到其映射的物理地址。 - -`NX_HalSetPageTable` 设置页表的地址到硬件寄存器中,当访问虚拟地址的时候,会根据设置的页表进行地址转换。 - -`NX_HalGetPageTable` 可以获取页表的地址。 - -`NX_HalEnable` 是使能 `MMU` ,所有地址都变成虚拟地址了。 - -* 文件:src/arch/riscv64/port/mmu.c - -```c -NX_PRIVATE void *NX_HalMapPage(NX_Mmu *mmu, NX_Addr virAddr, NX_Size size, NX_UArch attr) -{ - NX_ASSERT(mmu); - if (!attr) - { - return NX_NULL; - } - - virAddr = virAddr & NX_PAGE_ADDR_MASK; - size = NX_PAGE_ALIGNUP(size); - - NX_UArch level = NX_IRQ_SaveLevel(); - void *addr = __MapPage(mmu, virAddr, size, attr); - NX_IRQ_RestoreLevel(level); - return addr; -} - -NX_PRIVATE void *NX_HalMapPageWithPhy(NX_Mmu *mmu, NX_Addr virAddr, NX_Addr phyAddr, NX_Size size, NX_UArch attr) -{ - NX_ASSERT(mmu); - if (!attr) - { - return NX_NULL; - } - - virAddr = virAddr & NX_PAGE_ADDR_MASK; - phyAddr = phyAddr & NX_PAGE_ADDR_MASK; - size = NX_PAGE_ALIGNUP(size); - - NX_UArch level = NX_IRQ_SaveLevel(); - void *addr = __MapPageWithPhy(mmu, virAddr, phyAddr, size, attr); - NX_IRQ_RestoreLevel(level); - return addr; -} - -NX_PRIVATE NX_Error NX_HalUnmapPage(NX_Mmu *mmu, NX_Addr virAddr, NX_Size size) -{ - NX_ASSERT(mmu); - - virAddr = virAddr & NX_PAGE_ADDR_MASK; - size = NX_PAGE_ALIGNUP(size); - - NX_Addr addrStart = virAddr; - NX_Addr addrEnd = virAddr + size - 1; - NX_Size pages = GET_PF_ID(addrEnd) - GET_PF_ID(addrStart) + 1; - - NX_UArch level = NX_IRQ_SaveLevel(); - NX_Error err = __UnmapPage(mmu, virAddr, pages); - NX_IRQ_RestoreLevel(level); - return err; -} - -NX_PRIVATE void *NX_HalVir2Phy(NX_Mmu *mmu, NX_Addr virAddr) -{ - NX_ASSERT(mmu); - - NX_Addr pagePhy; - NX_Addr pageOffset; - - MMU_PDE *pageTable = (MMU_PDE *)mmu->table; - - MMU_PTE *pte = PageWalk(pageTable, virAddr, NX_False); - if (pte == NX_NULL) - { - NX_PANIC("vir2phy walk fault!"); - } - - if (!PTE_USED(*pte)) - { - NX_PANIC("vir2phy pte not used!"); - } - - pagePhy = PTE2PADDR(*pte); - pageOffset = virAddr % NX_PAGE_SIZE; - return (void *)(pagePhy + pageOffset); -} - -NX_PRIVATE void NX_HalSetPageTable(NX_Addr addr) -{ - WriteCSR(satp, MAKE_SATP(addr)); - MMU_FlushTLB(); -} - -NX_PRIVATE NX_Addr NX_HalGetPageTable(void) -{ - NX_Addr addr = ReadCSR(satp); - return (NX_Addr)GET_ADDR_FROM_SATP(addr); -} - -NX_PRIVATE void NX_HalEnable(void) -{ - MMU_FlushTLB(); -} - -NX_INTERFACE struct NX_MmuOps NX_MmuOpsInterface = -{ - .setPageTable = NX_HalSetPageTable, - .getPageTable = NX_HalGetPageTable, - .enable = NX_HalEnable, - .mapPage = NX_HalMapPage, - .mapPageWithPhy = NX_HalMapPageWithPhy, - .unmapPage = NX_HalUnmapPage, - .vir2Phy = NX_HalVir2Phy, -}; -``` +由于篇幅较大,故单独提出来讲解:[点击访问](mmu-sv39.md) ### 9. 进程管理 -- Gitee