【问题标题】:Rebasing Kernel into High Memory将内核重新定位到高内存
【发布时间】:2014-01-13 22:40:30
【问题描述】:

如何将自定义操作系统内核变基到高内存,以使地址0xABCD 变为0xFFFFFF800000ABCD? (内核已经被引导加载程序从地址0x100000 开始加载。)我当前的解决方案会在未映射的地址上生成页面错误,这会升级为三重错误,因为 IDT 尚未初始化。

【问题讨论】:

  • 为什么重要?如果您要使用带有地图的操作系统,只需将其放在方便的地方即可。如果它已经加载了真实地址 001xxxxx,并设置了一个映射,将物理 001xxxxx 映射到虚拟 01xxxxxx,那么它应该能够在没有任何其他恶作剧的情况下进行真实到虚拟的转换。如果你想在虚拟 0xFFFFFF 复制操作系统页面......你需要做的就是修改内存映射,但是一旦你到了这么远,我看不出有什么意义。

标签: assembly kernel


【解决方案1】:

不要显式移动内核。

改为使用分页。首先,在低内存中设置所有内容,然后启用分页并将内核映射(而不是移动)高内存。不涉及字节复制。

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多