由于 CPU 需要与各种内存和输入输出设备 (I/O) 通信,因为我们知道处理器和这些设备之间的数据在系统总线的帮助下流动。系统总线可以通过三种方式分配给它们:
- 独立的一组地址、控制和数据总线到 I/O 和内存。
- 具有用于 I/O 和内存的公共总线(数据和地址),但具有独立的控制线。
- 具有用于 I/O 和内存的公共总线(数据、地址和控制)。
第一种情况很简单,因为两者都有不同的地址空间和指令集,但需要更多的总线。
隔离 I/O –
然后我们有隔离 I/O,其中我们有用于 I/O 和内存的公共总线(数据和地址),但用于 I/O 的单独读写控制线。因此,当 CPU 解码指令时,如果数据是用于 I/O,那么它将地址放在地址线上并设置 I/O 读或写控制线,因为 CPU 和 I/O 之间发生数据传输。由于内存和I/O的地址空间是隔离的,故名。此处 I/O 的地址称为端口。这里我们对 I/O 和内存有不同的读写指令。
内存映射 I/O –
在这种情况下,每条总线都是共同的,因为相同的指令集用于内存和 I/O。因此我们操作I/O 和内存一样,并且两者都有相同的地址空间,因此内存的寻址能力变差,因为某些部分被I/O 占用。
内存映射 I/O 和隔离 I/O 之间的差异 –
Isolated I/O | Memory Mapped I/O |
---|---|
Memory and I/O have separate address space | Both have same address space |
All address can be used by the memory | Due to addition of I/O addressable memory become less for memory |
Separate instruction control read and write operation in I/O and Memory | Same instructions can control both I/O and Memory |
In this I/O address are called ports. | Normal memory address are for both |
More efficient due to separate buses | Lesser efficient |
Larger in size due to more buses | Smaller in size |
It is complex due to separate separate logic is used to control both. | Simpler logic is used as I/O is also treated as memory only. |