Memory 如何在保护模式下更改第一个MB内存布局?

Memory 如何在保护模式下更改第一个MB内存布局?,memory,memory-management,x86,osdev,protected-mode,Memory,Memory Management,X86,Osdev,Protected Mode,据我所知,在x86实模式下,第一个MB内存布局如下所示: 一旦跳转到保护模式,内存布局是否会改变?我知道我们可以通过相同的地址访问视频内存,就像我们在真实模式下那样,但是其他地区呢?我们能覆盖它们吗?我想我们不再需要IVT和引导扇区了。但我对其他人不太确定。简短回答:不 详细回答:内存的布局不会因您所处的模式而改变。然而,当不是实模式时,该区域中的大部分内存与您无关,可以使用。但是,您必须知道,该区域中的许多内存可能是IO映射的,因此,最好加载内核>1M 2M是最佳位置,而忽略前1M内存 一旦实

据我所知,在x86实模式下,第一个MB内存布局如下所示:

一旦跳转到保护模式,内存布局是否会改变?我知道我们可以通过相同的地址访问视频内存,就像我们在真实模式下那样,但是其他地区呢?我们能覆盖它们吗?我想我们不再需要IVT和引导扇区了。但我对其他人不太确定。

简短回答:不

详细回答:内存的布局不会因您所处的模式而改变。然而,当不是实模式时,该区域中的大部分内存与您无关,可以使用。但是,您必须知道,该区域中的许多内存可能是IO映射的,因此,最好加载内核>1M 2M是最佳位置,而忽略前1M内存


一旦实现分页和页面分配,您将需要保留第一个MB的内存,因此不允许分配。

进入保护模式后,您不需要IVT。您可以创建一个受保护模式IDT,它不必位于内存底部。覆盖实模式IVT的一个缺点是,如果您在传统BIOS系统上,您将无法切换回实模式并调用BIOS中断等。请勿将0xa0000和1MB标记之间的EBDA区域或内存用作程序/数据空间。请注意,EBDA通常为1KB,但并不总是如此。在旧版BIOS系统上,0x413处的BDA包含一个字val,表示从内存底部到EBDA开头的大小(KB)。在许多系统上,is 639具有更精确的低1MiB可用的映射。您不需要保留整个1MiB。你可以在1MiB只是杯水车薪的机器上实现这一点,但如果你愿意,该空间的某些部分可以安全使用,而且肯定不在ISA孔中,也不用于SMM或其他任何用途。我认为有各种接口可以查询BIOS中的内存区域。