物理内存布局探测
物理内存布局探测
计算机启动后,需要知道当前机器上实际的物理内存布局。一般是通过BIOS的INT 15
中断来获取,根据参数(%eax
)的不同,分为三种方式:0xe820,0x801和0x88。
e820方式
e820方式用内存范围描述符(Address Range Descriptor)格式来保存获得的一段内存布局。
字段 | 大小 | 说明 |
---|---|---|
address | 8字节 | 内存块基地址 |
length | 8字节 | 内存大小 |
type | 4字节 | 内存类型 |
内存类型代码如下。
代码 | 说明 |
---|---|
01 | 系统可用内存 |
02 | 保留,不可用(例如硬件映射的ROM) |
03 | ACPI Reclaim内存(usable by OS after reading ACPI tables) |
04 | ACPI NVS内存(OS is required to save this memory between NVS sessions) |
其他 | 未定义,不可用 |
e820方式中断的调用参数如下。
参数 | 说明 |
---|---|
%eax |
值为e820h,INT 15 的中断调用参数 |
%edx |
值为534D4150h(即4个ASCII字符“SMAP”) |
%ebx |
如果是第一次调用或内存区域扫描完毕,则为0。 如果不是,则存放上次调用之后的计数值 |
%ecx |
保存内存范围描述符的内存大小,应该大于等于20字节 |
es:di |
用来保存内存范围描述符结构的缓冲区 |
此中断的返回值如下。
返回值 | 说明 |
---|---|
eflags的CF位 | 若INT 15 中断执行成功,则不置位,否则置位 |
%eax |
534D4150h ("SMAP") |
es:di |
指向保存内存范围描述符的缓冲区,此时缓冲区内的数据已由BIOS填写完毕 |
%ebx |
下一个地址范围描述符的计数地址 |
%ecx |
返回BIOS往ES:DI处写的地址范围描述符的字节大小 |
%ah |
失败时保存出错代码 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2020-12-11 vector内部是移动元素还是拷贝元素