我读到过这就是 CPU 从内存中检索信息的方式。
- 将地址总线上的地址发送到内存。
- 通过控制总线向内存发送读控制信号。
- 内存将数据总线上地址处的数据发送回CPU。
我想知道,当 CPU 向内存发送地址时,它是否只是选择将内存的哪些部分连接到数据总线,以便当内存接收到读取控制信号时,其中的任何内容都会自动转储到数据总线上?
答案1
在古代(20 世纪 70 年代和 80 年代),这与事物的一般工作方式非常接近。本质上,计算机的内存总线将包含多条地址线(通常为 16、20、24 或 32 条)、一些数据线(通常为 8、16 或 32 条)和一些控制信号。控制信号有一些变化,但典型的模式是,对于读取,处理器会将地址放在地址总线上,浮动数据总线(允许其他设备驱动它),以指示内存读取的方式设置控制信号,一段时间后将地址总线上的任何信号作为读取数据,然后释放控制信号。对于写入,处理器会将地址放在地址总线上,设置控制信号以指示写入,将适当的数据放在数据总线上,释放指示写入的控制信号,然后浮动数据总线。一些处理器允许 I/O 访问,这与内存访问类似,只是有特殊的线路指示给定的访问是内存访问还是 I/O 访问。
通常,系统会将多个内存或外围设备连接到内存总线,每个设备都有一个连接到某个解码器逻辑的芯片选择信号。每当选择一定范围的内存或 I/O 地址时,解码器逻辑就会断言每个芯片选择信号。每个芯片都会忽略地址和数据总线的内容,除非其芯片选择线被断言。
从 20 世纪 90 年代开始(在此之前,某种程度上也是如此),系统在处理器和内存系统之间增加了几个层。对于那些只熟悉 20 世纪 80 年代处理器内存系统的人来说,今天的处理器内存系统可能难以辨认。
答案2
我想知道,当 CPU 向内存发送地址时,它是否只是选择将内存的哪些部分连接到数据总线
有点。
A公共汽车是连接多个组件的一条或一组公共线。
这意味着连接到总线的任何东西(连接总线的电线)都会“听到”其他人所做的任何事情。
因此,一辆典型的公交车将地址线(例如 A0-A15),数据线(D0-D7)然后控制线(例如 RW、READY 等)
因此,CPU 会下拉一些地址线来识别地址,下拉一些数据线来表示一些数据,然后例如下拉 RW 和可能的其他一些控制线。
其他设备负责监听该地址,然后根据数据和控制线采取行动。两个设备可以响应同一地址的信号——这可能是好事也可能是坏事,具体取决于系统及其电气特性。
通常您不希望总线上的所有内容都响应所有地址,因此您需要中间的东西来引导信号 - 例如 LS 芯片、门阵列或其他中间设备。
如果这让您想起旧的 10BaseT 有线以太网,其中所有计算机都在 1 条物理线路上,并且会发生冲突之类的事情 - 您是对的。因此,所有设备都必须遵循通用协议,并且不会引发冲突。
这限制了速度,这就是为什么技术通常不再将 CPU 直接连接到总线,互连通常也从并行的“地址和数据线束”转变为串行。例如,PCI 是一种总线,但 PCI-E 基本上像优化的交换式以太网一样运行。这也是 RAM 或多或少直接连接到内置于 CPU 中的内存控制器而不是总线上的原因。 我们距离 RAM 串行化可能也不远了。