记录我学习机组的一些心得和笔记,前两章以后更。

第三章 存储系统

3.1 存储器概述

3.1.1 存储器的分类

3.1.2 存储器的性能指标


其中,存取时间是启动一次存储器操作到完成该操作所经历的时间(读出时间、写入时间),主存宽带是数据传输率,表示每次从主存进出信息的最大数量,单位为字/秒、字节/秒(B/s)或位/秒(b/s)。
补充:所谓存储速度,就是指平均每秒能传输多少数据。

3.1.3 多级层次的存储系统


主存和Cache之间的数据调动是由硬件自动完成的,对[所有程序员]均是透明的;而主存和辅存之间的数据调动则是由硬件和操作系统共同完成的,对[应用程序员]都是透明的。

对上一段话的理解:

主存(Main Memory)和Cache之间的数据调动:

数据调动是由硬件自动完成的:处理器在执行指令时可能需要访问数据,如果数据在Cache中找到,则直接从Cache中获取,这个过程是由硬件自动完成的。
对所有程序员都是透明的:这意味着程序员不需要关心数据是从主存还是从Cache中获取的,他们编写的程序不需要考虑存储层次结构,因为这个过程由硬件自动管理,对程序员来说是透明的。

主存和辅存之间的数据调动:

数据调动是由硬件和操作系统共同完成的:当主存中的内存不足以容纳所有需要的数据时,部分数据可能会被移到辅助存储(如硬盘)中,这个过程需要操作系统和硬件共同协作来管理。
对应用程序员都是透明的:与Cache和主存之间的数据调动不同,应用程序员也不需要直接关注主存和辅存之间的数据调动。操作系统会在需要时自动将数据从辅存调入主存,以确保程序的正常执行,而应用程序员可以像操作主存一样使用数据,这个过程对他们来说是透明的,他们无需手动管理数据在主存和辅存之间的迁移。
在Cache-主存层和主存-辅存层中,上一层中的内容都只是下一层中的内容的副本,也即Cache(或主存)中的内容只是主存(或辅存)中的内容的一部分。

这一段知识很重要,一定要记住!!!!

对上一段话的理解:数据保存在[辅存]中,如果要对数据进行操作,则[辅存]将数据复制一份副本,然后将副本扔给[主存],[主存]将副本再复制为另一份副本,然后扔给[Cache],此时,[主存]、[Cache]中都有了数据的副本。副本在[Cache]中被操作后,操作好的副本会扔回给[主存],并覆盖原先[主存]中的副本。在某些情况下,如果操作后的数据需要保存至[辅存]中,则由[主存]将修改好的数据扔给[辅存]。

这一段知识很重要,一定要记住!!!!

3.2 主存储器

3.2.1 SRAM芯片和DRAM芯片

1.SRAM的工作原理

存储器最基本的构件是存放一个二进制位的物理器件。

静态随机存储器SRAM的存储单元是双稳态触发器(六晶体管MOS)记忆信息的。

速度快、集成度低、功耗大、价格昂贵,用作高速缓冲存储器Cache。

2.DRAM的工作原理

利用存储电路中栅极电容上的电荷存储信息。

容易集成、价位低、容量大和功耗低,用于主存系统。


对上述概念的理解:

"集中刷新”可以看做,作者必须把书架上每本书更新完后,读者才能阅读书架上的任意一本。
“分散刷新”是作者更新某行书时,读者可以看其他行的书,但如果要看作者更新的那行书时,必须等作者更新好,才能看。
“异步刷新”是每行书定期被更新,而更新的时候,读者可以阅读任意一本书。

另外补充:Cache之所以是“静态”,是因为在通电情况下,它不需要刷新就能保持数据的存在,而主存之所以被称为“动态”,是因为它在通电条件下,需要定时刷新才能保持数据的存在,这是二者在称呼上不同的原因。

3.DRAM芯片的读写周期。

对上图以及读写流程的理解:
读操作:
首先,将要读取的行地址传送给DRAM。
当RAS信号被激活时,DRAM会选中提交的行地址,并准备读取数据。
接着,将要读取的列地址传送给DRAM。
当CAS信号被激活时,DRAM会从选定的行中读取数据,并将数据输出到数据总线上。
在CAS信号激活之前,数据总线上的数据必须保持稳定,以确保正确读取数据。
通过WE(写使能)信号的状态(通常高电平),确定当前操作为读操作。

写操作:
与读操作类似,首先将要写入的行地址和列地址传送给DRAM。
当RAS和CAS信号被激活时,DRAM会选中提交的行和列,并准备写入数据。
然后,在CAS信号激活之前,数据总线上的数据必须保持稳定,以确保数据正确写入。
通过WE信号的状态(通常低电平),确定当前操作为写操作。
总的来说,通过控制RAS和CAS信号的激活以及WE信号的状态,可以确定DRAM芯片的操作是读取数据还是写入数据,以及要读写的数据的位置。这些操作确保了DRAM芯片能够准确地进行读写操作,并在不同的操作之间保持正确的时序关系。

4.SRAM与DRAM的比较

对于上文中的“破坏性读出”的理解:

破坏性读出:对于像DRAM这样的存储器,读取数据会导致存储单元中的数据被清空,因此需要定期进行刷新操作来重新写入数据,以保持数据的有效性。在DRAM中,由于存储单元是由电容构成的,电容中的电荷会在读取操作中被释放,导致数据丢失。

