【刷题】计算机组成原理:存储器(转)

原文地址:https://blog.csdn.net/redRnt/article/details/83445031程序员

重要考大题算法

1、存储器的分类编程

存储器是计算机系统中的记忆设备,用来存放程序和数据,从不一样的角度对存储器能够作不一样的分类。数组

一、按存储介质分缓存

  • 半导体存储器(又称易失性存储器):体积小,功耗低,存取时间短,电源消失的时候,所存的信息也随之消失。
  • 磁表面存储器(非易失性存储器):如磁盘
  • 光盘存储器(非易失性存储器):耐用,可靠,如光盘

二、按存取方式分异步

  • 随机存储器(RAM):任何一个存储单元内容均可以随机存取,像数组的下标,能够直接访问元素。访问速度较快,经常使用于制做主存和Cache
  • 顺序存取存储器(SAM):只能按某种顺序来存取,即与存取时间和存取单元的物理位置有关。(好比磁带)
  • 直接存取存储器(DAM):如磁盘
  • 相联存储器(CAM):按内容检索

三、按计算机中做用分工具

 

 2、计算机的层次结构性能

 

 存储器有三个性能指标,速度,容量,每位价格(位价)。
就通常而言,速度较高,位价越越高,容量越小。反之,速度越低,位价也越低,容量也就越大。
存储系统的层次结构主要体如今缓存——主存和主存——缓存两个存储层次上。如图:spa

 

 

  • 缓存——主存层次:这一层面主要解决CPU与主存速度不匹配的问题,主存用来存放将要参与运行的程序和数据。可是其速度与CPU相差很大,为了使得他们之间的速度更好匹配,因而在主存与CPU之间插入了一种比主存更快,容量更小的高速存储器(Cache),所以只要把近期要使用的信息调入缓存,CPU即可以直接从缓存中获取信息。注意,主存与缓存中的数据调动是由硬件自动完成,对程序员是透明的。
  • 主存——辅存层次:这一层面主要解决存储系统的容量问题,辅存的速度较低,可是容量大,用于存放暂时未用到的信息,当CPU要用到这些信息的时候,将辅存的内容调到主存中,供CPU直接访问,主存与辅存之间的数据调动是由硬件和操做系统共同完成的。

3、半导体随机存储芯片操作系统

半导体随机存储器芯片内集成有记忆功能的存储矩阵,译码驱动电路和读/写电路等等。

 

 读写电路:包括读出放大器和写入电路,用来完成读/写操做。
地址线:单向输入,其位数与芯片的容量有关
片选线:肯定哪一个芯片被选中(用来选择芯片)
数据线:双向输入,其位数与芯片可读出或者写入的位数有关,也与芯片容量有关。

存储容量

一般咱们将存储容量表示为:
字数 X 位数,好比 64K X8位,其含义为,以8位构成一个字,一共有64个字。这个概念要至关熟悉,后面理解题目颇有用。
下面咱们来看一道例题:

一个64K x 8位的存储器,能够由()个16k x1位的存储芯片构成?

分析:64K x 8位,说明该存储器是以8位构成一个字,所以,每读出一个字,须要选中8片16k x1位的存储芯片,而一片能表示16k,所以一共须要64/16 = 4片,根据组合的原理,一共须要4x8 = 32片。

 

 

从图中咱们能够看出,至关于把32个芯片分红了4组,每组8片(表示8位)。
因而咱们得出这样的结论:
在这里插入图片描述

 

半导体随机存取器,习惯上多称为RAM,按其存储信息原理不一样,能够分为静态RAM(SRAM)和动态RAM(DRAM)

 

SRAM

SRAM存储原件所使用的mos管多,占用硅片面积大,集成度低,可是采用触发器工做原理存储信息,所以即便信息读出以后,它仍然保持原状,不须要再生,可是电源掉电时,原存有的信息就会消失,所以它属于易失性存储器。由于这个比较的简单,所以就简单介绍一下就好:
工做原理:触发器
优势:

  • 能长久保存信息
  • 速度快,工做稳定
  • 无需刷新
  • 无需读后再生

缺点:功耗大,集成度低,价格高。
典型应用:cache

DRAM(这个是重点)

与SDRAM相比,DRAM所用的mos管少,占硅面积小,于是功耗小,集成度高可是由于采用了电容存储电荷的原理来寄存信息,会发生漏电现象,因此要保持状态不变,须要定时刷新,由于读操做会使得状态发生改变,故须要读后再生。且速度比SRAM慢。可是因为其功耗小,集成度高,被普遍应用于计算机中。
典型应用:主存

