1

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

4

2 回答 2

2

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

对于 x86,分页由 CR0 寄存器中的第 31 位控制(如果设置了该位,则启用分页)。来自英特尔的软件开发人员手册,第 3 卷,第 8.1.1 节。“Processor State After Reset”,可以看到复位后CR0中的值为0x60000010,表示分页被禁用。

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

'CR0'</p>

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

于 2012-04-12T10:02:37.757 回答
1

x86 CPU 在复位后以实地址模式开始执行。操作系统需要先将 CPU 切换到保护模式,然后才能启用页面转换。您不能在从实模式切换到保护模式的同时启用它(您会获得#GP),也不能在实模式中启用它。因此,在 x86 上,操作系统首先在禁用页面转换的情况下运行(除非它之前已由操作系统引导加载程序启用,这种情况很少见),然后在它准备好时启用它(即已构建页表并加载 CR3)。

于 2012-04-12T10:07:52.563 回答