非破坏性读出:对于像SRAM这样的存储器,读取数据不会影响存储单元中的内容,因此不需要定期进行刷新操作。在SRAM中,存储单元是由触发器构成的,读取数据不会导致存储单元中的数据丢失。

因此,刷新操作的需求与存储器的读取方式密切相关。对于需要进行破坏性读出的存储器,需要定期刷新以保持数据的有效性;而对于非破坏性读出的存储器,则不需要刷新操作。

5.存储芯片的内部结构

1.存储体(存储矩阵)。存储体是存储单元的集合,它由行选择线(X)和列选择线(Y)来选择所访问单元,存储体的相同行、列上的位同时被读出或写入。

2.地址译码器。用来将地址转换为译码输出线上的高电平,以便驱动相应的读写电路。

3.I/0控制电路。用以控制被选中的单元的读出或写入,具有放大信息的作用。

4.片选控制信号。单个芯片容量太小,往往满足不了计算机对存储器容量的要求,因此需用一定数量的芯片进行存储器的扩展。在访问某个字时,必须“选中”该存储字所在芯片,而其他芯片不被“选中”,因此需要有片选控制信号。

5.读/写控制信号。根据CPU给出的读命令或写命令,控制被选中单元进行读或写。


用人话来说,就是外部将行列信息、读写信号与片选信号传递给I/O电路,I/O电路根据所给的信息,将存储矩阵中的数据传出。

3.2.2 只读存储器

1.只读存储器(ROM)的特点

ROM一旦有了信息,就不能轻易改变,即是掉电了,信息也不会丢失。其结构简单,位密度比可读写存储器高;具有非易失性,可靠性高。

2.ROM的类型

3.2.3 主存储器的基本组成


读操作:CPU首先获取要读取的数据的地址,并将这个地址存入自己的MAR中。然后,通过地址总线将MAR中存储的地址传送到主存储器中,主存储器根据这个地址找到对应的数据,并通过数据总线将数据传送到CPU的MDR中。

写操作:CPU首先获取要写入的数据的地址以及修改的内容,并将这些信息分别存入自己的MAR和MDR中。然后,通过地址总线将MAR中存储的地址传送到主存储器中,主存储器根据这个地址找到对应的存储单元。接着,CPU通过数据总线将MDR中的修改内容传送到主存储器中,覆盖原先的数据。


补充:在学这里的时候很奇怪,为什么这里涉及的(CPU——主存)结构内容没有提到中间的Cache?后来发现这教材写的太奇怪了= = 。随后研究了一下,原来这里的CPU与主存交互有个前提,那就是CPU与Cache交互的时候并没有在Cache中找到数据,于是越过Cache,与主存交互,然后就有了上述的内容。但是有意思的是,CPU与Cache的交互与上述主存的交互差不多,可以说一模一样了。但是额外的,如果在Cache中找到数据,要修改这数据的话,通过上述可知,Cache中的内容会被新数据覆盖,并且由于之前的内容,我们知道,Cache的内容是主存内容的【副本】,因此Cache中的【副本】被修改了后,为了保持主存储器和Cache之间的一致性,修改的数据也需要在适当的时机被写回到主存中,以覆盖主存储器中相同地址的数据,这样一来,Cache与主存的内容都被修改了。

3.2.4 多模块存储器

1.单体多字存储器

单体多字存储器是指一个存储单元可以同时存储多个数据位。这种存储器结构允许在单个存储单元中存储多个字节或字,而不是仅存储一个字节或字。通常,单体多字存储器使用更大的存储单元来存储多个数据位,从而提高了存储器的存储密度和效率。

举个例子,一个8位的存储单元通常只能存储一个字节(8位),而一个32位的存储单元可以存储4个字节(32位)。因此,如果一个存储器采用32位的单体多字结构,那么在单个存储单元中就可以存储4个字节的数据,从而提高了存储器的容量和效率。

缺点:它是按行读取信息的,所以每次读取信息都是一行行读取的,这导致了它每执行一条命令,就必须读取相应的数据,因此每行的结构应该是“指令-数据内容,指令-数据内容”,这样才能够满足逐条命令执行的条件,正因如此,如果出现了跳转或分支的指令,那么就会受到影响。

2.多体并行存储器

可参考这篇文章链接

高位交叉编址

在高位交叉编址中,存储器地址被分成高位地址和低位地址两部分。高位地址用来表示存储体的编号,而低位地址用来表示存储体内部的地址。

以一个具体的例子来说,如果有4个存储模块(M0到M3),每个模块内有若干个存储单元,那么对于一个存储器地址来说,高位地址会确定要访问的存储模块,而低位地址会确定在该模块内的具体存储单元。

在高位交叉方式下,CPU访问存储器时总是先访问一个模块内的存储单元,等到该模块访问完毕后,才会转到下一个模块进行访问。由于各个模块的访问不能并行进行,因此无法提高存储器的吞吐率。这意味着,尽管高位交叉编址可以提高存储器的并行性,但在访问连续主存块时,仍然会出现按顺序访问存储模块的情况,从而限制了存储器的整体性能表现。

如果正在访问M0,并且需要访问M3,就必须等待M0的访问完成后才能开始访问M3。这限制了存储器的并行性和吞吐率,因为各个存储模块之间的访问不能同时进行。


如上图,每个模块相当于串联一样。必须首尾相接,一个接一个访问。(图来源)

低位交叉编址

如图所示,低位交叉编址是并联的,相当于按“层”遍历。图中的w3后面的那小块相当于t。 8ik8juujujuj