内存嗅探流程
1 概述
内存嗅探是 Axvisor 启动过程中最关键的环节之一,它负责识别、分类和组织物理内存资源。在虚拟化环境中,准确的内存嗅探不仅关系到 Hypervisor 自身的稳定运行,更直接影响后续虚拟机的内存分配和管理。本节将深入分析 Axvisor 内存嗅探的完整实现原理和关键机制。
1.1 平台选择机制:dyn-plat 特性的作用
1.1.1 特性定义与传递
在 kernel/Cargo.toml 中定义了 dyn-plat 特性:
[features]
dyn-plat = ["axstd/myplat", "axstd/driver-dyn", "axruntime/driver-dyn"]
1.1.2 条件编译逻辑
在 axhal/src/lib.rs 中,使用 cfg_if! 宏进行平台选择:
cfg_if::cfg_if! {
if #[cfg(feature = "myplat")] {
// 当启用 myplat 特性时,跳过默认平台选择
// link the custom platform crate in your application.
} else if #[cfg(target_os = "none")] {
// 标准平台选择(当 myplat 未启用时)
#[cfg(target_arch = "x86_64")]
extern crate axplat_x86_pc;
#[cfg(target_arch = "aarch64")]
extern crate axplat_aarch64_qemu_virt;
#[cfg(target_arch = "riscv64")]
extern crate axplat_riscv64_qemu_virt;
#[cfg(target_arch = "loongarch64")]
extern crate axplat_loongarch64_qemu_virt;
} else {
// 测试环境使用 dummy 平台
mod dummy;
}
}
关键机制说明:
- 特性传递链:
dyn-plat→axstd/myplat→axhal/myplat - 条件编译控制:当
myplat特性启用时,编译器会忽略默认平台选择 - 外部注入机制:通过
axruntime的extern crate axplat_aarch64_dyn注入具体实现 - 链接时绑定:Rust 链接器在链接时将
axplat接口调用绑定到具体平台实现
这种设计使得 axhal 既保持了接口的稳定性,又支持灵活的平台扩展。