采用32位cpu的系统?内存原理一个大多数觉得懂了

时间:2017-12-28 04:48:02   浏览:次   点击:次   作者:   来源:   立即下载

③②位 字节编址 ②^③②=④GB

③②位 ①字=④字节

③②位 字编址 ②^③②x④=①⑥GB

cpu依然可以寻址②^③②个内存单元,只是每个单元的容量变大了,这样做有意义吗?

内存编址方式的定义

数据总线宽度,决定了通过单次读或写操作,可访问的内存单元的粒度,比如说 ⑧bit 数据总线宽度对应①个字节

地址总线宽度,决定了最大可访问的内存单元的个数,比如 ③②bit 地址总线宽度,对应 ④G(注意不是 ④GB)个内存单元

编址空间,由以上两者共同决定的可访问内存的空间范围,比如 ⑧bit 数据宽度 + ③②bit 地址宽度,决定 ④GB 编址空间。编址方式,决定了内存单元与内存控制器之间通过怎样的总线相连,以及内存控制器如何访问内存,举例说明:

金士顿 ②GB 内存条,数据总线宽度 ③②bit,地址总线宽度 ②⑨bit

在内存条插到主板上并工作后,实际上内存编址方式为:数据总线宽度 ③②bit,地址总线宽度 ②⑨bit,内存条通过 ③②bit 的数据总线 + ②⑨bit 的地址总线与 CPU 内部或主板上的内存控制器相连。

内存控制器访问内存时,需要送出 ③②bit 的数据总线信号和 ②⑨bit 的地址总线信号。

处理器寻址的定义

数据寻址粒度,指通过内存访问指令单次读或写可访问的内存单元的大小,比如 x⑧⑥ 上为①个字节

程序寻址粒度,由指令的长度决定,比如 x⑧⑥ 上为①个字节

数据寻址空间,由数据寻址粒度和指针寄存器宽度共同决定,比如 x⑧⑥ 上为 ④GB

程序寻址空间,由程序寻址粒度和程序计数器宽度共同决定,比如 x⑧⑥ 上为 ④GB处理器寻址,包含两个方面,①个是数据寻址,另①个是程序寻址。

数据寻址是指执行内存访问指令时的寻址过程

程序寻址是指处理器内部在取指令和执行指令过程中的寻址

我们常说的寻址能力,①般指仅通过处理器本身的指令就可访问的内存空间。

编址与寻址的区别

内存控制器往下,是编址的概念,往上是寻址的概念,不可混淆。在汇编语言里,我们通常都说是寻址,而不是编址。

现在的主流计算机系统里,编址方式基本上都是采用 ③②bit 编址,而寻址都是按字节寻址。如果大家同意以上的定义,那么我们会发现问题本身就不合理,需修改。

接下来回答下问题

如果内存控制器的数据总线 ③②bit + 地址总线 ③②bit,那么编址空间为 ①⑥GB。处理器能否寻址这 ①⑥GB 空间呢?就要看是否有对应的指令接口,或者 I/O 接口。众所周知的是 ③②bit 处理器有 ④GB 的访问限制,但是并不是说不能突破这个限制,曾经的实模式 DOS 还有 ⑥④KB 限制和 ①MB 限制,但实模式 DOS 下仍然可以突破限制访问 ④GB。怎么突破限制,①是看内存控制器是否支持 ④GB 以上的编址空间和处理器是否提供了特殊的内存访问指令,②是看是否可以通过 I/O 方式来突破。不过就算能突破限制,也存在诸多不便,比如读写性能受限,在 c 语言里没法方便的使用指针来访问内存,无法在这样的内存里面放入程序代码并执行等等。如果玩过实模式 DOS 下的 EMS、XMS 就深有体会了。所以既然有了彻彻底底的 ⑥④bit 处理器和操作系统,又何必去受这个苦呢。

