Io &引用;从I/O端口读取一个字节;vs.“;从内存地址读取一个字节;?

Io &引用;从I/O端口读取一个字节;vs.“;从内存地址读取一个字节;?,io,cpu-architecture,dma,instruction-set,machine-instruction,Io,Cpu Architecture,Dma,Instruction Set,Machine Instruction,为了简化讨论,我假设只有一个执行线程。以下只是我的胡思乱想: 1,如果CPU从内存地址读取一个字节,那么它可以从同一地址重复读取相同的值 2,如果CPU从端口重复读取一个字节,则每次可能读取不同的值 我认为这两种方法的区别在于端口控制器可以在每次读取操作后自动更新端口上的值 然而,我找不到任何明确支持我的陈述的教科书 我说的对吗?IO指令应该与硬件交互。因此,IO指令通常不(也不应该)符合内存语义。相反,语义取决于它们与之通信的硬件(以及相应的协议)。不要将IO空间视为内存 内存指令可以访问内存

为了简化讨论,我假设只有一个执行线程。以下只是我的胡思乱想:

1,如果CPU从内存地址读取一个字节,那么它可以从同一地址重复读取相同的值

2,如果CPU从端口重复读取一个字节,则每次可能读取不同的值

我认为这两种方法的区别在于端口控制器可以在每次读取操作后自动更新端口上的值

然而,我找不到任何明确支持我的陈述的教科书


我说的对吗?

IO指令应该与硬件交互。因此,IO指令通常不(也不应该)符合内存语义。相反,语义取决于它们与之通信的硬件(以及相应的协议)。不要将IO空间视为内存

内存指令可以访问内存以及内存映射IO。当它们访问内存映射IO时,它们的行为类似于IO指令。只有当它们访问真实内存时,才会应用内存语义。这意味着,例如,对内存位置的读取总是返回写入该位置的最后一个值

CPU必须区分用于内存映射IO和实际内存的地址空间。例如,来自内存映射IO的数据不得存储在缓存中,内存指令不得推测性地访问内存映射IO位置。因此,访问内存映射的IO空间要比访问实际内存慢得多

为了区分内存映射IO和实际内存,处理器通常使用,但还有其他机制,如

最后,可能还有其他硬件能够写入内存。例如具有多核和/或多核的系统。这些系统需要相互了解,并使用一种方法来维护正确的内存语义。当然,这还需要区分IO映射内存和真实内存


结论是,真实记忆的行为也类似于记忆,并且符合记忆语义。IO和内存映射IO可以以任何方式运行。

IO指令应该与硬件交互。因此,IO指令通常不(也不应该)符合内存语义。相反,语义取决于它们与之通信的硬件(以及相应的协议)。不要将IO空间视为内存

内存指令可以访问内存以及内存映射IO。当它们访问内存映射IO时,它们的行为类似于IO指令。只有当它们访问真实内存时,才会应用内存语义。这意味着,例如,对内存位置的读取总是返回写入该位置的最后一个值

CPU必须区分用于内存映射IO和实际内存的地址空间。例如,来自内存映射IO的数据不得存储在缓存中,内存指令不得推测性地访问内存映射IO位置。因此,访问内存映射的IO空间要比访问实际内存慢得多

为了区分内存映射IO和实际内存,处理器通常使用,但还有其他机制,如

最后,可能还有其他硬件能够写入内存。例如具有多核和/或多核的系统。这些系统需要相互了解,并使用一种方法来维护正确的内存语义。当然,这还需要区分IO映射内存和真实内存


结论是,真实记忆的行为也类似于记忆,并且符合记忆语义。IO和内存映射IO可以以任何方式运行。

CPU也可以从内存地址读取不同的值,因为一些内存地址可以映射到RAM以外的其他地址,这取决于硬件的设计方式(就像I/O线一样,可以映射到几乎任何东西)。谢谢你,tigrou。您提到的情况在本次讨论中被排除在外。另外:在硬件级别,端口和内存之间没有概念上的区别:两者都是通过地址和控制总线发送电信号来访问的。当您使用输入/输出指令读取或写入端口时,区别在于CPU将一个引脚设置为高(或逻辑状态“1”),这意味着“嘿,RAM,这不是为您,而是为I/O设备”。回答您的问题:1)这方面没有保证,具体取决于硬件的设计方式。若地址映射到RAM:是(很幸运),否则视情况而定。2) 是的,非常感谢你,蒂格罗。您的解释很有帮助。CPU也可以从内存地址读取不同的值,因为一些内存地址可以映射到RAM以外的其他对象,这取决于硬件的设计方式(就像I/O线一样,可以映射到几乎任何对象)。谢谢您,tigrou。您提到的情况在本次讨论中被排除在外。另外:在硬件级别,端口和内存之间没有概念上的区别:两者都是通过地址和控制总线发送电信号来访问的。当您使用输入/输出指令读取或写入端口时,区别在于CPU将一个引脚设置为高(或逻辑状态“1”),这意味着“嘿,RAM,这不是为您,而是为I/O设备”。回答您的问题:1)这方面没有保证,具体取决于硬件的设计方式。若地址映射到RAM:是(很幸运),否则视情况而定。2) 是的,非常感谢你,蒂格罗。你的解释很有帮助。非常感谢你,麦基。你是一位真正的专业人士,也是一位优秀的导师。我从你的博文中学到了比许多汇编语言教科书多得多的东西。再次非常感谢。回答得很好,但我仍然有一个疑问…即使在使用DMA时,我仍然有吗