操作系统启动,分页或无分页时,内存管理的类型是什么?

时间:2012-04-12 09:40:50

标签: memory memory-management linux-kernel x86 kernel

启动操作系统时,内存管理,分页或无分页的类型是什么?这就是说cr0寄存器中控制分页开/关的值是什么。我猜在内核初始化开始时分页是关闭的,否则,所有内存访问都将无效。在内核初始化期间设置分页,并且必须将内核空间的所有映射设置为有效。我是对的吗?

2 个答案:

答案 0 :(得分:2)

我认为“当操作系统启动时”是指“处理器启动时”。在这种情况下,它显然取决于处理器的架构。

对于x86,分页由CR0寄存器中的位31控制(如果该位置1,则启用分页)。来自Intel's Software Developer Manual,第3卷,第8.1.1节。 “复位后的处理器状态”,您可以看到复位后CR0中的值为0x60000010,这意味着禁用了分页。

如果您想知道在内核启动之前是否启用了分页,那么它取决于引导加载程序的功能。应该禁用分页的Multiboot规范(例如,由GRUB实现)dictates

  

“CR0”

     

必须清除位31(PG)。必须设置位0(PE)。其他位都未定义。

答案 1 :(得分:1)

x86 CPU在重置后以实地址模式开始执行。操作系统需要先将CPU切换到保护模式,然后再启用页面转换。您无法在实模式下切换到保护模式(您获得#GP),也无法在实模式下启用它。因此,在x86上,操作系统首先运行,禁用页面转换(除非之前已由OS引导加载程序启用,这很少见),然后在它准备就绪时启用它(即构建了页表并加载了CR3)。