存储记忆原理

 

 

 定义:存“0”:C中没有电荷,存“1”:C中有电荷
读入的时候,T中的高电平使得T通导,若是此时C有电荷,那么数据线就会产生电流,视为读出1.不然视为读出0
写入的时候,若为高电平,则通过T对C充电,充电后有电荷,因而存1,若为低电平,C通过T时放电,C中没有电荷,因而存0.

DRAM的刷新

问:为何要对DRAM进行刷新?如何进行刷新?
因为动态存储器的原理是容存储电荷的原理,且访问存储单元是随机的,有可能某些存储单元长期得不到访问,其存储单元内原信息就会慢慢消失(缘由)。刷新的过程实质上是将原信息读出,再由刷新放大器造成原信息并从新写入的再生过程,称为读后再生。
下面介绍一下刷新过程当中要用到的名词。

  • 刷新周期:在规定的时间内,对DRAM所有基本单元进行一次刷新(即两次刷新之间的相隔时间),通常为ms级别,2ms。
  • 死时间:刷新时,某段时间须要暂停读写操做,这段时间因为外界不能对存储器进行操做,所以称为死时间。
  • 存取周期:DRAM完成一次读写操做所须要的最短期
  • 死时间率:

 

 

DRAM常见的刷新方式有三种:集中刷新,分散刷新,异步刷新
刷新的过程为:以行为单位,读出一行中所有单元的数据吗,通过信号放大后,同时写回。读出时候必定断开存储器的输出。

集中刷新:

作法:在刷新周期内,对所有存储单元集中一段时间进行刷新(逐行进行),此时必须中止读写操做。
看看下面的例题:

设对128 x 128矩阵的存储芯片进行刷新,若存取周期为0.5us,刷新周期为2ms,采用集中刷新的方式,那么对128行集中刷新,一共须要()us?死时间率为()%?

分析:刷新一遍的时间 = 存取周期 x行数,因而能够求得刷新时间。在刷新时间内,不能进行读写操做,所以死时间就是刷新的那段时间,占用的存取周期数值上等于行数。利用计算公式算出死时间率为32.%。因此很容易获得:

 

 

可是这种作法有个极其很差的缺点:对于常常要进行读入读出的程序,要陷入大量的等待时间,CPU的工做效率不高。

分散刷新:

作法:对每行存储单元的刷新分布到每一个存取周期内完成,其中吧机器的存取周期(记为tc),分红两个部分,前半段的tm用来记录读写,后半段(tr)用来刷新,即tc = tm +tr。如图:

 

 

若读写周期 tc = 0.5us ,那么存取周期tc = (0.5+0.5)us = 1us
如今沿用上面的题目:

设对128 x 128矩阵的存储芯片进行刷新,若存取周期为1us,刷新周期为2ms,采用分散刷新的方式,那么对128行分散刷新,一共须要()us?死时间率为()%?

分析:由于在读写操做以后,马上刷新,那么每读取操做一次,就会刷新一次,刷新128行就须要 1us x 128 = 128 us。因为刷新是在读写操做事后直接完成的,因此不存在死时间。也就是死时间率为0.
缺点:这样无异于加长了存取周期,会使系统运行速度下降,刷新操做也过于频繁。

异步刷新

作法:在刷新周期内对全部行各刷新一次,即每隔(刷新周期/总行数)us,刷新一次。这种方式是前面两种方式的结合,既能缩短死时间,又能充分利用刷新周期,提升刷新频率。

题目同上:

设对128 x 128矩阵的存储芯片进行刷新,若存取周期为0.5us,刷新周期为2ms,采用异步刷新的方式,那么对128行异步刷新,一共须要()us?死时间率为()%?

每隔(2ms/128) = 15.6us刷新一次,每一次刷新,死时间都是存取周期内的时间为0.5us,对于该行来讲,下一次轮到它刷新仍是间隔了2ms,因此死时间率为 1/4000.(2ms 里面有4000个存取周期)。因此;
1/4000 << 3.2%
若将DRAM的异步刷新安排在CPU对指令的译码阶段(此阶段CPU访问存储器),那么也就不存在死区。
4、ROM

