|
|
1
3
(我的x86-fu有点弱。我会添加一些标签,这样如果我在任何地方说谎,其他人都可以(希望)纠正我。) 物理地址在真实模式和保护模式下是相同的。唯一的区别在于如何从指令中指定的地址(偏移量)获取物理地址:
通过
看 here ,BIOS ROM似乎出现在物理地址0x000F0000-0x000FFFFF。要在分页保护模式下获取该内存,必须通过设置正确的 page table 条目。假设4 KB页面(通常情况下),映射整个范围应该需要16((0xFFFFF-0xF0000+1)/4096)个条目。
要了解Linux内核是如何工作的,可以查看例如。
以下命令(来自例如。 this answer )将转储内存范围0xC0000-0xFFFFF(根据上面链接的内存映射,这意味着它也包括视频BIOS):
1024*768=0xC0000,1024*(768+256)-1=0xFFFFF,这给出了预期的物理内存范围。
追踪一下事情,
注意,顺便说一句,BIOS例程不会在保护模式下工作。他们假设CPU以实模式运行。 |
|
2
3
对于Linux x86 32位,第一个
内核本身以1MB及以上的物理地址加载,从而使第一个MB空闲。例如,第一个MB用于ISA设备所需的DMA缓冲区,因为它们使用8237 DMA控制器,只能映射到这些地址。
因此,从虚拟内存地址读取
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
|
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 1 年前 |
|
|
Marco · PyCharm Linux系统文件上os.stat异常 1 年前 |