我们被教导RAM内存的抽象是一个很长的字节数组。而对于CPU来说,访问它的任何部分需要相同的时间。什么是能够同时访问4千兆字节(在我的计算机上)的任何字节的设备?因为这对我来说似乎不是一项微不足道的任务。
我曾向同事和我的教授们询问过,但没有人能够指出如何通过简单的逻辑门实现这项任务,如果它不仅仅是一个棘手的逻辑门组合,那么它是什么? / p>
我个人的猜测是,您可以以O(log(n))速度访问任何内存,其中n将是内存的大小。因为每个门都将内存分成两部分,然后向你发送内存访问指令,将内存分成两个门。但这需要很多门。我无法提出任何其他有根据的猜测,而且我甚至不知道我应该在Google中查找的设备名称。
请帮助我痛苦的好奇心,并提前感谢。
编辑< 这就是我学到的东西!
引用你的内容" RAM可以将来自单元格地址X的值发送到某些输出引脚",这里是每个人都跳过(再次)对我来说不重要的事情。我看到它的方式,为了构建一个由64个引脚决定从2 ^ 64中取出哪个字节的门,每个引脚需要将整个可能的存储器范围分成两个。如果索引0处的位是0 - >然后地址在内存0-2 ^ 64/2,否则地址在内存2 ^ 64 / 2-2 ^ 64。等等,然而,内存提取将通过的门(让我们称之为)将是64,(一个常数)。然而,所需的门数量是N,其中N是存储器字节的数量。
仅仅因为有64个引脚,它并不意味着您仍然可以将其解码为2 ^ 64范围内的单个提取。内存控件中有4千兆字节的内存和4千兆字节的门吗?
现在可以改进了,因为当我越来越多地阅读这个内存是如何构建时,如果你将内存放入一个带有sqrt(N)行和sqrt(N)列的矩阵中,那么需要获取的获取内存是O(log(sqrt(N)* 2)并且所需的门数量将是2 * sqrt(N),这要好得多,我认为它可能是一个商业秘密。
/编辑<
答案 0 :(得分:7)
到底是什么,我不妨回答这个问题。
是的,在物理世界中,内存访问不能是恒定的时间。
但它甚至不能是对数时间。你想到的O(log n)电路最终涉及某种二进制(或其他)树,你不能在3D宇宙中制作具有恒定长度线的二叉树。
无论您的技术的“每单位体积比特”容量是多少,存储n位需要一个半径为O(n ^(1/3))的球体。由于信息只能以光速传播,因此访问球体另一端的位需要时间O(n ^(1/3))。
但即使这是错误的。如果你想谈论我们宇宙的实际局限性,我们physics friends say你可以在任何球体中存储的绝对最大位数与球体的表面积成正比,而不是它的体积。因此,包含n位信息的最小球体的实际半径为O(sqrt(n))。
正如我在评论中提到的,所有这些都是没有实际意义的。我们通常用于分析算法的计算模型假设恒定访问时间RAM,它与实际中的事实足够接近,并允许对竞争算法进行公平比较。 (尽管从事高性能代码工作的优秀工程师非常关注局部性和内存层次结构......)
答案 1 :(得分:2)
假设您的RAM有2 ^ 64个单元格(可以存储单个值的位置,比方说8位)。然后它需要64个引脚来寻址具有不同数字的每个单元。当你的RAM的输入引脚出现'二进制数X'时,RAM可以将单元寻址X的值发送到某些输出引脚,你的CPU可以从那里获得值。在硬件中,寻址可以非常容易地完成,例如通过使用多个NAND门(来自某些逻辑门的“寻址设备”称为解码器)。
所有这一切都发生在硬件层面,这只是直接寻址。如果CPU能够为RAM的64个引脚提供64位,则它可以寻址每个存储单元(因为64位足以表示任何数字,最高可达2 ^ 64 -1)。你没有立即得到这个值的唯一原因是一种“传播时间”,所以信号通过电路中所有逻辑门的时间都是。
答案 2 :(得分:0)
负责处理内存访问的组件是memory controller。 CPU使用它来读取和写入内存。
访问时间是不变的,因为内存字确实以矩阵形式布局(因此,“字节数组”抽象非常逼真),其中有行和列。要获取给定的内存位置,所需的内存地址将传递给控制器,然后控制器激活右列。
来自http://computer.howstuffworks.com/ram1.htm:
将存储器单元蚀刻到列阵列中的硅晶片上 (位线)和行(字线)。位线和。的交点 字线构成存储单元的地址。
所以,基本上,你的问题的答案是:内存控制器搞清楚了。当然,给定内存地址,列和行的映射必须易于在恒定时间内计算。
为了完全理解这个主题,我建议您阅读本指南,了解内存的工作原理:http://computer.howstuffworks.com/ram.htm
要掌握的概念太多,很难在一个答案中解释所有这些概念。
答案 3 :(得分:0)
在我回答之前,我一直在阅读你的评论和问题。我认为你走在正确的轨道上,但这里有一些混乱。您所暗示的随机访问不会以您认为的方式存在。
阅读,写作和刷新是在一个连续的循环中完成的。如果在该循环中检测到信号,则仅以特定间隔读取或写入存储器中的特定单元。将有支持电路包括“读出放大器以放大在存储器单元上检测到的信号或电荷。”
除非我误解了你所暗示的内容,否则你的困惑在于读取/写入单元格是多么容易。它的不同取决于芯片设计,但是读取或写入数据到单元所需的周期最短。
这些是我的来源:
http://www.doc.ic.ac.uk/~dfg/hardware/HardwareLecture16.pdf
http://www.electronics.dit.ie/staff/tscarff/memory/dram_cycles.htm
http://www.ece.cmu.edu/~ece548/localcpy/dramop.pdf
为了避免回答,我将大部分细节都排除在外,但这三个细节都将描述您正在寻找的过程。