在我的书中提到:
设备控制器的控制寄存器可以是存储器本身的一部分,也可以是单独的I / O空间的一部分。如果是内存空间,则内存响应请求。如果是I / O空间,则I / O设备会响应请求。
它的最后一句话If it is I/O space, the I/O device responds to the request.
为什么当控制寄存器在存储空间中时,I / O设备根本不参与?如果不涉及I / O设备且只有内存响应请求,数据如何从设备进入内存。
我认为I / O空间只是内存中与内核内存无关的单独空间吗?因此,如果控制器寄存器位于I / O空间中,它表示I / O设备将响应请求,这是否意味着当控制器寄存器位于存储器空间中时,设备将不会响应,并且不知何故数据已经在内存中了吗?
答案 0 :(得分:1)
我认为混淆来自不准确的措辞。我通过以下方式看到它:
CPU使用相同的指令访问存储器和I / O寄存器(“存储器映射的I / O”),或使用“正常”指令访问存储器,以及访问I / O寄存器的特殊I / O指令( “端口映射I / O”) 通常,CPU的虚拟地址由存储器管理设备映射到任何其他物理地址。
使用内存映射I / O,单个物理地址空间通常由从内存0开始的主内存填充。主内存的顶部地址取决于其大小,但通常远小于地址的顶部空间。
比方说,你有一个64位的地址空间,一个16 GB的主内存将占用从十六进制0x0000000000000000到十六进制0x0000000400000000的底部地址,并且内存不会使用顶部地址。
因此,它们可用于访问器件寄存器,通常从地址空间hex 0xFFFFFFFFFFFFFFFF的顶部开始,并使用下面的地址。
因此,对于存储器映射的I / O,主存储器和I / O设备只需查看地址总线上的物理地址,并在地址与其自己的地址匹配时进行响应。
但是也可以使用不同的地址空间。一些计算机,例如PDP11 / 45使用单独的地址空间作为指令和数据,通过地址总线上的特殊位进行区分,其他地址则使用单独的地址空间用于存储器和I / O设备。
在后一种情况下,这是端口映射的I / O.因此,对于端口映射I / O,如果寻址存储器地址空间,主存储器仅响应地址,并且如果寻址I / O地址空间,则I / O设备仅响应地址。两种情况都通过地址总线上的单独位来区分。
可以找到更多信息here。