ROM——只读存储器,顾名思义,只能读出不能写入的存储器。可是随着用户的须要,总但愿修改原ROM里面的内容。 ROM中一旦有了信息,就不能轻易改变,也不会在掉电时丢失,它们在计算机系统中是只供读出的存储器。所以,SRAM、DRAM都是易失性(挥发性)存储器,而ROM是非易失性的存储器。

 

ROM器件有两个显著的优势:

1. 结构简单,因此位密度比可读/写存储器高。

2. 具备非易失性,因此可靠性

在计算机系统中,既有RAM模块也有ROM模块,ROM模块中经常使用来存放:

- 系统启动程序和参数表,常驻内存的监控程序

- 操做系统的常驻内存部分,某些语言的编译程序及解释程序等。(因此操做系统是存在于RAM和ROM之中的)

ROM常分为如下几种:

1. 掩模型ROM(MROM):在制做mask时将信息(Program)编排进去。光刻成的ROM,所存信息与mask彻底一致,不可改变。故名全固定ROM。适合大批量生产已成型的产品。小量生产则成本上升(mask制做工艺复杂,周期长),因此,老是在一个计算机系统完成开发之后,才用掩膜ROM来容纳再也不做修改的程序或数据。如家电洗衣机、风扇的程序 2. 一次可编程ROM(PROM):只能实现一次编程,不得再修改。写入时,利用外部引脚输入地址,对其中的二极管键进行选择,使某一些被熔断,某一些保持原状,因而就进行了编程。

3. 可擦除可编程ROM(EPROM):能够由用户对全部信息进行有限次数的修改,可采用光擦,电擦等方式对内容进行改写。对信息擦除的时候,只能所有擦除。

4. 电可擦写PROM(EEPROM或E2PROM):利用高压擦写 可字节擦,也可全片擦。通常用在即插即用设备,它既有ROM的非易失性,又有RAM 的可读写功能,编程方便。

5. 闪速存储器(flash memory):简称闪存,在EEPROM基础上发展起来的新型电可擦除非挥发性存储器件。存储单元结构相似于EEPROM,主要差异是闪存的氧化层较薄,于是电擦性能更好。它从全片擦除/按字节擦除进步到部分(块)擦除,写入快,适合文件存储,而且擦写次数10万次以上,读取时间小;存储单元只需单个MOS管,结构更简单,容量更大。是替代磁盘的理想工具。不过在写入的时候,要擦除原有的数据,所以写入比读出的速度略慢。

 

EEPOR与闪存

 

早期的手机软件通常放在EEPROM中,打电话时,最后拨打的号码暂存在SRAM (相似于缓存),不是立刻 写入通话记录(记录保存在EEPROM中),由于当时正在通话,若是写入,影响质量 如今的主板,手机也用闪存.通常的手机,ROM=C盘,RAM=内存,SD卡至关于外存,硬盘 。笔记本也用闪存替代原来的磁盘。

 

5、主存扩容及其链接

 因为单片存储芯片的容量老是有限的,但很难知足实际的须要,所以必须将存储芯片连在一块儿才能组成足够的容量。这个过程简称主存扩容。常见的扩容方式有:字扩展。位扩展  字位同时扩展。主存与CPU的链接经过数据总线  地址总线  控制总线与CPU相链接。

 

 

其中:

地址线决定了CPU可寻址的最大内存空间。

控制总线(读写)指出总线周期的类型和本次输入输出操做完成的时刻。

MDR:数据寄存器,用来存入内存中读入/写出的信息。

MAR:地址寄存器,用来存放当前CPU访问的内存单元地址

主存扩容

位扩展

位扩展是指增长存储字长,例如,2片1K X4位的芯片,能够组成1K X 8位的存储器。

知足下列条件时,采用位扩展的方式:

  • 只加长每一个存储单元的字长,而不增长存储单元的数量
  • 芯片数=设计要求的存储器容量/选择芯片存储器容量
  • 芯片之间采用并联的方式

例以下题:

利用1K×4位的SRAM芯片,设计一个存储容量为1K×8位的SRAM存储器,问:须要芯片,地址线,数据线的数量各为多少?

分析:显然从1K X 4 位 ——>1k X 8位,字长不变,只是位长发生了变化。因此使用位扩展。因此,有:

(1)须要芯片数为:

(1K×8)/(1K×4)=2片

(2)须要地址线数为:

1k代表存储单元个数,1k = 2^10,说明有10根地址线。

(3)须要多少根数据线?

须要组成8位的存储器,8表明数据线的位数,每片芯片占4根线便可实现位扩展。

 

字扩展

