我失去了一些东西的时候到了解需要highmem到的地址超过1gb。谁能指出我去哪儿错了?谢谢!

什么我知道:

  • 1GB的一个进程的'虚拟存储器(高记忆的区域)是保留的内核的操作。用户的空间可以利用剩余的3GB。这是3/1分裂。

  • 虚拟存储设虚拟图(续)虚拟存储页理的网页(RAM)。

什么我不知道:

  • 什么行动使用核心的虚拟存储器?我想的东西喜欢kmalloc(...)在核心空间使用核虚拟存储器。

  • 我认为4G的RAM可以使用根据这一方案。我不明白为什么内核1GB虚拟空间的限制因素时解决的物理空间。这是我的理解打破了。请提供意见。

我已经阅读本(http://kerneltrap.org/node/2450),这是很大的。但它并不完全解决我的问题我喜欢的。

有帮助吗?

解决方案

原因是核心的虚拟空间是一个限制因素可用的物理存储器,因为核心需求访问所有的物理存储的方式,以及它访问的物理存是通过核心的虚拟地址。核不使用特殊指令,允许直接访问的物理存储地点--它已设立网页的表项目对于任何物理范围,它想要交谈。

在"老式"的方案,内核定的东西,因此,每一个过程的页表映射的虚拟地址 0xC00000000xFFFFFFFF 直接身体的地址 0x000000000x3FFFFFFF (这些页面被标记,以便他们只能在环0-内核的模式)。这些都是"核心的虚拟地址".根据这项计划,核能直接读写任何物理存储器的位置没有必要摆弄MMU的改变映射。

下HIGHMEM方案,映射核心的虚拟地址的物理地址不是固定的部件的物理存储器的映射出的核心地址的虚拟空间作为核心需求的访问,存储器。这就允许更多的物理存储器被使用,但在成本具有不断变化的虚拟对身体的映射,这是一个相当昂贵的运作。

其他提示

射1GB为核心,在每个过程允许程序转换到核心模式,但没有同执行方面开关。反应系统,例如电话 read(), mmap() 和其他人然后可以适当地处理在呼吁进程'的地址空间。

如果空间核不保留在每一个进程,切换到"核心模式",在执行用户之间的空间代码会比较昂贵,并可能无法利用虚拟的地址映通过硬件MMU(存储管理单元)的系统的电话服务。

系统运行的一个32位的核心有超过1gb的物理存储器,都能够分配的物理存储地点 ZONE_HIGHMEM (大致上述的1GB马克),这可能需要的核心跳火圈的某些业务与他们进行互动。此外太平洋建筑工程师有限公司(物理的地址扩展),延伸这个问题通过允许高达64十亿字节的物理存储器,减少的比率的存储器内的1GB地址的物理存储器,以区域分配 ZONE_HIGHMEM.

  1. 例如电话系统使用核心的空间。
  2. 你可以有64十亿字节的物理ram,但是32位的平台处理器可以访问,只有4gb因为32位的虚拟处理的问题。实际上,你可以有1GB RAM和3gb的交换和虚拟解决将使它看起来像你有4G.64位的平台虚拟解决几乎是无限的。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top