聊聊存储系统

存储系统

1.1 主存储器再回忆

在认识各计算机硬件的那一篇文章中,我们已经对主存储器有了形象的理解,总结一下:

  • 主存储器包含三个部分:存储体、地址寄存器MAR和数据寄存器MDR
  • 主存储器的功能与现实生活中的菜鸟驿站十分相似:
    • MAR相当于店员,需要CPU提供取件码才会帮你取
    • MDR就是柜台,用于交换数据(拿包裹)
    • 存储体就像是一个大货架,包裹们数据们都放在上面

而再细看我们的存储体,我们同样也会发现其结构和货架简直不要太像:

  • 存储体由一格格存储单元组成,是不是像极了自取柜的快递格
  • 每一个存储单元都有描述大小的概念——存储字长
  • 每一个存储单元里当然也得存放东西,存放的东西叫存储字,(存储字是存储单元中存储的数据(二进制代码组合),存储字和存储字长之间的大小是有关系的,存储字长的所能存储的二进制位数得大于从存储字的二进制位数大小。)
  • 而每个存储字都需要二进制元件去存储他们(物理组件),称之为存储元

想弄清主存储器的存储系统必须把上面的生动例子理解清楚,这样才能理解更为抽象的物理结构实现。


1.2 深入存储器的物理结构

在上面的例子中,我们都能感受到:存储器三部分是协同工作的:地址寄存器负责接收外部功能部件传进来的地址;存储体负责存储具体的二进制位;数据寄存器负责存取要传出去或者传进来的数据信号。他们三个在一个时序控制逻辑的控制下协同工作。

那么具体怎么实现这些功能呢,我们可以看看存储体是如何存储一个二进制位的:

这是一个电容拼接这一个开关(图中开关闭合),那么对于一个二进制元件有读和写两个操作。以读为例,假设最左边单元地址寄存器里存放的是1的信号(读信号),那么他就会传递信号到中间的开关元件,控制整个电路连通,这样读信号就会沿着整个电路传到右边(数据寄存器)。

,反之如果传递写操作,则先是3号位处数据寄存器发出写的指令让时序控制逻辑通知存储体连通,再将写信号传到1处的地址寄存器。这样的一个能够完成二进制位读写的单元就叫做存储元,存储体中就是由一个个这样的 存储元组成的。

每一个存储元都存有着0/1这样的二进制数据,我们通过红线控制端统一发出读或写的信号,这样整一行存储元就会将数据写到绿线中去,再又绿色的线将数据传递到数据寄存器中就完成了数据的读写。

理解完存储元的存储原理后,我们就可以更好的对存储体的结构进行理解:

  • 每一排存储元组成了我们的存储单元,存储体就是由一排排存储单元构成。
  • 当电路连通时,存储元们会传递出数字信号,这就是存储字的概念
  • 根据存储单元的大小不同,所能传递出的存储字大小也不同,这就是存储字长。图中所示是8位,现实中也是以8的倍数来进行设计芯片的。

以上就是整个存储体的对应到芯片上的一块具体的电路。


1.3 译码器的作用

在上面的例子中,我们能够理解一个存储单元的工作流程该是怎样的,那如果多个存储单元都发出读写信号我们的绿线又该听谁的呢?所以没有译码器的存储体工作是有限制的。

假如没有译码器,我们的存储体只能使一位是有效状态,而我们的二进制地址每一位都有0/1两种状态,n位地址还能表示2的n次方种不同状态。因此我们需要译码器来帮我们实现从二进制地址映射到2的n次方个不同的存储单元的转换。

1.4 地址线?数据线?

  • 地址寄存器(MAR)连接到外部的信号箱叫做地址线
  • 数据寄存器(MDR)给外部提供的信号线叫做数据线
  • 控制电路就是时序控制器控制着整个电路的运行,他同样需要给外部提供信号线:
    • 片选线:控制整个存储器的开关
    • 读写控制线:用来决定这次操作是读操作还是写操作?什么时候读写?

