【问题标题】:Memory Mapped I/O: Control Registers in I/O space vs Memory Space内存映射 I/O:I/O 空间与内存空间中的控制寄存器
【发布时间】:2017-03-18 18:37:53
【问题描述】:

在我的书中提到:

设备控制器的控制寄存器可以是内存本身的一部分,也可以是单独 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 设备将响应请求,这是否意味着当控制器寄存器在内存空间中时,设备将不会响应并且不知何故数据已经在内存中了吗?

【问题讨论】:

  • 如果您认为我在下面的回答不够充分,请告诉我缺少什么。如果没问题,请将问题标记为已回答,以便关闭。
  • 刚刚标记它。忘了抱歉!

标签: memory operating-system


【解决方案1】:

我认为混淆来自于不精确的措辞。我是这样看的:

CPU 使用相同的指令来访问内存和 I/O 寄存器(“内存映射 I/O”),或“普通”指令来访问内存,并使用特殊 I/O 指令来访问 I/O 寄存器( “端口映射 I/O”)。
通常,CPU 的虚拟地址由内存管理设备映射到任何其他物理地址。

使用内存映射 I/O,单个物理地址空间通常从地址 0 开始填充主内存。主内存的顶部地址取决于其大小,但通常远小于地址的顶部空间。
假设你有一个 64 位的地址空间,一个 16 GB 的主内存将占用从十六进制 0x0000000000000000 到十六进制 0x0000000400000000 的底部地址,而顶部地址不会被内存使用。
因此,它们可用于访问设备寄存器,这些寄存器通常从地址空间十六进制 0xFFFFFFFFFFFFFFFF 的顶部开始,并使用下面的地址。
因此,对于内存映射 I/O,主内存和 I/O 设备只需查看地址总线上的物理地址,并在地址与它们自己的地址匹配时做出响应。

但也可以使用不同的地址空间。一些计算机,例如PDP11/45,对指令和数据使用单独的地址空间,通过地址总线上的一个特殊位来区分,而其他的对内存和 I/O 设备使用单独的地址空间。
在后一种情况下,这是端口映射 I/O。因此,对于端口映射 I/O,如果内存地址空间被寻址,主存储器仅响应地址,而 I/O 设备仅在 I/O 地址空间被寻址时才响应地址。这两种情况的区别在于地址总线上的一个单独的位。

更多信息可以在here找到。

【讨论】:

    猜你喜欢
    • 2016-05-27
    • 2017-05-17
    • 1970-01-01
    • 2014-06-10
    • 2017-06-08
    • 2011-01-19
    • 1970-01-01
    • 2016-05-05
    • 2016-11-16
    相关资源
    最近更新 更多