Io 理解PCI地址映射
我正在研究PC架构,觉得我没有掌握PCI地址的基本原理 PCI中有三个地址空间:内存、输入输出端口和配置。我知道CPU可以使用不同的命令区分内存和端口,但PCI会发生什么?总线中有几个命令(读/写这些空间、中断处理等)。我认为,在读取内存空间时,我们将地址设置为物理RAM地址,但在阅读了一些手册之后,我们似乎将地址设置为内部设备的内存Io 理解PCI地址映射,io,cpu-architecture,pci,peripherals,pci-bus,Io,Cpu Architecture,Pci,Peripherals,Pci Bus,我正在研究PC架构,觉得我没有掌握PCI地址的基本原理 PCI中有三个地址空间:内存、输入输出端口和配置。我知道CPU可以使用不同的命令区分内存和端口,但PCI会发生什么?总线中有几个命令(读/写这些空间、中断处理等)。我认为,在读取内存空间时,我们将地址设置为物理RAM地址,但在阅读了一些手册之后,我们似乎将地址设置为内部设备的内存 为什么要使用内存映射?这是否意味着当一些程序写入映射到某个PCI设备的RAM地址时,它实际上会写入设备内存?为什么不使用标准IO端口写入 如果需要,如何访问真实内
不要将内存地址视为“RAM地址”。RAM占用的内存空间只占CPU总地址空间的一小部分。剩余的内存地址空间用于MMIO,包括PCI设备。处理器将对这些地址的任何CPU访问路由到适当的设备寄存器 Peter关于使用MMIO的原因的回答是正确的:I/O指令是串行化的,而CPU内的内存访问是高度优化的,因此访问内存空间的开销比访问I/O空间的开销小得多
设备对内存空间的访问(DMA)的路由方式与CPU访问的路由方式类似——如果访问在RAM的内存地址空间范围内,则访问路由到RAM,如果访问在另一个设备的地址空间范围内,则访问路由到该设备。具有自己内存的PCI端点设备(在端点设备本身上)除了PCI规范定义的256字节配置空间之外。必须将该内存放入系统地址空间,以便允许系统访问它。有两种方法可以将该内存放入系统地址空间-
注:PCI-SIG的PCI Express规范(PCI-特殊利益集团)建议不要实现IO地址空间,在未来的PCIe版本/规格中,IO地址空间可能会被完全删除。内存映射I/O更有效,因为CPU可以将其管道化。
in
/out
指令正在序列化,IIRC。我没有经验对其余问题给出一个好的答案打开。RAM占用的内存空间只占CPU总地址空间的一小部分,除非您使用RAM(例如128TiB或256TiB)完全加载服务器,在这种情况下,您可以使用DRAM填充所有物理地址空间,最多可达该CPU中实现的物理地址位数。页表格式最多可支持52位物理地址(),但当前CPU的实现刚好满足可用DRAM密度的要求。请注意,in
和out
并没有正式归类为“序列化”,但它们具有相同的效果:像锁定
ed指令一样的完整内存屏障,以及直到“数据阶段”之后才能开始执行的后续指令。PCI是否类似于DMA?它计算出地址,然后将数据发送到端点。因此,当主机写入映射到端点的地址时,PCI根复合体会识别该地址,并将数据路由到端点中适当的偏移地址?