Skip to content

lab3

satp

satp(Supervisor Address Translation and Protection Register)是 RISC-V 中控制虚拟内存分页模式的寄存器

 63      60 59                  44 43                              0
┌──────────┬──────────────────────┬─────────────────────────────────┐
│   MODE   │         ASID         │                PPN              │
└──────────┴──────────────────────┴─────────────────────────────────┘

fence

    # need a fence to ensure the new translations are in use
<div markdown="1" style="margin-top: -30px; font-size: 0.75em; opacity: 0.7;">
:material-circle-edit-outline: 约 246 个字 :fontawesome-solid-code: 9 行代码 :material-clock-time-two-outline: 预计阅读时间 1 分钟
</div>

    # 这行汇编代码 sfence.vma zero, zero 是 RISC-V 架构中的指令,用于刷新虚拟内存地址的翻译缓存(TLB)
    #    sfence.vma:这是 RISC-V 的指令,表示 "Supervisor Fence for Virtual Memory Address"
    #    zero, zero:这两个操作数都是寄存器 zero,表示刷新所有的 TLB 条目
    # 具体作用是:
    #    刷新整个 TLB,确保所有的虚拟地址到物理地址的映射都被重新加载。这在修改页表或切换页表时是必要的,以确保新的映射生效。
    # 这行代码通常在修改页表之后执行,以确保新的页表映射被正确应用
    sfence.vma zero, zero   

在计算机体系结构中,fence(屏障)是一种指令,用于确保在其之前的所有内存操作在其之后的内存操作之前完成。它用于同步处理器和内存之间的操作顺序,确保内存访问的正确性和一致性。

在 RISC-V 架构中,fence 指令用于控制内存访问的顺序。具体来说,fence 指令可以确保在其之前的所有内存读写操作在其之后的内存读写操作之前完成。

例如,sfence.vma 是一种特定类型的 fence 指令,用于刷新虚拟内存地址的翻译缓存(TLB),确保新的页表映射生效。

总结来说,fence 指令用于确保内存操作的顺序,避免由于乱序执行导致的数据不一致问题。