Linux kernel 128MB虚拟地址空间是否足以访问巨大的高内存?

Linux kernel 128MB虚拟地址空间是否足以访问巨大的高内存?,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我了解Linux内存管理。下图显示了虚拟地址空间和物理地址空间之间的映射 我的意思是128MB的虚拟地址spcae是否足以访问高内存 128MB的虚拟地址空间是否足以访问高内存 对 起初,32位处理器甚至无法“思考”大于4GB的地址。实际上,添加超过4GB的RAM是不可能的 更糟糕的是,Linux需要始终在虚拟内存中映射。因此,32位应用程序只能使用底层3GB的虚拟内存 后来,英特尔为处理器添加了一种特殊的方式来处理更多的RAM。它的虚拟内存映射器中有额外的位,因此您有4GB的虚拟地址,但有6

我了解Linux内存管理。下图显示了虚拟地址空间和物理地址空间之间的映射

我的意思是128MB的虚拟地址spcae是否足以访问高内存

128MB的虚拟地址空间是否足以访问高内存

起初,32位处理器甚至无法“思考”大于4GB的地址。实际上,添加超过4GB的RAM是不可能的

更糟糕的是,Linux需要始终在虚拟内存中映射。因此,32位应用程序只能使用底层3GB的虚拟内存

后来,英特尔为处理器添加了一种特殊的方式来处理更多的RAM。它的虚拟内存映射器中有额外的位,因此您有4GB的虚拟地址,但有64GB的物理地址

因此,即使没有高内存,多个进程也可以“全部”使用您的RAM,即使每个进程可以看到3GB的RAM


那么什么是高内存呢?它是对数据进行瞬态映射的地方。它存储诸如缓存磁盘块之类的东西,这些磁盘块“可能”以后需要,但目前没有被任何特定进程使用。当有人需要它们时,内核可以找到它们。

这是一个合理的问题,但您可以从思考内核为什么需要额外的内存开始,如果在64位领域不能更好地处理这种情况。我认为额外的内存将被内核空间和用户空间使用(内核也会通过页面错误为用户空间请求分配内存。正确吗?)。我的理解是,虚拟地址空间将被拆分为3G(用户空间)/1G(内核空间)。1G内核空间将被划分为896MB+128MB。用户空间地址将如何映射到物理地址,用户空间虚拟地址将如何映射到内核空间128MB地址,然后使用kmap映射到物理地址?虚拟地址空间不受物理内存大小的限制。您好,用户3693586。我还在尝试理解内核虚拟地址和高内存的概念。你的数字来自哪本书或其他来源?我想看看这些来源是否能帮助我更好地理解。谢谢。你好,蒂姆,我想我是在初步理解的基础上使用power point创建了这个图。我曾经提到过Linux内核开发和Linux设备驱动r书籍。我已经浏览了,链接。