在操作系统设计内核被最总是映射到高虚拟存储器地址,从而获得上部存储器部分的控制。下面的空间用于在用户空间中运行的应用程序,如“Linux 3/1 virtual address split”中的出色方法所述。内核高存储器
我想知道的是,为什么是这样做的设计决定或为什么内核不使用内存的下半部分?这对我来说不是很清楚,也可能是我监督了一些事情。
编辑:这个问题关于虚拟地址而不是物理。
在操作系统设计内核被最总是映射到高虚拟存储器地址,从而获得上部存储器部分的控制。下面的空间用于在用户空间中运行的应用程序,如“Linux 3/1 virtual address split”中的出色方法所述。内核高存储器
我想知道的是,为什么是这样做的设计决定或为什么内核不使用内存的下半部分?这对我来说不是很清楚,也可能是我监督了一些事情。
编辑:这个问题关于虚拟地址而不是物理。
的这种设计/原因的一些优点:
可能有其他的原因,通常是特定于平台。在某些平台上,这两种选择可能几乎没有区别。而在另一些地方,首选的内核位置可能在较低的虚拟地址。细节很重要。
好吧,这对我来说更有意义。但我现在的理解是这样的:内核实现虚拟内存管理,从而为所有用户应用程序提供在地址0x0处重新定位的能力。如果是这样,那么当内核是控制内存的唯一实例时,内核在内存中的位置并不重要。说得通? – 2012-01-02 08:23:36
不要忘记,在内核执行任何重定位之前,编译器必须生成可重定位的二进制文件。如果每个应用程序都可以以〜0开始,则二进制文件中的代码可以更简单,二进制文件可能不包含任何重定位信息,编译器可以更简单,也可以做更少的工作。 – 2012-01-02 08:31:56
我意识到这一点,但这并不影响编译内核。如果内核是用重定位信息编译并实现虚拟内存管理,那么每个应用程序都可以以〜0开始,但是(在我看来)内核的“位置”并不重要。 – 2012-01-02 08:34:01
只是一个猜测:一个约定,使得更容易记住哪部分内存应该被用户空间代码保护 – ren 2011-12-30 23:21:04
好吧,但是内核的内存总是有限的,或者用户空间内存可能被浪费了。所以,当内核需要额外的内存时(例如加载模块),它可以分配和设置特定的权限来保护它(当启用分页时)。 – 2011-12-31 07:43:06