Assembly 将内核重定为高内存

Assembly 将内核重定为高内存,assembly,kernel,Assembly,Kernel,如何将自定义操作系统内核重设为高内存,使地址0xABCD变为0xFFFFFF800000ABCD?(内核已经由引导加载程序从地址0x100000开始加载。)我当前的解决方案在未映射的地址上生成页面错误,这会升级为三重错误,因为IDT尚未初始化。不要显式移动内核 相反,使用分页。首先,在低内存中设置所有内容,然后启用分页并将内核映射(而不是移动)到高内存。不涉及字节复制。这有什么关系?如果你想要一个有地图的操作系统,只要把它放在自己方便的地方就行了。如果它已经加载了实际地址001xxxxx,并设置

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

不要显式移动内核


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

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