这种方式仅仅增长了存储单元数,各单元位数不变。 以下题:

利用1K×8位的DRAM芯片,设计2K×8位的DRAM存储器(字扩展),问须要芯片,地址线,数据线的数量各为多少?

解析:显然从1K X 8 位 ——>2k X 8位,字数边长,位数不变,应该选字扩展。

(1)须要几片芯片? d=(2K×8)/(1K×8)=2(片)

(2)须要多少地址线? 2K个存储单元对应11根地址线

(3)须要多少数据线? 8位,即8条

字位同时扩展

这种方式是指即加长存储单元的数量又增长各单元的位数,字位同时扩展的时候,先进行位扩展,在进行字扩展。 例以下题:

利用1K×4位的存储芯片,组成4K×8位的存储器。问须要芯片,地址线,数据线的数量各为多少?扩展过程如何?

数据线条数等于存储字长,如存储容量64K*32bit,存储字长和数据总线是32(也是MDR的位数)

解析:

(1)共需几块芯片: (4K×8)/(1K×4)= 4×2=8

(2)须要几根地址线: 4K地址空间(存储单元的个数),须要12根地址线

(3)须要几根数据线: 8根。

(4)扩展过程:先进行位扩展,这个过程至关于分组,将2片1K×4位构成一组,利用位扩展,构成1K X 8位的完整存储单元(如何构成,继续往下看)。这样一共能够分红四组。再将这些分组视为一个完整的存储单元,进行字扩展。

主存与CPU的链接

咱们前面刚刚讲了理论上能够构成咱们须要的芯片,那么实际上如何经过那些地址线和数据线去链接主存与CPU呢?大体过程能够分红5步。

1. 选择合理的存储芯片 合理选择芯片,是指选择芯片的数量及其种类(即ROM仍是RAM)。一般来讲,ROM存放系统程序,标准子程序以及各种常数。RAM则是为用户编程设置的。在考虑芯片数量的时候,尽可能选择使得连线简单方便的芯片。

2. 地址线的链接 CPU的地址线一般要比存储芯片的地址线数要多,常见的作法是:将CPU的低位与存储芯片的地址线相连,CPU地址的高位通常用于扩充或者片选。例如CPU地址线为16位(A0-A15).1K X4位的存储器芯片仅有10根地址线A9-A0这个时候就能够将CPU的低地址段A9-A0与芯片A9 - A0相连。

3. 数据线的链接 这里跟地址线的链接不一样,这里要求数据线数必定要相同。,若是CPU数据线与存储芯片的数据线不一样,那么要先进行位扩展再链接。

4. 片选线的链接 片选线的链接是CPU与存储芯片可否正确工做的关键。存储器由许多存储芯片一块儿组成,哪一片被选中彻底取决于该芯片的片选控制端CS可否接受CPU的片选有效信号.。而片选的有效信号由与CPU的访问控制信号MREQ有关。

5. 读写命令线 读写线通常直接与存储芯片的读/写控制端相连,高电平为读,低电平为写

 

图解字扩展和位扩展

其实一开始学这个有点懵主要是书上给的实例都是立体图,你们很差观察,那么我手绘了一下大体的过程(手残莫嫌弃哈)。 例子咱们还用以前提到的,如今咱们用下图表示1K x 4 位的芯片:

位扩展是增长位长,链接方式是并联:

字扩展是字长,链接方式是串联(下图中最后一个数字是2047,我拍完照才发现,就不重画了,这里纠正一下):

因此很容易得出字为同时扩展的图片,我就不画了。

字,位扩展在CPU连线中的区别

问,在位扩展和字扩展中,CS分别是如何链接的?

答:在位扩展中全部片的CS连在一块儿,而字扩展则是采用将多出的地址线用来片选(一般CPU的位地址与芯片地址相连,高位用于片选)。

这里举个例子,假设两个4位的芯片构成一个8位的存储单元,确定是要将全部的芯片一同访问才能访问到8位。即两个芯片要一块儿选(看我画的图2),因此也就意味着全部的CS都连在一块儿。

可是字拓展中,是两个8位的存储单元,每次操做只能对其中的一个芯片单元操做,就是到底要选择哪一个芯片的问题。(认真看看我手绘的图3应该就懂了)

问:那数据线如何链接?

答,在位扩展时,每一个芯片的数据线分为低位高位链接。可是字扩展中每一个芯片都和全部的数据线进行链接

 

6、并行存储器

