【发布时间】:2011-10-18 21:52:16
【问题描述】:
我正在关注 Gorman 的虚拟内存管理书。
有一节是关于内核表页初始化的,据说分为两个阶段,bootstrapping 和 finalizing。
这是关于引导阶段的内容。
汇编函数startup_32()负责启用分页单元 拱/i386/内核/head.S.虽然 vmlinuz 中的所有正常内核代码都已编译 基地址为 PAGE_OFFSET + 1MiB,内核实际上是从开始加载的 在内存的第一兆字节(0x00100000)。使用第一兆字节 某些设备用于与 BIOS 通信并被跳过。 引导程序 此文件中的代码通过减去 __PAGE_OFFSET 将 1MiB 视为其基地址 在启用寻呼单元之前的任何地址。因此在寻呼单元启用之前 启用后,必须建立一个页表映射来转换 8MiB 物理内存到虚拟地址 PAGE_OFFSET。
为什么要减去 __PAGE_OFFEST?出于什么目的?
为什么我们必须在启用分页单元之前进行减法?内核虚拟地址映射到物理内存地址不是一直都是用减法吗?
为什么是 8MB?
谢谢,
【问题讨论】:
标签: linux memory-management kernel