在认识各计算机硬件的那一篇文章中,我们已经对主存储器有了形象的理解,总结一下:
而再细看我们的存储体,我们同样也会发现其结构和货架简直不要太像:
想弄清主存储器的存储系统必须把上面的生动例子理解清楚,这样才能理解更为抽象的物理结构实现。
在上面的例子中,我们都能感受到:存储器三部分是协同工作的:地址寄存器负责接收外部功能部件传进来的地址;存储体负责存储具体的二进制位;数据寄存器负责存取要传出去或者传进来的数据信号。他们三个在一个时序控制逻辑的控制下协同工作。
那么具体怎么实现这些功能呢,我们可以看看存储体是如何存储一个二进制位的:
这是一个电容拼接这一个开关(图中开关闭合),那么对于一个二进制元件有读和写两个操作。以读为例,假设最左边单元地址寄存器里存放的是1的信号(读信号),那么他就会传递信号到中间的开关元件,控制整个电路连通,这样读信号就会沿着整个电路传到右边(数据寄存器)。
,反之如果传递写操作,则先是3号位处数据寄存器发出写的指令让时序控制逻辑通知存储体连通,再将写信号传到1处的地址寄存器。这样的一个能够完成二进制位读写的单元就叫做存储元,存储体中就是由一个个这样的 存储元组成的。
每一个存储元都存有着0/1这样的二进制数据,我们通过红线控制端统一发出读或写的信号,这样整一行存储元就会将数据写到绿线中去,再又绿色的线将数据传递到数据寄存器中就完成了数据的读写。
理解完存储元的存储原理后,我们就可以更好的对存储体的结构进行理解:
以上就是整个存储体的对应到芯片上的一块具体的电路。
在上面的例子中,我们能够理解一个存储单元的工作流程该是怎样的,那如果多个存储单元都发出读写信号我们的绿线又该听谁的呢?所以没有译码器的存储体工作是有限制的。
假如没有译码器,我们的存储体只能使一位是有效状态,而我们的二进制地址每一位都有0/1两种状态,n位地址还能表示2的n次方种不同状态。因此我们需要译码器来帮我们实现从二进制地址映射到2的n次方个不同的存储单元的转换。
这样把上面的全部东西都封装起来,就得到了存储器芯片。
存储体的内存大小也就是图中这个由一个个存储元组成的矩形的个数,可以简单的用行数×列数来算出数量。
注意这里的K,是2的10次方也就是1024,而不是1000
前面我们已经知道,存储体是由一个个存储元构成的,可以称之为存储矩阵。那我们如何定位到某一个存储单元呢?
寻址的方式有以下几种:
我们先来理解怎样是按字节寻址:
这是存储体示意图(存储矩阵),每一行是一个存储单元,每个小格能放8bit,也就是一个字节。因此现在每一行能放4个字节,也就是存储字长为4B,取出来数据的位数为32位(8×4)。
那么假设该存储体的总容量为1KB,那按字节寻址,就是一共有1K个单元,每个单元1B大小:1K×1B=1KB
每个小格子是1B,所以一共有1K个小格子
那么按字寻址又是什么意思呢?
注意:按字的字有长度之分,在这里由于字长为4B,因此按字寻址是按每单元4B来划分
因此,假设该存储体的总容量为1KB,那按字寻址,就是一共有256个单元,每个单元4B大小:256×4B=1KB
每一排是4B,所以一共有256排
以此类推:
按半字寻址的意思是:假设该存储体的总容量为1KB,那按字寻址,就是一共有512个单元,每个单元2B大小:512×2B=1KB
按双字寻址的意思是:假设该存储体的总容量为1KB,那按字寻址,就是一共有128个单元,每个单元8B大小:128×8B=1KB
无论是按字节寻址也好,还是按字寻址也好,都需要分配好地址线使之唯一标识。
以上面按字节寻址为例:
一共有1K个单元,因此需要10根地址线
按字节寻址地址划分
可以表示2的十次方(1024)个数,也就是1024个格子。
按字节寻址
那如果我们不按照最小的单元格来寻址,而是按字寻址,按半字寻址,则是这样的情况:
一共需要256个单元,但是还是需要10根数据线,因为此时每个单元可不是1小格而是4格换句话说,就是和上面一样只是以4个为一组划分了。
按字寻址地址划分按字寻址
首先我们要搞清楚字的概念
因此,如何存放一个字就是在分析如何分布每一个存储单元(每一排)的存放方式。存储方式共有两种方案,一种是大端方案,一种是小端方案
如上图所示,一行有4个单元每个单元有8位,那么一共就能存放32位
假如要存放一个十六进制的12345678[0001 0010 0011 0100 0101 0110 0111 1000]共32位,每个存储单元就要存2个数字,如选择大端方案,则分布为:
反之,如果小的数字在右侧,则为小端方案
高低位示意图
本节小结
下一篇
記者:Lydia來源:BuzzFeed咳咳,各位L社的小夥伴們,今天要開車瞭,大傢請坐穩……幾天前,一位外國女網友在推特上分享瞭媽媽...