Dvorak
Dvorak

Dvorak Chen

memory-management


(deprecated)使用 Rust 为 RISC-V 设置页表

文章详细描述了RISC-V处理器中页表实现的过程,包括页表结构的设计、satp寄存器的设置以及内存管理机制。在页表实现部分,文章介绍了如何通过根页表、二级页表和三级页表构建多级页表,并处理恒等映射(Identical Mapping)和使用特定帧(UseFrame)的两种映射类型。PTE(Page Table Entry)的构造方法也得到详细说明,包括物理页号(PPN)、权限标志(如V、R、X)以及有效位(Valid Bit)的组合方式。此外,文章还讨论了如何通过分配器获取新页表项,并处理三级页表的特殊情况。在satp寄存器设置部分,文章解释了如何构造satp_token,包括模式位(Mode)、ASID和物理页号的组合,并通过汇编指令将satp值写入寄存器,同时执行sfence.vma指令刷新TLB缓存。最后,文章总结了使用RootPageTable的优势,如更高效的资源管理和内存释放机制。--DeepSeek

Rust RISC-V riscv memory-management page-tables pte-construction satp-register rust-memory

Rust 编写裸机代码使用链接器脚本

文章介绍了如何通过自定义链接器脚本来控制程序内存布局,并在Rust代码中访问这些内存区域。作者展示了如何在链接器脚本中定义各段(如.text、.rodata、.data和.bss)的起始和结束符号,以及如何在Rust代码中使用extern "C"声明这些外部符号。通过示例代码,文章演示了如何打印特定内存区域的地址范围,并验证了全局变量的位置确实在定义的.bss段内。此外,文章还讨论了几个关键点:.bss段用于存储可变数据,局部变量不会出现在.bss段中,Rust会优化未使用的变量等。--DeepSeek

Rust RISC-V memory-management linker-script rust-programming section-alignment symbol-table print-implementation

Rust 和经典语言在习惯上的差异

本文介绍了作者在学习Rust编程语言过程中遇到的一些挑战。首先,文章讨论了Rust的所有权模型、借用检查器和并发机制带来的复杂性,以及如何通过单元结构体(struct D;)和实现trait来提供更好的抽象。接着,文章重点描述了Rust中常见的“包装”(wrap)模式,例如使用Box<dyn trait>来进行动态分配,Arc<Mutex<Box<dyn D>>>来处理多线程共享数据,并解释了这些包装的原因和必要性。最后,作者提到可以使用type关键字定义自定义类型名称以简化复杂的嵌套结构。文章总结了Rust编程中一些基础但重要的概念,尽管这些内容在熟练后看起来简单,但对于初学者来说可能需要较长时间适应。--DeepSeek

Rust memory-management Ownership System Smart Pointers Concurrency Thread Safety

  • 1