CPU如何知道在哪里查找给定的物理内存地址?

时间:2016-03-24 03:14:02

标签: cpu memory-address bios

如果我理解正确,无论何时打开CPU,它都会跳转到制造商硬连线的默认物理内存地址并开始执行那里存在的二进制代码。当然,在PC中,默认位置映射到包含BIOS的ROM。

假设我有一个安装了RAM的系统,CPU如何知道它应该在包含BIOS而不是RAM的地址的ROM芯片中搜索该特定地址?

主板和RAM的制造商是否有一些标准或合同,他们同意硬件的内存地址永远不会重叠?

2 个答案:

答案 0 :(得分:0)

我认为您会经常看到此图:

enter image description here

它总结了几件事(我假设您熟悉“物理地址”和“虚拟地址”的定义:

  1. CPU中的所有程序和连线始终在它们之间的“虚拟地址”之间进行通信和交换。您将永远不会遇到任何“物理地址”。

  2. 要寻址CPU外部的任何DRAM,您将需要“物理地址”。

  3. 相同的“虚拟地址”,可以映射到不同的“物理地址”。例如,以下说明:

加载eax,(虚拟地址_XXXX)(从内存加载到EAX)

相同的汇编指令,但是在不同的进程下运行,将导致访问物理内存的不同部分。 (这是通过pagetable + MMU完成的)

  1. 从虚拟地址到物理地址的转换将需要MMU。 CPU外部检测到的所有电信号始终处于物理地址级别。因此,所有硬件设备(例如内存)都必须识别这一点。

enter image description here

https://www.slideserve.com/stacie/computer-architecture-memory-management-units

因此,首先,您在“标题”中的问题并不完全正确-CPU不知道并看到任何“物理地址”,这是硬件设备。但是所有内容都由MMU(或IOMMU)翻译(可以由TLB缓存)。

请注意,某些CPU没有MMU。因此,“物理地址”与“虚拟地址”的值相同。

答案 1 :(得分:-1)

让我们一步一步地快速采取行动: 当您重置PC时,它实际上从BIOS运行代码。 Bios代码是由主板制造商编写的用于启动电路板的代码。然后在Bios完成其工作之后。 MBR;主引导记录,运行它是你安装操作系统,比如Windows或Linux时写在硬盘头(地址0)的一段代码。 这段代码负责跳转到你的Windows驱动器启动它,这称为bootloader。所以,

BIOS(非易失性存储器) - > MBR(HDD) - > OS

如果您考虑一下,您会发现在BIOS中有一个启动顺序的选项,以确定哪个MBR应该从HDD,DVD等读取

了解有关BIOS的更多信息: https://en.wikipedia.org/wiki/BIOS

了解有关MBR的更多信息: https://en.wikipedia.org/wiki/Master_boot_record