John P Asked: 2018-10-05 07:06:32 +0800 CST2018-10-05 07:06:32 +0800 CST 2018-10-05 07:06:32 +0800 CST MMU 在 Unix/Linux 内核中吗?还是只是在具有自己内存的硬件设备中? 772 所以我一直认为 MMU 是 unix 内核的一部分,它将地址转换为物理地址,但在 MMU wiki 页面中,它说它是一种通常有自己内存的计算机硬件,但该页面并没有过多地谈论 Unix/Linux 操作系统 所以我很困惑,是否所有的翻译都发生在硬件和内核中不做任何翻译?基本上操作系统对真实的物理地址一无所知? 我问的是基于 Unix 的操作系统,但是如果您了解其他操作系统以及 Windows 等,或者它在现代计算机中是通用的,请告诉我,谢谢。 kernel memory 2 个回答 Voted Best Answer Stephen Kitt 2018-10-05T07:48:07+08:002018-10-05T07:48:07+08:00 MMU(内存管理单元)是计算机系统的物理组件,通常是 CPU 的一部分(但不一定)。它将虚拟地址(在 x86 世界中也称为线性地址)转换为物理地址;它还可以强制执行内存访问控制、缓存控制和总线仲裁。它通常没有自己的内存,它依赖于系统主内存中的数据来运行。 MMU 通过使用存储在诸如页表之类的数据结构中的信息来执行这种转换;这些指定哪些物理地址范围对应于线性地址范围(如果有的话——一个页面可以“不存在”)。页表由内核设置,内核决定映射应该是什么——因此物理地址的最终权威是内核,但它总是在 MMU 的帮助下运行。换句话说,CPU 总是在线性地址上运行,这些地址由 MMU 转换为物理地址,但是内核知道这些转换并编程 MMU 来执行它们。 用户空间进程忽略了所有这些,并且(通常)不知道与它们使用的线性地址相对应的物理地址,并且通常也无法访问映射。在某些情况下,物理映射会泄漏,但这些通常被认为是安全漏洞并很快得到解决。但是,在 Linux 中,具有足够权限的进程可以在/proc/<pid>/pagemap. 对于 Linux,请参阅内存管理文档,尤其是检查页表部分。 Andy Dalton 2018-10-05T07:15:04+08:002018-10-05T07:15:04+08:00 内存管理单元 (MMU) 是将虚拟地址转换为物理地址的硬件。例如,当 CPU 发出要读取的地址时,MMU 将该虚拟地址转换为物理地址,然后将物理地址发送到内存总线。 MMU 由操作系统编程。操作系统管理内存(物理和虚拟)并管理虚拟到物理的映射。
MMU(内存管理单元)是计算机系统的物理组件,通常是 CPU 的一部分(但不一定)。它将虚拟地址(在 x86 世界中也称为线性地址)转换为物理地址;它还可以强制执行内存访问控制、缓存控制和总线仲裁。它通常没有自己的内存,它依赖于系统主内存中的数据来运行。
MMU 通过使用存储在诸如页表之类的数据结构中的信息来执行这种转换;这些指定哪些物理地址范围对应于线性地址范围(如果有的话——一个页面可以“不存在”)。页表由内核设置,内核决定映射应该是什么——因此物理地址的最终权威是内核,但它总是在 MMU 的帮助下运行。换句话说,CPU 总是在线性地址上运行,这些地址由 MMU 转换为物理地址,但是内核知道这些转换并编程 MMU 来执行它们。
用户空间进程忽略了所有这些,并且(通常)不知道与它们使用的线性地址相对应的物理地址,并且通常也无法访问映射。在某些情况下,物理映射会泄漏,但这些通常被认为是安全漏洞并很快得到解决。但是,在 Linux 中,具有足够权限的进程可以在
/proc/<pid>/pagemap
.对于 Linux,请参阅内存管理文档,尤其是检查页表部分。
内存管理单元 (MMU) 是将虚拟地址转换为物理地址的硬件。例如,当 CPU 发出要读取的地址时,MMU 将该虚拟地址转换为物理地址,然后将物理地址发送到内存总线。
MMU 由操作系统编程。操作系统管理内存(物理和虚拟)并管理虚拟到物理的映射。