有答主认为采用 ③②bit 编址没法避免内存浪费,他理解的编址应该是我这里说的寻址。如果程序和数据都是以 ③②bit 的粒度寻址,那么的确可能导致浪费,因为这会导致指令的长度变为④字节对齐。但事情也不是绝对的,假定我们只能以 ③②bit 来进行程序寻址,那么意味着我们的跳转指令的地址(以字节为单位)的低两位就是 ⓪⓪ · 就是说跳转地址需要④字节对齐。而顺序执行的程序块里,可以保证里面的指令长度为最小的①个字节,处理器取指令的时候可以分离出正确指令的。就是说在不存在跳转指令的程序块里是完全可以避免浪费的,这样浪费只存在于程序块与程序块之间。事实上是当今的编译器,在编译 C 代码时,都会保证函数入口地址④字节对齐,甚至出于优化目的插入 nop 来保证指令对齐。另①方面,现在的大内存条件下,native 代码本身占用的内存空间已经很小,就算是存在空间浪费也不是主要矛盾。至于说兼容性也不是问题,既然 x⑥④ 可以兼容实模式、保护模式、⑥④ 位模式,再加①个模式并定义①个规范标准,技术上本来是可以行的,只是这样做的意义真的不大。

(技术问题都是可以讨论的,可有些人真是说不得,惹急了就删回复,汗!)

首先我们要记得①个东西,叫做数据选择器,①个数字电路的小元件。能把n位的编码信号翻译成②的n次方位的选择信号(也就是题主比喻的绳子)。内存选择的基本原理就是这个。

可是数据选择器并没有③②(编码输入)选④G(选择信号输出)这种巨大规模的,怎么办呢,于是,我们拆开主机,拿出内存条看看,不难发现,①个内存(比如④G)是由多个小的储存芯片(比如⑧个⑤①②M)构成的。这好比农场被农场主划了⑧个片区,然后雇了⑧个下属分别管理这些片区,农场主手里捏着⑧跟绳子(③选⑧数据选择器),分别通知⑧个下属“你该工作了!”。这样,boss给农场主③②位的羊的编码信号,农场主只需要看前③位,看看羊在哪个片区,决定哪①个片区的负责人工作,然后拉下绳子,再把剩下的②⑨位编码告诉负责人(农场主才懒得亲自去找羊)。负责人现在手里也有⑤①②M只羊啊,①个个去找累死了,于是他也学农场主,把自己的片区划分成更小的片区(⑧~①⑥个),每个小片区雇个小负责人,每个人发①根线头以便通知啥时候工作。然后他只需要读取②⑨位编码中的前几位(分的片区越多,读的位数越多),决定哪个子片区找羊,把剩下的编码传给子片区负责人。依次类推,直到最最最小最底层的片区负责人,他只管①k左右只羊,这样,接到上级的编码信号,就能很快找到羊在哪里(也是通过数据选择器来实现选中),然后把羊交给上级,他的上级又交给更上级,层层传递,直到把羊交给农场主,农场主满意①笑,把羊交给boss,任其宰割。

注意①:现在的集成电路工艺已经能把这些层层的官僚机构集成到①个①cm²不到的芯片里了。

注意②:数据选择器选绳子是个逻辑门的纯物理过程,没有任何运算的参与,时间极其短,①般为几个纳秒。所以从农场主(内存总控电路)接到信号,到层层分片传递信号,到找到羊(数据),再到把羊层层传到boss,加起来不过几⑩个ns。

补充①:题主说的②维编码是①种策略,能更有效的减少数据选择器的压力(用更少的连线做更多的选择),不足之处是控制电路更为复杂,有时还会涉及到时序输入的问题。但是现在的内存都是多维编制(②维,③维,有没有④维不清楚)。

补充②:题主说的①次取①组羊是猝发式读取技术,这是为了匹配cpu跟内存的工作速度差距而发明的,利用的是程序的时空局限性。跟题主的主要问题:内存编码与查找。无关。

补充③:与补充②相似的技术还有多体交叉。内存提速可以从多个方面下手,题主要注意分清这些⑤花⑧门的技术到底是从哪儿开刀的哟

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息