随着计算机应用领域的不断扩大,处理的信息量愈来愈多,而且现代计算机的I/O设备也在不断增长,所以,提升访存的速度已经成为了火烧眉毛的任务。因而就出现了并行存储器。 在介绍并行存储器以前,

先来介绍一个概念: 存储器的带宽:表示单位时间内存储器存取的信息量,可用字/秒或者位/秒表示。是衡量数据传输率的重要技术指标。存储器的带宽是决定了以存储器为中心的机器得到信息的速度。

能够经过下面的几种方式提升:

1. 缩短存取周期

2. 增长存储字长

3. 增长存储体

 

双口RAM

为了提升CPU访问存储体的速度,能够采用双端口的存储器,多模块存储器等技术,它们同属于并行技术。前者为空间并行,后者为时间并行。双口RAM的模型图以下:

该模型容许两个独立的控制器同时异步地访问存储单元。可是这种方式有时也会带来一些读取错误。例如:

1. 两个端口对同一个地址单元写入

2. 两个端口对同一地址单元,一个写入,一个读出。

(熟悉操做系统的朋友应该能看出来,这是个读者写者问题的模型),

一般的处理方式是设立一个置忙信号Busy,当遇到上述情况的时候,将busy置0.暂时关闭一个端口。 能够看出,这是一个从空间上并行的存储技术。

多模块存储器

咱们还能够从时间上并行并行存取。咱们知道CUP的速度要比存储器要快,若是咱们同时从存储器中取出几条指令,那么咱们就能够充分利用CPU资源,提升运行效率。 多体并行存储器,由多体模块构成,每一个模块都有相同的容量和存取速度,有独立的读写控制电路,地址寄存器和数据寄存器。

多体并行存储器分为高位交叉编址和低位交叉编址两种。

 

高位交叉编址

当程序按体内地址顺序存放,即一个体存满以后,再存入下一个体时,这种方式称为顺序存储,高位地址表示题号,低位表示体内地址(注意0 1 2 3....的顺序是从上往下的):

所以,CPU给出一次存储访问老是对一块连续的存储单元进行的,在多CPU系统中,不一样的CPU访问不一样的存储块,达到并行工做。 存储轨迹能够用下面的线条表示:

低位交叉编址

对应于高位交叉编址,低位交叉编址指的是将程序连续存放在相邻体中,又称交叉存储。(注意,0 1 2 3的顺序是从左往右的)

这种作法能够在不改变存取周期的前提下,提升存储器带宽,由于能够在一个访问周期下,访问多个不一样的存储体。适用于单处理器系统

存储轨迹能够用下图表示:

访存冲突

可是低位交叉存储可能致使访存冲突,当访存地址在相邻的四次访存中,出如今同一存储块内,就会发生访存冲突。

好比,下面有一组将要访问的地址序列(3 9 17 2),采用的是4体低位交叉存储(即4个存储体,从0开始编号)。

咱们能够经过计算得知3,9,17,2分别位于存储体3,1,1,2. 因为咱们的访存方式是一次性访问多个不一样的存储体,

好比这个是4体,一次性同时访问4个不一样的体,那么就分别是 0,1,2,3及其对应的其余存储单元。

因为访问的顺序存在体数重合,所以有一次访问是必定失败的,这就是访问冲突。

那么如何算给定访问序列的所在体数呢?

所在体数 = 序列号mod体数,好比3%4 = 3,9%4 = 1

两种并行存储器的访问时间

设存储器的模块数为n,存取周期为T,总线传输周期为i,当采用流水线方式存取的时候,: 1. 若采用高位交叉编址,那么连续读取n个字节所需的时间t1为: t1 = T +(n - 1 )i

2. 若采用低位交叉编址,那么连续读取n个字节所需的时间t2为:t2 = nT

3. 存储器的交叉模块数 m >= T/i

 

7、Cache工做原理

为何要引入Cache

cache,高速缓冲存储器,是一种以RAM为材料制成的高速存储器。引入的缘由主要有:

1. I/O设备向主存的访问级别高于CPU,在I/O访存期间,CPU将处于空闲状态。

2. 主存速度的提升始终跟不上CPU的发展,主存与CPU的速度明显不匹配

局部性原理

程序访问的局部性原理包括时间局部和空间局部性。前者是指最近将来要用到的信息极可能是正在使用的信息,这是由于程序存在循环。后者是指指令和数据在内存中都是连续存放的而且有些指令和数据每每会被屡次调用(如子程序,循环程序和一些常数)。所以只要将CPU近期要用到的程序和数据前从主存送到Cache,这样大多数状况下,CPU都能直接从Cache中取得指令和数据。

