现在的位置: 首页 > 综合 > 正文

高端内存与低端内存

2013年02月23日 ⁄ 综合 ⁄ 共 652字 ⁄ 字号 评论关闭

首先给出它们的定义:

低端内存:存在逻辑地址的内存。

高端内存:是指那些不存在逻辑地址的内存。

在装有大量内存的32位系统中,内核逻辑地址和内核虚拟地址的不同将非常突出。由于使用32位地址最多同时能在4GB内存中寻址,因此直到最近,32位系统的linux仍被限制使用少于4GB的内存。

内核将4GB的虚拟地址空间分割为用户空间和内核空间,在二者的上下文中使用同样的映射。一个典型的分割是将3GB分配给用户空间,1GB分配给内核空间。内核代码和数据结构必需与这样的空间相匹配,但是占用内核地址空间最大的部分是物理内存的虚拟映射。内核无法直接操作没有映射到内核地址空间的内存。换句话说,内核对任何内存的访问,都需要使用自己的虚拟地址(内核仅有1GB地址空间)。因此许多年来,由内核所能处理的最大物理内存数量,就是将映射至虚拟地址内核部分的大小(1GB),再减去内核代码自身所占用的空间。因此,基于x86的linux系统所能使用的最大物理内存,会比1GB小一点。

为了使32位的处理器可以在大于4GB的物理空间寻址,处理器增添了“地址扩展”特性。然而有多少内存可以直接映射到逻辑地址的限制依然存在。只有内存的低端部分拥有逻辑地址,剩余部分(高端内存)没有逻辑地址。因此在访问特定的高端内存页前,内核必需建立明确的虚拟映射,使该页可在内核地址空间中被访问。因此许多内核数据结构必须被放置在低端内存中;而高端内存更趋向于为用户空间进程页所保留。(用户空间有3GB的地址空间,难道没有可以用来做直接映射的逻辑地址吗?????)

抱歉!评论已关闭.