计算机组成原理之存储系统

时间紧,任务重,争取在6月前把计组学完吧.....老天保佑!
image
本章的结构导图。
image
主存储器的模型相对而言还是比较容易理解的,每个存储元存储一个0/1,一行构成一个存储单元,而存储单元和存储字和存储字长都是相对应的概念,分别表示的是这一行的01代码串(存储字),和01代码串的长度(存储字长)。
image
先学过CPU后学的存储系统,首先可以发现,数据只能一行有效,多行同时有效时会产生冲突,所以,每次传进来信号时,需要一个存储单元为1,其余为0,而我们选择哪个存储单元,就需要使得哪根存储单元的信号线为1,其余为0,这不正好和译码器结合起来了吗?
整个捋一遍,地址线过来的地址,放到MAR,MAR后接译码器,被选择的存储单元有效,其余无效,数据暂放到MDR上,MDR后接地址线,方便数据传送。当然这一切得再控制电路的管理下工作,而控制电路又收到来自CPU的控制信号的控制。将整个这一切封装起来,就形成了存储器芯片了。
image
理解了上面的内容,这次的就比较简单了,只需要知道,地址寄存器的位数和总容量相关,数据寄存器和每个单元的长度相关即可。
image
寻址就是寻找信息嘛,按X寻址,就是将所有存储单元按X分组,常见的是按字节寻址和按字寻址,这里的字是机器字,即计算机一次所能处理的位数。组内还有相应的偏移地址。不过总的来说,无论怎么分组,想要彻底的确定一个存储单元的位置,需要的位数是一定的,都是地址寄存器的位数。
image
其余都还好,片选信号有点陌生,片选信号主要用于存储器的扩容,若一些存储器同时开,同时关,则可实现存储单元位数的扩充,若几个存储器只有一个开,其他都是关,则课实现存储单元个数的扩充。若对不同的存储芯片分组,组内同时开关,组外只有一个是开的,则可实现存储单元位数和个数都扩充。
其中若存储矩阵采用半导体材料,则称为半导体存储器,目前一般的电脑都是采用半导体作为材料来存储信息的。
image
而半导体随机存储器(RAM)主要分成两类,分别是SRAM和DRAM,可以从两者的电路结构分析两者的性能和功能,SRAM采用触发器存储信息,根据数字逻辑的知识,触发器可以保持稳定的状态,所以是static静态的,而DRAM采用电容存储信息,需要不断刷新,所以是dynamic动态的。破坏性读出,显然是DRAM的,刷新也是DRAM的专属特性。送行列地址,记住DRAM是分两次送的,而SRAM是一次送的,所以DRAM的地址线通过复用可以减少一半,但也导致了SRAM比较快和DRAM比较慢,这从电路结构和地址线这都能说得通。同时由于SRAM由触发器,而触发器也是由基本逻辑器件堆积的,所以集成度低,发热量大,存储成本高,而DRAM采用电容,只需要电容即可,所以集成度高,发热量小,存储成本低。两者的用途,根据速度的快慢,SRAM常用于Cache,弥补CPU和主存的差别,DRAM常用作主存,大批量存储数据,同时随机存储器都必须实时通电才能保持信息,断电信息无,这也就是断电内存的东西就丢失了的原因。
image
这个了解就行,主要知道存储器采取矩阵存储的目的是为了减少线的数量,莫名想起了折半搜索...复杂度的数量级直接降一半...
image
DRAM的刷新,因为采用电容作为存储介质,所以需要定期刷新。
首先是刷新周期的概念,刷新周期是维护信息的刷新的最小周期,就是说你每个数据起码得在这个时间段内刷新一次,不然信息就无了。还有个概念就是存取周期,也就是读/写周期,就是访问一次内存所需要的时间。然后刷新这个操作所用的时间和存取周期时间相同。每次刷新都是刷一行,剩下的问题就是什么时候刷新?
这里由三种方式解决问题,
1)分散刷新,最省事,我每个读写操作后都进行刷新,我读一行,我刷新一行,我写一行,我刷新一行,这样规律性的设计很简单,但却会大大的浪费时间。
2)集中式刷新,不是说一个周期内每个单元刷新一次就行了嘛,那我就在一个刷新周期内,留下一点时间去刷新,剩下的全用来干自己的事情,优点是没浪费时间资源,缺点是存储器会陷入一段“死机”,因为这一段时间全用来刷新了,所以无法正常工作。
3)异步刷新,结合上面个两种的优点,将所有行的刷新均匀的放在每个时间段内。这个时间段的计算方式就是用刷新周期/行数。第三种方式又充分利用了时间,又使得“死机”对系统的影响降到了最小,为最优的方式。(就是不知道电路设计难不难...)
image
存储器的存取过程,了解即可,只需要知道存取周期除了存取时间还有一个恢复时间即可。

