内核逻辑地址空间、内核虚拟地址空间和用户虚拟地址空间有啥区别?
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 -- 虚拟地址 -- 内核区 -- 用户区)