Memory 什么';当操作系统启动时,内存管理的类型是分页还是不分页?

Memory 什么';当操作系统启动时,内存管理的类型是分页还是不分页?,memory,memory-management,linux-kernel,x86,kernel,Memory,Memory Management,Linux Kernel,X86,Kernel,当操作系统启动时,内存管理的类型是什么,分页还是不分页?也就是说,控制分页打开/关闭的cr0寄存器中的值是多少。我猜在内核初始化开始时分页是关闭的,否则,所有内存访问都将无效。分页是在内核初始化期间设置的,内核空间的所有映射都必须设置为有效。我说的对吗?我假设“操作系统启动时”是指“处理器开机时”。在这种情况下,这显然取决于处理器的体系结构 对于x86,分页由CR0寄存器中的位31控制(如果设置了该位,则启用分页)。摘自第3卷第8.1.1节。“复位后的处理器状态”,可以看到复位后CR0中的值为0

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

我假设“操作系统启动时”是指“处理器开机时”。在这种情况下,这显然取决于处理器的体系结构

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

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

“CR0”

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


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