当前位置: 技术问答>linux和unix
linux的内核能够直接映射的最大RAM容量?
来源: 互联网 发布时间:2016-07-19
本文导语: 为什么说linux内核能够直接映射的最大RAM容量为1GB-128MB=896MB? | 应该跟页目录/页表的最大尺寸和页表本身占用的空间有关吧。 如果采用大页面选项编译内核的话,不知道结果会不会不同。 ...
为什么说linux内核能够直接映射的最大RAM容量为1GB-128MB=896MB?
|
应该跟页目录/页表的最大尺寸和页表本身占用的空间有关吧。
如果采用大页面选项编译内核的话,不知道结果会不会不同。
如果采用大页面选项编译内核的话,不知道结果会不会不同。
|
内核( 在 x86 体系上, 在缺省配置里) 在用户空间和内核之间划分 4-G 虚拟地址; 在 2 个上下文中使用同一套映射. 一个典型的划分分出 3 GB 给用户空间, 和 1 GB 给内核空间. [47]内核的代码和数据结构必须要适合这个空间, 但是内核地址空间最大的消费者是物理内存的虚拟映射. 内核不能直接操作没有映射到内核的地址空间. 内核, 换句话说, 需要它自己的虚拟地址给任何它必须直接接触的内存. 因此, 多年来, 能够被内核处理的的最大量的物理内存是能够映射到虚拟地址的内核部分的数量, 减去内核代码自身需要的空间. 结果, 基于 x86 的 Linux 系统可以工作在最多稍小于 1 GB 物理内存.
为应对更多内存的商业压力而不破坏 32-位 应用和系统的兼容性, 处理器制造商已经增加了"地址扩展"特性到他们的产品中. 结果, 在许多情况下, 即便 32-位 处理器也能够寻址多于 4GB 物理内存. 但是, 多少内存可被直接用逻辑地址映射的限制还存在. 这样内存的最低部分(上到 1 或 2 GB, 根据硬件和内核配置)有逻辑地址; 剩下的(高内存)没有. 在存取一个特定高地址页之前, 内核必须建立一个明确的虚拟映射来使这个也在内核地址空间可用. 因此, 许多内核数据结构必须放在低内存; 高内存用作被保留为用户进程页.
为应对更多内存的商业压力而不破坏 32-位 应用和系统的兼容性, 处理器制造商已经增加了"地址扩展"特性到他们的产品中. 结果, 在许多情况下, 即便 32-位 处理器也能够寻址多于 4GB 物理内存. 但是, 多少内存可被直接用逻辑地址映射的限制还存在. 这样内存的最低部分(上到 1 或 2 GB, 根据硬件和内核配置)有逻辑地址; 剩下的(高内存)没有. 在存取一个特定高地址页之前, 内核必须建立一个明确的虚拟映射来使这个也在内核地址空间可用. 因此, 许多内核数据结构必须放在低内存; 高内存用作被保留为用户进程页.
|
我觉得896M应该是一个实验得到的数据吧
剩下的128M留着做动态映射
当物理内存的大于896时,内核空间的1G是不能一一对应的
剩下的128M留着做动态映射
当物理内存的大于896时,内核空间的1G是不能一一对应的
|
规定的,内核空间1GB,直接映射896M,留下128M动态映射