Memory management 内存映射I/O地址和RAM地址是否相关?

Memory management 内存映射I/O地址和RAM地址是否相关?,memory-management,arm,memory-mapping,Memory Management,Arm,Memory Mapping,我读了类似问题的答案,但我仍然感到困惑 假设一个系统连接4GB RAM,并连接一些内存映射外设,那么我可以使用的唯一RAM空间是4GB减去内存映射空间量 例如,GPIO映射到地址0x500,那么是否无法使用RAM地址0x500?如果MMU存在并启用,我相信这是可能的(希望如此),但我不知道。您标记的arm和其他处理器不一定不同 通常,会为内存映射I/O、gpio、uart、nvic等留出一定比例的地址空间。使用arm,您将拥有一些内部地址空间,而芯片供应商无法将其连接到axi/amba总线(se

我读了类似问题的答案,但我仍然感到困惑

假设一个系统连接4GB RAM,并连接一些内存映射外设,那么我可以使用的唯一RAM空间是4GB减去内存映射空间量


例如,GPIO映射到地址0x500,那么是否无法使用RAM地址0x500?如果MMU存在并启用,我相信这是可能的(希望如此),但我不知道。您标记的arm和其他处理器不一定不同

通常,会为内存映射I/O、gpio、uart、nvic等留出一定比例的地址空间。使用arm,您将拥有一些内部地址空间,而芯片供应商无法将其连接到axi/amba总线(ses)

所以,如果你想使用一个32位地址总线的arm,那么连接4GB平面是浪费时间。您当然可以连接更多(我有一个24GB的arm11),但这不是线性的,您必须有一个类似PCIe hsa的地址方案,其中您可以将一个地址空间窗口指向一个地址空间之外的地址空间(请再次思考PCIe,但不要想象他们试图在x86中呈现的幻觉)

但你把这件事搞得太复杂了。尤其是在手臂上,所有这些都有记录。你有一个核心你是一个芯片供应商你买了这个核心它有一个地址总线(见amba/axi文档)你连接到地址总线如果它是cortex-m他们有一些关于ram和rom放置位置的指南,请不要在这里碍事。对于全尺寸的arms,它是最公平的游戏,您提供了核心的基址,其中映射了某些外围设备(考虑nvic、定时器等。与cortex-m不同,在cortex-m中,systick定时器的基址在设计中是硬编码的,而您将基址输入内核的地址空间中,在该地址空间中,内部项使用外设或类似的信号/总线名)除此之外,如何划分地址空间是芯片供应商的心血来潮。arm通常可以在两个地址中的一个启动,但当然,您可以有任意多个地址层,并且每个层都有一个到该地址空间的转换/转换。这包括外围设备、内存(ram/rom/flash)usb、pcie等地址空间等

因此,它可能就像一台pc,pcie窗口在同一个空间拿走了一或两个gig的ram,而你只是失去了内存,但在这种情况下,你的想法有点错误,因为这些是不同的地址空间/层。有些pc曾经64位占主导地位,而32位并没有完全消失,但现在我们可以默认为64位,并允许pcie窗口位于内存上方,而不是在内存上切割一个孔

购买arm或mips这样的核心系统的好处在于,如果不完全按照自己的喜好设计地址空间,就可以在一定程度上实现,不必遵守任何规定,等等


您的问题没有一个答案,您需要指定特定的芯片和板(以及该系统的版本)如果这是一个真正的、可用的产品,除非有一个窗口地址方案,否则他们不会介意。人们喜欢认为段偏移量不好,但它仍然存在于大多数可用的系统中,我们只是不能再使用这些术语,我们不总是有段寄存器,但我们仍然有地址空间被分割并加窗。MMU可以更容易地分割地址空间,但使其看起来是线性的。

你是对的。对于使用MMU的32位系统来说,这甚至是一个问题,因为地址空间是32位的,所以一次只能寻址4GB内存。通常MMU可以使用LPAE,因此对于单个进程,只能映射4GB内存,但对于整个系统而言,数量更大。此外,参考Q/A是以x86为中心的答案。您当然可以寻址比要映射的地址位更多的空间,这是非常常见的。但这是整个系统设计的一部分,您需要指定芯片、电路板和所需的版本,以给出此问题的真实答案。任何可用的设计你将在一个地址有一个项目,是的,这是真的。有公共汽车和其他地方,你抛出一个请求,第一个回答wins,但这是设计的一部分。当你谈论地址解码器时,它们是分层的,负责该地址的最近的一层将拥有该事务,然后它也不会通过将事务转移到下一层。