Cache的工做原理

Cache是一种容量小而速度快的高度缓冲器,由快速的SRAM组成,直接作在CPU内,速度几乎与CPU同样快,任什么时候刻都有一些主存块处于缓存之中,所以,CPU欲访问主存的时候,有两种可能: 1. 所须要的字已经在缓存中,因而CPU直接访问Cache,(一般一次传送一个字,主存不参与) 2. 所须要的字不在缓存中,那么此时须要将字所在的主存块整块一次调入Cache中,(即主存-Cache之间以块为单位进行传送 )。主存块调入缓存的过程,称为创建对应关系。

咱们将第一种状况称为 CPU访问Cache命中,简称Cache命中。第二种状况为不命中。因为缓存块数目远小于主存数,所以每一个缓存快要设立一个标识,用来代表当前存放的是哪个主存块。 Cache的容量与长度是影响Cache效率的重要因素,一般用命中率来衡量Cache的效率 。 在一个程序执行期间,设总的命中次数为Nc,访问主存的次数为Nm,那么命中率能够这样表示:

设Tc为命中时Cache的访问时间,那么Tm为未命中时的主存访问时间,那么平均访问时间为;

其中H为命中率,显然1 - H就是未命中率。 显然,越好的Cache,其Ta值越接近Tc(即H接近于1)。

Cache与主存之间的映射

在Cache中,地址映射是指把主存地址空间映射到Cache地址空间,在将主存块复制到Cache中的时候遵循必定的映射规则,标志位为1时候,表示其Cache映射的主存块数据有效。(注意与地址变换的区别,地址变换是指CPU在访存的时候,将主存地址按照映射规则换算成Cache地址的过程 )。 地址映射有三种方式:直接映射,全相联映射,组相联映射、

1. 直接映射

这种方式主存块只能装入Cache的惟一位置,若该位置已有内容,则产生块冲突,原来在Cache中的块将无条件被替换出去,直接映射的关系能够定义为:

j = i mod2^c

其中,j为Cache的块号或者行号。i为主存块号,2^c为Cache的总块数,所以主存的

只能映射到第0行,依次类推,其地址结构为:

CPU的访存过程:首先根据地址中间的Cache字块地址,直接找到对应的Cache块号,若块号的有效位为1,则表示命中,不然为不命中此时从主存中读取该地址所在的主存块号,并将其内容送到对应的Cache块并将有效位置1,同时将内容送到CPU。 缺点:这种方式映射不够灵活

2. 全相联映射 这种方式能够把主存数据块装入Cache的任意一块, 方式能够从已占满的Cache存储块中,替换出任一旧块,显然这种方式灵活,命中率也高,缩短了块冲突,与直接相联映射相比,其主存字块位数增长,使得Cache标记位增多地址变换速度慢。一般使用“按内容寻址的”相联存储器。其地址结构为:

3. 组相联映射

将Cache空间分红大小相同的组,主存的一个数据块能够装到组内的任一个位置,即组间采起直接映射,组内采起全相联映射。 若是把Cache分红Q组,每组有R块,那么有: i= j % q 其中i为缓存的组号,j为主存块号主存地址分为三个字段:

当组内2块的时候,称为2路组相联映射。

CPU访存过程:首先根据中间的组地址,找到对应的Cache组,若其标记位为1,说明命中,此时根据块内地址,在对应得Cache行中,存取信息,若不命中,那么此时从主存中读出该地址所在的主存号块,送到对应的Cache组的任一行,有效位置1,同时将内容送到CPU中。

下一篇将介绍一下Cache相关的算法跟计算。

 

7、Cache块中的替换算法

 前面咱们提到过,在Cache与主存之间的映射过程中,当遇到已有的主存块的时候,咱们的操做是直接进行替换的。由于对于直接映射来讲,每个主存块都对应映射到固定的一个Cache行中,所以在替换的过程当中,也就不须要什么替换算法了,直接进行替换就好。

 

替换算法

其余的两种方式,都须要考虑替换算法 常见的替换算法有:

- FIFO算法:即先进先出的算法,选择最先调入Cahce的字块进行替换,这种方式实现简单。可是因为老是以最先调入的Cache块为替换目标,没有按照程序的局部性进行。因此并不能提升Cache的命中率。由于最先调入的信息,之后可能还会用到。

