ucore 物理内存探测 lab2 附录A&B

探测物理内存分布的大小和方法

bootloader 增加的工作

bootasm.S 中对应了 probe_memory 到 finish_probe 的部分。

通过BIOS 中断 获取内存可调用参数为 e820h 的INT 15h BIOS中断。

BIOS 通过 系统内存映射 地址描述符(Address Range Descrptor)格式来表示系统物理内存布局。

1054453-20180512010243557-2032473012.png

(Values for System Memory Map address type) 内存类型及对用的参数
01h memory, available to OS
02h reserved, not available (e.g. system ROM, memory-mapped device)
03h ACPI Reclaim Memory (usable by OS after reading ACPI tables)
04h ACPI NVS Memory (OS is required to save this memory between NVS sessions)
other not defined yet -- treat as Reserved

INT 15h BIOS 终端的详细调用参数
1054453-20180512010558928-1767957947.png

中断的返回值:

1054453-20180512010635753-1458488089.png

通过调用 INT 15h BIOS 中断, 递增di的值 (20 (系统内存物理布局描述符的)的倍数) 让BIOS 帮我们找到一个一个的内存布局entry 放入到一个保存地址范围描述符结构的缓冲区中

结构定义在 memlayout.h 中

附录B : 具体实现
probe_memory:
// 对0x80000 中的32位单元清零,给位于 0x8000 处的
// sturct e820map 成员变量nr_map 清零

略: 就是不断探测如果eflag cf 位为0 表示还需要进一步探测。
在探测的循环中递增 di(20) 递增 0x8000 出的nr_map
addw $20 %di
incl 0x80000

转载于:https://www.cnblogs.com/sfzyk/p/9027233.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值