内核逻辑地址空间、内核虚拟地址空间和用户虚拟地址空间有啥区别?

Posted

技术标签:

【中文标题】内核逻辑地址空间、内核虚拟地址空间和用户虚拟地址空间有啥区别?【英文标题】:What is the difference between kernel logicla address space , kernel virtual address space and user virtual address space内核逻辑地址空间、内核虚拟地址空间和用户虚拟地址空间有什么区别? 【发布时间】:2019-07-03 01:09:42 【问题描述】:

让我把我的理解。

假设我们有一个系统的 32 位内存地址空间。所以一个进程可以访问 4GB 范围内的任何内存

如果我们系统中的 RAM 为 4GB,内核会将其划分为 1:3 。 1GB 用于内核,其余 3GB 用于用户空间进程。

用户空间进程将仅获得该 3GB 内存中的系统内存访问权限,并且它获得的地址由页表决定。

内核逻辑地址是仅为内核保留的 1GB(大约 ~896MB)内存。这是正确的吗?

内核虚拟地址是剩余的内存,即 104MB + 3GB,也可以分配给用户空间。这是正确的吗?

用户虚拟地址是用户空间进程生成的地址,其对应的内存将从内核为用户空间进程保留的3GB中分配。

让我知道我的上述理解是否正确?如果不行,请您详细解释一下内核逻辑地址空间、内核虚拟地址空间和用户虚拟地址空间的区别。

【问题讨论】:

每个问题帖子一个问题,请。您是否看过that question 关于Linux 内核中虚拟地址和逻辑地址之间的差异?有什么不清楚的地方? 你的“理解”是不正确的,因为它将虚拟内存和物理内存混为一谈,无法区分两者。例如。 "memory" 的 1:3 划分适用于虚拟内存,而不是您提到的物理内存(即 RAM)。 【参考方案1】:

您的理解是对与错的混合体,我将尝试指出其中一些:

    在 32 位机器中,我们并不总是受到 4GB 可寻址 RAM 的限制,请查看此问题以获取更多详细信息:link 内存是用户空间程序的抽象,他们认为它是一个连续的大块内存,但是内核通过一些名为 MMU 的硬件支持来管理这个抽象,将用户空间程序中使用的虚拟空间映射到一个如果激活了交换,则实际物理地址甚至是硬盘中的某个块。

    内核实际上可以访问物理内存,为了管理上面提到的抽象,它也可以使用这个抽象,这取决于内核的设计者。

    关于虚拟寻址和逻辑寻址的区别,查看这个答案:link

【讨论】:

以上是关于内核逻辑地址空间、内核虚拟地址空间和用户虚拟地址空间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

虚拟地址空间相关知识网络(段页存储 -- MMU -- 虚拟地址 -- 内核区 -- 用户区)

Linux内核空间-理解高端内存

Linux 内核 内存管理虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )

Linux驱动虚拟地址和物理地址的映射

Linux驱动虚拟地址和物理地址的映射

虚拟地址空间:用户空间和内核空间 物理内存管理:伙伴系统以及slab分配器