在32位和64位系统中如何使用kmalloc()和vmalloc()?

时间:2019-05-29 06:35:43

标签: c memory-management linux-kernel kmalloc vmalloc

体系结构:X86,Linux

我经历了与kmalloc()vmalloc()相关的几个主题,我知道它们之间的基本区别,但仍存在一些疑问。我需要您的帮助以了解基本知识。

因此,我们知道在32位系统中,虚拟地址空间在用户和内核之间分配。高1GB的内存地址分配给内核,低3GB的内存分配给用户空间。

请纠正我,我在这里错了:

  1. 因此,从1GB内存中将896MB 1:1映射(物理上连续)到内核逻辑地址,并使用128MB来访问高内存地址,这意味着通过将其映射到内存中来访问896 MB以上的物理RAM。使用vmalloc()使用128MB? (让我们考虑有2GB的RAM)

  2. 如果在点1只有1GB的物理RAM,将会发生什么情况。896MB是内核逻辑地址和通过kmalloc()实现的物理地址之间的1:1映射。那么128MB的用途是什么,为什么我们再需要vmalloc()?因此,可以说如果我们有1GB的RAM完全可以通过内核逻辑地址访问,那么这意味着只有当线程/进程请求的内存量可以在物理上连续的地址中分配时,才有可能。而且,如果没有可用的物理连续内存,那么在那种情况下分配的内存就不会是物理连续的,因此我们需要使用vmalloc()将其映射到128MB的空间中并通过那里进行访问?

  3. 使用64位系统会发生什么? kmalloc()vmalloc()是否都可以拥有巨大的地址空间并可以访问整个RAM,这是真的吗?

0 个答案:

没有答案