当启用 Supervisory 访问(Enable-Supervisory-access,ENS)为 1 时,允许使用此 process_id 请求supervisory 权限,否则该事务将被视为不支持的请求。 当ENS 为 1 时,SUM(允许 Supervisor User Memory 访问)位会修改 supervisor 权限事务访问虚拟内存的权限。当 SUM 为 0 时,不允许对 PTE 中 U 位设置为 1 的...
页表刷新指令是sfence.vm [vaddr],而不是sfence.vma [vaddr][, asid]; 不存在单独的页异常,即页表读取异常(Load page fault)和页表保存/原子操作异常(Store/AMO page fault),而是合并到读取权限错误(Load access fault)和保存/原子操作权限错误(Store/AMO access fault)中。 此外,针对操作系统开发,两版本的差...
• When a virtual page is accessed and the A bit is clear, or is written and the D bit is clear, the corresponding bit(s) are set in the PTE. The PTE update is atomic with respect to other accesses to the PTE, and memory access will not occur until the PTE update is visible g...
可写、可运行,当这三位都是 0 时,表明该 PTE 指向了下一层页表,其为非叶 PTE ,否则就是叶 PTE;User 位指示了该页是否可以被用户模式访问;Global 指示了全局映射,存在于所有的地址空间中;Access 位指示了该页最近是否被读、写、取;Dirty 位指示了虚拟页最近是否被写过。
当trap 陷入到 M-mode 时,mtval会被置零或者被写入与异常相关的信息来辅助处理 trap。当触发硬件断点、地址未对齐、access fault、page fault 时,mtval记录的是引发这些问题的虚拟地址。 stastus# 与中断相关的字段是 SIE、SPIE、SPP。 SPP 位指示处理器进入 supervisor 模式之前的特权级别。当发生陷阱时,如果该...
shadow_page = kvm_mmu_get_page(vcpu, table_gfn, addr, level-1, direct, access, sptep); index = kvm_page_table_hashfn(gfn); hlist_for_each_entry_safe if (sp->gfn == gfn) {……} else {sp = kvm_mmu_alloc_page(vcpu, parent_pte);} ...
将它们写入存储设备 (如磁盘),并将它们的PTE标记为无效。 如果应用程序读取或写入被换出的页面,则CPU将触发页面错误。 然后内核可以检查故障地址。 如果该地址属于磁盘上的页面,则内核分配物理内存页面,将该页面从磁盘读取到该内存,将PTE更新为有效并引用该内存,然后恢复应用程序。
PTE_W控制是否允许指令写入到页面。 PTE_X控制CPU是否可以将页面内容解释为指令并执行它们。 PTE_U控制用户模式下的指令是否被允许访问页面; 如果没有设置PTE_U,PTE只能在管理模式下使用。 图3.2显示了它是如何工作的。标志和所有其他与页面硬件相关的结构在(*kernel/riscv.h*)中定义。
捕获异常:在RISC-V的异常处理程序中捕获Load Access Fault。 记录关键信息:记录触发异常的PC值、访问的内存地址以及当前的处理器模式。 检查内存映射和权限: 使用CSR寄存器(如mstatus、satp等)检查当前的内存映射和权限设置。 如果使用了虚拟内存管理,检查页表项(PTE)以确保访问的内存区域是可读的。 审查PMP配置: ...
The rvfi_mem_paddr field carries the physical address of the memory access. The rvfi_mem_pte[0123] fields carry the values of the page table entries used to convert rvfi_mem_addr to rvfi_mem_paddr. Unused rvfi_mem_pte[0123] fields must always be set to zero....