这样把上面的全部东西都封装起来,就得到了存储器芯片。

1.5 存储体的内存大小计算

存储体的内存大小也就是图中这个由一个个存储元组成的矩形的个数,可以简单的用行数×列数来算出数量。

  • 行数:由地址决定,n位地址有2的n次方个存储单元,也可以说是由地址线的根数决定,有几根地址线就有2的n数次方位地址,就是有2的n次方个存储单元
  • 列数:由存储单元的存储字长决定,也可以说由数据线的根数决定
  • 因此可以得到算式:

注意这里的K,是2的10次方也就是1024,而不是1000

1.6 寻址

前面我们已经知道,存储体是由一个个存储元构成的,可以称之为存储矩阵。那我们如何定位到某一个存储单元呢?

寻址的方式有以下几种:

  • 按字节寻址
  • 按字寻址
  • 按半字寻址
  • 按双字寻址

我们先来理解怎样是按字节寻址:

这是存储体示意图(存储矩阵),每一行是一个存储单元,每个小格能放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

1.7地址线的分配

无论是按字节寻址也好,还是按字寻址也好,都需要分配好地址线使之唯一标识。

以上面按字节寻址为例:

一共有1K个单元,因此需要10根地址线

按字节寻址地址划分

可以表示2的十次方(1024)个数,也就是1024个格子。

按字节寻址

那如果我们不按照最小的单元格来寻址,而是按字寻址,按半字寻址,则是这样的情况:

一共需要256个单元,但是还是需要10根数据线,因为此时每个单元可不是1小格而是4格换句话说,就是和上面一样只是以4个为一组划分了。

按字寻址地址划分按字寻址

1.8 如何存放一个字?

首先我们要搞清楚字的概念

因此,如何存放一个字就是在分析如何分布每一个存储单元(每一排)的存放方式。存储方式共有两种方案,一种是大端方案,一种是小端方案


如上图所示,一行有4个单元每个单元有8位,那么一共就能存放32位

假如要存放一个十六进制的12345678[0001 0010 0011 0100 0101 0110 0111 1000]共32位,每个存储单元就要存2个数字,如选择大端方案,则分布为:

反之,如果小的数字在右侧,则为小端方案

1.9 字地址与字节地址

  • 字节地址:方框中的蓝色地址,也就是每一格字节单元的地址
  • 字地址:字地址根据大端方式和小端方式的不同会有不一样的选择。
    • 大端方案字地址等于最高位有效字节
    • 小端方案字地址等于最低位有效字节

高低位示意图

1.10 小结

本节小结

发表回复

相关推荐

書籍的本質到底是什麼?我們為什麼要讀書?

書籍是用文字、圖畫和其他符號,在一定材料上記錄各種知識,清楚地表達思想,並且制裝成卷冊的著作物,為傳播各種知識和思想...

· 54秒前

防雾眼镜布是智商税吗?哪种防雾眼镜布是真的有用?

冬天到了!又到了起雾的季节! 口罩+眼镜=一秒起雾! 于是眼镜党们的疑惑又来了:如何戴口罩眼镜不起雾? 往年我也有这样烦 ...

· 3分钟前

如何與命運抗爭?

文|袁運錄這是千千萬萬抑鬱癥患者面臨的同樣問題。你為什麼抑鬱?因為你在命運面前被打趴瞭下來,因為你鬥不過命運,所以你才...

· 3分钟前

那些恐龍時代的巨人

一說起恐龍時代的巨人,大傢會不約而同想到一個名字那就是蜥腳類,但是蜥腳類恐龍傢族不全是大個子,也有袖珍版成員。馬紮爾...

· 3分钟前

深污!媽媽送18歲女兒不可描述的禮物,網友們都集體凌亂瞭……

記者:Lydia來源:BuzzFeed咳咳,各位L社的小夥伴們,今天要開車瞭,大傢請坐穩……幾天前,一位外國女網友在推特上分享瞭媽媽...

· 3分钟前