接下来是只读存储器,ROM(Read Only Memary)
image
ROM只需要了解其分类即可,包括掩膜式ROM(MROM),一次可编程只读存储器(PROM),可擦除可编程只读存储器(EPROM),闪速存储器(Flash Memary),U盘就是闪存,以及固态硬盘,人们根据期望不同,用ROM设计出不同的器件达到目的,比如固态硬盘速度就比RAM慢的多,但容量大,当作仓库用再好不过.
接下来是存储系统比较零碎的概念。
image
首先存储系统总的分为,Cache,内存/主存,外存/赋存,而外存属于外设,归IO接口关,Cache直接和CPU打交道,因为速度相近,内存和Cache打交道。
image
存储系统的多级存储系统的组成。
目的便是使整个计算机的速度和最快的CPU的速度一样,而整体的容量和最大的容量磁盘的容量一样,在不断权衡效率和成本的前提下,形成了这种多级存储系统。也像极了社会构成,人体的构成不也是一样吗?大脑用少量的细胞数量占据大多数的能量,四肢细胞数量大但能量消耗少,一切都是自然选择后的结果。
接下来使扩展的一些知识
image
如果位数不够用,则采用位扩展,即同一组地址线,同时控制多个存储器芯片,只不过输出的数据线,依次连接到CPU的数据线即可,读写信号也是相同的,即这几个存储器芯片当作一个芯片看待,每个芯片只保留不同位而已,所以输入的都是相同的,输出依次串起来即可。
image
另一个扩展便是子扩展,也就是存储单元不够了,需要增加存储单元的数量,连接方式,首先位数是够的,我们把每个芯片的输出都与CPU相连,因为我们扩展数量,只是确定哪个芯片在工作即可,同时每次也只有一个芯片在工作。原本输入的地址线还是全部芯片和CPU相连,之后片选信号连接译码器再和CPU的高位相连,即高位确定用哪个芯片,低位决定用哪个存储单元,这样就实现了子扩展。
image
当字和位同时扩展时,可以先进行位的扩展,位的扩展完后进行字的扩展,可以这样理解,子扩展就是分组,位扩展就是每组内进行相互协作。
image
局部性原理主要分为两类,空间局部性和时间局部性,顾名思义,空间局部性大概就是最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间时相近的,时间局部性是指最近的未来要用到的信息,很可能就是现在正在使用的信息。
image
相关概念,命中率就是要访问的数据在Cache中的比率,缺失率就是不再Cache中的比率。
接下来就是Cache的相关知识了。
image
Cache作为CPU和内存打交道的中间缓冲地区,肯定是由相关问题存在的,首先就是主存中的信息怎么放在Cache中,其次便是Cache如果满了怎么办,最后如何保持Cache和主存内容的一致性,通过这三个问题就可以大致的理解Cache的工作原理了。
image
首先便是全相联映射,采用空位随意放的形式,由于Cache中的一行对应主存中的一个块,所以首先需要得出Cahce中的一行所需的块内的地址数(相对主存而言的),例如在本题中,行长64B,按字节编址,故64个地址,需要6位地址位,则对于主存中的标记需要28-6=22位,加上有效位是23位。
image
直接映射方式,是按照顺序依次存放,这样就相当于,拿一个Cache块在主存中依次扫描的过程,所以想要知道Cache中的内容是主存中的哪些块时,所需要的标记位只需要拿主存的地址为减去Cache容量的地址位即可,因为Cache这里就相当于作为一个整体了。
image
最后一种方式时组相联映射,结合以上两种方式的优缺点形成的方式,首先对Cache分组,按号分组,组内随意放,所以所需的标记位只需要主存的总的地址为减去子块内地址减去分组形成的位数即可。
image
三种映射方式的区别,重点还是知道怎么计算标记位,而Cache存储的内容便是标记项+数据。
image
四种替换算法,了解即可。
image
对于Cache向内存修改时,一般有两种方法,一种是写回法,类似于线段树的懒标记,标记一下不立即写回,在需要时再写回。
image
另一种时全写法,修改Cache就修改内存,但通常有一种写缓冲放在Cache和内存之间,用以缓解。
这都是命中时实施的策略,当未梦中时,是直接访问到内存了这个时候要修改Cache中的值吗?
写分配法:访问内存时,直接将内存中的块调到Cache中,这样就变成命中时的场景了。
非写分配法:访问内存时,只修改内存中的值。
一般来说,写分配法搭配写回法,运用程序局部性原理,而非写分配法搭配全写法。
image
注意:写回法和写分配法是需要额外一个脏位(修改位)。
接下来就只剩下了虚拟存储器了,加油!!!
image
首先,虚拟存储器这个概念就是一个逻辑模型,功能就是用户给出一个逻辑地址,虚拟存储器就可以给出对应的物理地址,更多的像是一个逻辑映射关系。
image
首先是页式虚拟存储器,虚拟空间和主存空间都被划分成同样大小的页了,主存的页叫做实页,虚存的页叫做虚页。
虚页由虚页号和页内地址组成,实页由实页号和页内地址组成,其中两者的页内地址完全相同,只需要虚页号向实页号转换即可。
虚页号需要和一个页表起始地址相结合,形成一个页表项地址,然后根据页表,最终得到实页号。
image
第二种虚拟存储器就是段式虚拟存储器,并没有页式提前划分好大小,而是根据实际情况划分的段,还是虚地址由段号和段内地址构成,段号和段表起始地址相结合形成段表项地址,去段表中查询,将查到的信息和段内地址相结合最终得到主存地址。
image
第三种是将两者的结合,先分段后分页,所以虚拟地址的组成就是由段号+段内页号+页内地址号构成,了解即可。
image
首先页表和段表都是放在主存中的,所以我们可以将常用的一些页表放在Cache中,这样,放在Cache中的表称为快表(TLB),放在主存中的表称为慢表。当逻辑地址过来时,我们先访问快表,若命中,则直接生成实地址,未命中的话访问慢表,慢表命中说明东西在主存中,生成实地址,慢表未命中,说明东西不在主存中,将辅存中的东西放到主存中之后再从头开始。有了实地址以后,还是先去Cache中找东西,看看命中不,不命中就去主存找东西,命中直接在Cache中找数据即可。
完结,撒花★,°:.☆( ̄▽ ̄)/$:.°★

posted @ 2023-05-30 23:16  逆天峰  阅读(53)  评论(0编辑  收藏  举报
作者:逆天峰
出处:https://www.cnblogs.com/gcfer//