CPU如何知道在哪里查找给定的物理内存地址?
2025-11-11 22:37:36
世界杯大力神杯
我想你会经常看到这个图表:
它总结了几件事(我假设您熟悉“物理地址”和“虚拟地址”的定义:
处理器内部的所有程序和线路,总是在它们自己的“虚拟地址”之间进行通信和交换。你永远不会遇到任何“物理地址”。CPU以外的任何内存要寻址,你将需要"physical addresses".The“相同的”虚拟地址“,可以映射到不同的”“。例如,以下指令:
加载eax,(virtual_address_XXXX) (从内存加载到EAX)
相同的汇编指令,但运行在不同的进程下,将导致访问物理内存的不同部分。(这是通过pagetable +MMU完成的)
从虚拟地址到物理地址的
转换将需要内存管理单元。在CPU外部检测到的任何电信号始终处于物理地址级别。因此所有硬件设备(例如内存)都必须认识到这一点。
https://www.slideserve.com/stacie/computer-architecture-memory-management-units
因此,首先,你在“标题”中的问题并不是真正正确的- CPU不知道并看到任何“物理地址”,它是硬件设备。但全部由MMU (或IOMMU)转换(可由TLB缓存)。
请注意,某些CPU没有MMU。因此“物理地址”和“虚拟地址”也是相同的值。