- LRU算法:近期最少使用算法,这种作法替换的是近期用的最少的字块,较好的利用了局部性原理,可是须要时刻记录Cache各个字块的使用状况,以便肯定那哪一个字块是近期最少使用的。

- LFU算法:将一段时间内访问次数最少的存储块换出,每行设立一个计时器,每访问一次,计时器的数值加1,替换的时候,将最数值最小的Cache块替换出去。

- Rand算法:顾名思义,随机替换。

注意:Cache对于用户来讲是透明的,用户编程的时候,所用的地址是主存地址,用户并不知道这些主存块是否已经调入了Cache块中,由于主存与Cache之间的替换是由机器自动实现的。

Cache写策略

Cache的写操做比较复杂,由于对Cache块内写入信息,必须与映射的主存块内的信息彻底一致,那么如何使得cache与主存的内容一致呢?目前经常使用的方式有如下两种:

1. 全写法(write—through):又称写直达法,即在进行写操做的同时,写入Cache和主存,这样主存中的数据与Cache中的数据就能时刻保持一致。可是这样会致使访存次数的增长。

2. 写回法(write—back):即写操做的时候,只把数据写入Cache中,待到Cache块要被换出的时候,再写出到主存中,,为了识别Cahce中的数据是否与主存中的一致,因而在Cache中每一块都增设一个标志位(也称为“脏”位)。脏位有两种状态,清:表示未被修改过,这个块固然也与主存间的数据块的内容一致了;浊:则表示被修改过,内容与主存不一致,因而替换算法就将此块替换出去。并将浊位置为清。显然在计算机中用0和 1 来表示这两种状态

而上面的两种状态,都是对应于写命中的状况(也就是CPU要写的单元都在Cache上面),那么当CPU访问的数据块不在Cache中,那又该如何?

咱们也经常有两种作法:

- 写分配法:加载主存的块到Cache中,而后更新这一块。(因此经常跟写回法一同使用 )

- 写不分配法:对应于上面的作法,这个作法就是只是将要修改的内容写入到主存块而已,不进行与Cache之间的调块

 

Cache的改进

Cache的特性决定了它不能大容量的存储,因此目前咱们广泛采用多个Cache,主要的改进方面有1,增长Cache的级数。2将统一的Cache变成分立的Cache。因而有了多级缓存的概念。将缓存分为多个级别,越接近CPU,速度就越快,容量也就越小。因此指令Cahce和数据Cache通常都在L1(靠近CPU)的那一级别。随着集成电路的发展,又把一级缓存直接与CPU作 在同一个芯片上,称为片内缓存。其余的称之为片外缓存。

下面来看一道Cahce——主存映射的题目

其实有三问,可是咱们只须要了解一问就行了。接下来读题:

第一,主存容量为16mb,也就是2的24次方b,因此主存地址的总字段长度为24位。(否则表示不了那么多的地址)

第二,Cache容量的为8kb,根据前面的数据,咱们能够知道这个机器是用字节存储的,因此每一个字块8个字,每一个字32位。32位就是4个字节,即8 X 4B.,因此块内地址一共须要5位。

第三,咱们要肯定组内地址,也就是说Cache要被分红几组。咱们刚刚获得了块内的地址,那么这个时候咱们就知道了Cache一共有8kb/2^5 =2的8次方,也就是2的8次方块。 因而的得出组数为:2的8次方除以4(4块为一组) = 2的6次方。 因此组内地址字段为6.

第四,用总长度减去已知的两个长度,因而获得标记字段。

8、补充知识点:

  1. SRAM和DRAM在与CPU的链接上有什么不一样?

答:在实际中,DRAM芯片采用的是地址复用技术,至于什么是地址复用技术,自行查阅资料。作题只须要知道一点,那就是其地址线变为原来所须要的一半。片选的时候用两个跟线,一根用来选行,一根用来选列。(分别称为行通选线和列通选线)。

2. 按字编址与按字节编址。

通常的咱们经常使用 字数X位数的方式来表示计算机容量。好比8K X16位 表明的是这个存储器一共有8K个存储单元,每一个存储单元存放16位字。 咱们知道 1B = 8bit。

因此上面的8K X16位能够写成8K X 2B也就是16KB,因此上面的式子表示的容量又能够写成是16KB。所以,若是按字节编址,上面的式子应该表示为:

16K X 1B

若是按字编址,那么写法应该是这样的:

