Joh*_*n P 5 kernel memory virtual-memory
所以我一直认为 MMU 是将地址转换为物理地址的 unix 内核的一部分,但在 MMU wiki 页面中,它说它是一个通常有自己内存的计算机硬件,但该页面并没有太多谈论 Unix/Linux 操作系统
所以我很困惑,是否所有的翻译都发生在硬件和内核中不做任何翻译?基本上操作系统对真实的物理地址一无所知?
我问的是基于 Unix 的操作系统,但如果您了解其他操作系统以及 Windows,或者它是否在现代计算机中是通用的,请告诉我,谢谢。
MMU(内存管理单元)是计算机系统的物理组件,通常是 CPU 的一部分(但不一定)。它将虚拟地址(在 x86 世界中也称为线性地址)转换为物理地址;它还可以强制执行内存访问控制、缓存控制和总线仲裁。它通常没有自己的内存,它依赖于系统主内存中的数据进行操作。
MMU 通过使用存储在数据结构(如页表)中的信息来执行此转换;这些指定哪些物理地址范围对应于线性地址范围(如果有的话——一个页面可以“不存在”)。页表由内核设置,内核决定映射应该是什么——所以物理地址的最终权限是内核,但它总是在 MMU 的帮助下运行。换句话说,CPU 总是在线性地址上运行,线性地址由 MMU 转换为物理地址,但内核知道这些转换并编程 MMU 来执行它们。
用户空间进程对这一切一无所知,并且(通常)不知道与它们使用的线性地址相对应的物理地址,并且通常也无法访问映射。在某些情况下,物理映射会泄漏,但这些通常被认为是安全漏洞并很快得到解决。但是,在 Linux 中,具有足够权限的进程可以在/proc/<pid>/pagemap
.
对于 Linux,请参阅内存管理文档,特别是有关检查页表的部分。
归档时间: |
|
查看次数: |
5149 次 |
最近记录: |