8K X16位(这个位数跟机器字长有关,题目会给)

3. 主存块与主存单元的区别。 主存块,是为了与Cache或者是与虚拟存储器更好的映射,从而按照必定大小分红的块(这里是我的理解,未经证明,慎重参考)。而存储单元是主存中一个个有编号的单元,就像8K X16位就有8k个这样的单元。从0开始编号。因此某个主存有8k个存储单元不等于其有8K个块,至于它在第几块,除一下就知道了。(后面有参看的题目)

 

4. 交叉存储方式何时会发生访存冲突? 交叉存储的特色就是一次性并行访问多个存储体,而且边访问边传输,达到提升访存速度的目的。假设有这样的一个4体交叉访问存储系统:

访问序列为 0 1 2 3 ,这个时候刚好刚刚一次访问完毕,由于各个序列号都位于不一样的储存体内,访存不会发生冲突。可是若是序列号为0 2 3 4呢?4显然跟0在同一个存储体,因为事先访问了0,因而在结束这一行的并行访问的时候,是在占用存储体1的,这个时候也就致使4访问不到。因而发生访存冲突。 因此得出结论,只要在相邻的m个序列中,存在位于同一个存储体中的序列,他们就会发生访存冲突。(假设有m个体)

5. 怎么计算所须要的地址线与数据线? 先回顾一下地址线与数据线的做用: 地址线:单向输入,其位数与存储字的位数有关 数据线:双向输入,其位数与读出或者写入的数据位有关。 地址线10根,数据线8根,那么芯片的容量能够表示为: 2^10 X 8 = 8K位,因此用这种方式很容易知道数据线与地址线的个数

第一题

分析:这道题考查的是DRAM与SRAM之间的区别,基本概念题。放在这里只是但愿能再熟悉一下基本的特色。秒选23.

第二题

分析:这两道都是概念题,记住就好。不管是SRAM仍是DRAM都是易失性存储器。因为ROM是只读的,断电不会失去数据,因此为非易失性。SRAM速度快,被普遍用于Cache的制做。刷新的问题就不说了。因此11选A。

再看看第二题,闪存是一种只读存储器(ROM),因此属于非易失性,采用随机存储方式,是理想的磁盘替代者。那么为何A不对。由于咱们说过,ROM的写入都是要擦除才能进行写入的。而读取操做不须要对主存进行什么改变,所以写操做必定是要比读操做要慢的,毕竟写以前要擦除。

第三题

分析:这四道题都是一类题。因此放在一块儿,一次性攻克。

引脚数,是指全部连线的个数(包括地址线,数据线,片选等等)。

1024 = 2^10.,数据线显然是8根。加上片选线,读,写线。加起来最少为21.

第二题却是干脆利落,32k = 2^15,秒选C

第三题,按照正常思惟,咱们须要10根地址线,8根数据线,可是题目说了地址复用技术,因此地址线减半,为5根。因此光是地址线+数据线就须要 5+8 = 13(根),加上两根读写线,两根通选线,因此最少为13+2+2 = 17(根)

第四题,有了上一题就好办了,注意题目问的是该DRAM的地址引脚跟数据引脚,没问其余的。因此4M = 2^22,须要22根地址线,可是注意了,DRAM是地址复用的,因此须要的是 11+8 = 19(根)。

第四题

分析:这是一道简单的计算题。若是题目没有特殊说明,通常的刷新周期取2ms。

1.异步刷新是按行一次刷新,缩短死时间,每一行之间间隔(2ms/64)刷新一次,而后向下取整,结果为31us。

2.集中刷新,其刷新一次所须要的时间 = 要刷新的行数 X 存取周期。死时间为6.4us,死时间率是指死时间占刷新周期的比例,结果为0.32%。

第五题

分析:这道题目颇有味道,能够说很经典,首先咱们要知道字位扩展的原理,扩展后的地址变化,二进制与16进制之间的转换。很精彩,我就手写一次。

第六题

分析:上一道题是给出容量算地址,这道题反过来,给出地址算容量。咱们先肯定这个地址空间包含多少个可用的地址: 5FFFH - 4000H + 1 = 2000H(为何加1?由于地址从0开始数的)。

一个16进制数用4个二进制数表示,因此2000H是2^13B(题目说了按字节编址)。也就是8KB。因此RAM地区为64 -8 = 56KB,因此,所须要的芯片数为(56K X 8位)/(8K X 4位) = 14

相关文章
相关标签/搜索