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

本文阅读 41 分钟
首页 代码,Java 正文

存储器是计算机系统中的记忆设备,用来存放程序和数据

1.存储器分类

img

1.1按照存储介质分类

  • 半导体存储器 TTL、MOS 易失
  • 磁表面存储器 磁头、载磁体 非易失
  • 磁芯存储器 硬磁材料、环状元件 非易失
  • 光盘存储器 激光、磁光材料 非易失

<font size="4"> 电脑断电后信息会全部丢失的存储器是<font color="red">随机访问存储器。</font>
随机访问存储器是内存的一种。内存是电脑的记忆部件,用于存放电脑运行中的原始数据、中间结果以及指示电脑工作的程序。
<font color="red">内存可以分为随机访问存储器和只读存储器,前者允许数据的读取与写入,后者的信息只能读出,不能随意写入,即使断电也不会丢失。
ROM , 只读存储器,(顾名思义,只是读取调用,不能更改) 一旦储存资料就无法再将之改变或删除,也就是断电之后不会丢失。
RAM,随机存储器,存储单元的内容可按需随意取出或存入, 断电后数据就丢失。磁盘中的程序必须被调入内存后才能运行,中央处理器可直接访问内存,与内存交换数据。电脑断电后,随机访问存储器里的信息就会丢失。</font></font>

1.2按照存取方式分类

①存取时间和存取单元位置无关(随机访问)

  • 随机存储器(RAM)
    - 存储器中任何存储单元的内容都能被随机存取,和存取时间和存储单元的物理位置无关,这种存储器叫做随机存储器 - 随机存储器在程序的执行过程中可读可写
  • 只读存储器(ROM)
    - 在程序的执行过程中只读

②存取时间和存取单元位置有关(串行访问)

  • 顺序存取存储器 磁带
    - 存储器只能按照某种顺序来存取,那么这种存储器就是顺序存取存储器,它的存取周期较长
  • 直接存取存储器 磁盘
    - 沿着磁道方向顺序存取,垂直半径方向随机存取

③按照在计算机中的作用分类 img

2.存储器的层次结构

2.1.存储器的三个主要特性的关系

img

img

2.2缓存-主存层次和主存-辅存层次

计算机的主机由CPU和主存储器构成 CPU可以从主存中读取信息,也可以把信息存到主存中,但是主存的容量是有限的,如果程序足够大的话,主存是存不下的,需要辅助存储器帮忙存储,不过程序的运行还是得通过主存 img

img img

2.1主存储器概述

1.主存储器的基本组成

主存由存储体(程序,指令,数据都是存储在存储体中),MAR,MDR构成 MAR当中保存了我们要访问的那个存储单元的地址,必须要进行译码器译码以后,我们才可以选定指定的存储单元 MDR中保存了我们读出或者写入的数据 这个数据是读出还是写入需要通过读写电路和控制电路来控制 如果是写入的话,则把数据从MDR送入指定的存储体的存储单元中 如果是读出的话,那么存储单元的内容就会被送到MDR中 方向的控制是由读写电路来控制的 img

2.主存和CPU的联系

img

数据总线完成CPU和主存的信息传输 地址总线给出要访问的内存单元的地址

3.主存中存储单元地址的分配

img

假设存储字长为32位(对存储器的某一个单元进行读或写的话,一次最多读或写32位0,1),主存的编址单位是字节,每一个字节都有自己的地址。在这种情况下,一个存储字是32位,一个字节是八位,都有自己的地址。 那么12345678H这个数据怎么在主存储器中进行存储? 一种方法是高位字节地址作为存储器的地址(字地址),这种方式也叫大端方式

第二种方法是低位字节作为字地址,这种方式叫做小端方式 img img 上面的计算我第一次学的时候,也是晕晕的,不知道什么意思,我找到了比较好的回答,大家一起学习。 img 简单来说, 如果是按字节寻址,那么字节的每一位都可以作为地址编号的一部分,如果是按字寻址,因为一个字由多个字节组成,就需要区分不同字节的位置,就会损失一定的位数。

几个常见单位换算来给大家说明一下

1Byte=8bit  Byte简写为B,比特简写为b

1KB=2^10Byte

1MB=K*KB=2^20B

1GB=K*MB=2^30B

1TB=K*GB=2^40B

4.主存的技术指标

①存储容量 主存存放二进制代码的总位数 ②存储速度

  • 存取时间(从存储器给出地址到获得稳定的输入输出) 存储器的访问时间
    - 读出时间 写入时间
  • 存取周期
    - 连续两次独立的存储器操作(读或写)所需的最小间隔时间 - 存取周期一般大于存取时间

③存储器带宽

  • 单位时间内存储器存取的信息量,用字/秒、字节/秒或位/秒表示
  • 衡量数据传输速率的重要指标,决定了以存储器为中心的计算机系统获得信息的速度,是改善机器性能瓶颈的一个关键因素

2.2半导体存储芯片简介

1.半导体存储芯片的基本结构

img

<font size="4" color="blue">0,1代码放在存储矩阵中,里面存放每一个二进制位,存储矩阵由大量相同的位存储单元阵列构成。
地址线是输入的,CPU给出地址,外部设备给出地址,表示要存或者要取的数据在存储矩阵的哪一个存储单元中,通过译码驱动电路,选择指定的存储单元,完成读写操作
片选线是芯片选择信号,它指出了这次操作给出的地址是不是针对这个存储芯片的地址,被选择的存储单元是不是在这个存储芯片中。
<font color="red">片选线确定哪一个存储芯片被选中,可以用于容量扩充</font></font>

img img img

<font size="4" color="blue">16K × 1说明芯片的存储容量是16K,每一个存储单元保存1位信息。
如果我们用8个这样的芯片,对8个芯片同时进行读写,这8个芯片构成一组,这8个芯片就构成了16K × 8位的存储器
为了满足题目的需求,我们就应该布置4组这样的芯片。
每一组的8个芯片要同时进行工作
<font color="red">接下来对地址空间进行划分
第一组芯片: 0到16K-1
第二组芯片:16K到32K-1
第三组芯片:32K到48K-1
第四组芯片:48K到64K-1
如果我们要访问的地址是65535,也就是64K-1,按照我们划分的规则,它应该在第四组芯片,此8片的片选有效。片选信号看到这个地址后,就选择第四组芯片,其他三组芯片的片选信号是无效的,也就是高电平,最后一组对应的信号是低电平,也就是有效的。
<font color="bigred">片选信号的作用是让某个芯片或者某些芯片同时进行工作。</font></font></font>

2.半导体存储芯片的译码驱动方式

<font size="4" color="blue">什么叫做译码驱动方式?
译码驱动方式就是说,给出存储单元的地址后,怎么找到指定的存储单元,可以有两种方式来找到指定的存储单元,这两种方法是:
<font color="red">①线选法
②重合法</font></font>

线选法

在这里插入图片描述
<font size="4" color="blue">给出A0到A3四位地址,说明有16个存储单元,每一个存储单元有多少位,就需要看数据线,数据线是从D0到D7,说明有8位,这个存储器是16×8
<font size="4" color="red">接下来看看工作过程
如果给出的地址是全0,被译码后的信号只有0的这根线是有效的,其他的线是无效的。
如果现在进行的是读操作,读信号会控制电路的通路打开,使数据可以从存储矩阵送到数据总线上,只有给定的单元才可以数据的输出
<font color="blue">这种方法对容量稍微大一点的芯片来说是不合适的</font></font></font>

重合法

在这里插入图片描述
<font size="4" color="blue">线性法进行布局的时候,实际上是把它布局成线性数组,重合法进行布局的时候,实际上是把它布局成二维阵列
<font size="4" color="red">行地址和列地址都只能有一条线是有效的</font></font>

2.3随机存储器

img

信息重写的过程叫做刷新

2.3.1静态RAM(SRAM)

存储器就应该要有存储元件,存储元件要能保存0,1,学习静态RAM我们需要考虑下面的几个问题:

  • 保存0,1,的原理是什么
    - 我们可以用开关来表示0,1,用开表示1,关表示0 - 我们也可以用熔丝来表示,熔丝如果是连通的,我们就认为里面保存的是1,如果断开的,则认为里面保存的是0.如果用熔丝来做的话,那么我们把0,1保存进去后是很难修改的 - 在数电中,我们学习的触发器可以用来来保存0,1
  • 基本单元电路的构成是什么
  • 对单元电路怎么进行读出和写入
  • 典型芯片的结构是什么样子的
  • 静态RAM芯片怎么进行读出和写入操作

2.3.1.1静态RAM基本电路

img

<font size="4" color="blue">T1~T4触发器是双稳态的触发器,一端是触发器的Q端,另一端是触发器的非Q端。 T1~T4解决了用什么样的电路来存储0,1
T5,T6是行开关,用来解决我们对存储元件进行读或写,是由行地址选择来控制的,一旦行地址选择有效,这两个管子就会有效
T7,T8是一列共用</font>

静态RAM的读操作 静态RAM的写操作

2.3.1.2静态RAM芯片举例

①Intel 2114外特性 img

WE是是读写控制线,当WE是低电平有效的时候,表示写操作。CS信号是片选信号,只有CS信号是低电平的时候,2114芯片才会被选中

<font size="4" color="blue">A0~A9是地址线,一共有10条地址线,说明2114芯片有1K个存储单元。
I/O1~I/O4一共有4个数据线,每个存储单元被选中可以读出或写入4位信号,说明每个存储单元有4个基本电路
这个芯片的存储容量是1K × 4位,一共是4K个基本单元电路</font>

②Intel 2114RAM矩阵(64×64) 读操作 img ③Intel 2114矩阵(64×64)写操作 img

2.3.1.3静态RAM的读写周期

img img

2.3.2动态RAM(DRAM)

需要注意下面的几个问题

  • 保存0和1的原理是什么
  • 基本单元电路的构成是什么
  • 对单元电路如何进行读出和写入
  • 典型芯片的结构是什么样子的
  • 动态RAM芯片如何进行读出和写入操作
  • 动态RAM为什么要刷新,刷新方法是什么

<font size="4" color="blue">动态RAM可以用电容来保存0和1,电容中如果存储电荷,我们认为它存储的信息就是1,如果电容没有被充电,也就是没有电荷,我们认为保存的信息就是0</font>

2.3.2.1动态RAM基本单元电路

img img

<font size="4" color="blue">信息保存在电容Cg
T1~T3是控制管,通过这三个控制管,进行读出和写入。
如果读选择线有效,那么T2这个管就会导通
如果写选择线有效,那么T3这个管就会导通
<font size="4" color="red">接下来看基本工作过程
<font size="4" color="bigred">T4是预充电管,如果预充电信号有效的话,T4就会打开,VDD通过T4对读数据线进行充电,使读数据线变成高电平。如果我们进行读出的话,读选择信号线有效,T2这个管子导通。假设Cg中保存的信息是0,Cg这个电容没有进行充电,T1不会导通,读数据线就会保持高电平。
<font color="red">读出与原存信息相反
写入与输入信息相同</font></font></font></font>

2.3.2.2动态RAM芯片举例

①三管动态RAM芯片(Intel 1103)读 img

<font size="4" color="blue">有10根地址线,说明芯片的存储容量是1K,每次读出或写入只有1位

行地址经过译码以后产生的信号,每一个每一行都对应两个控制信号,读选择信号和写选择信号,读和写用不同信号来控制。在行地址译码器中,参加译码的不仅有地址,还有读写控制信号。如果是读控制信号,则读选择线有效

<font color="red">来看看读操作
<font size="4" color="blue">以上面的图为例,如果行地址是0,进行的是读操作,则第0行的读选择线有效,第0行的所有单元都被选中,要进行读操作。

列地址是5个0,则第0列被选中,那么第0行和第0列交叉的单元被选中,这个单元通过读数据线把数据送到读写控制电路中,同时可以向外进行输出,就完成了读操作


<font color="red">为什么需要使用刷新放大器?
因为我们是采用电容存储电荷的原理来存储信息的,电容会漏电,经过一段时间后,电容上的信号会消失</font></font></font></font>

②三管动态RAM芯片(Intel 1103)写

img ③单管动态RAM 4116(16K ×1位)外特性 img

<font size="4" color="blue">从容量上来看,16K我们需要14根地址线,但是4116芯片只有7根地址线,实际上它需要14个地址,这14个地址是分两次来进行传送的。
第一次7根地址线接收到的是行地址,然后存在行地址缓存器中,然后接收7位的列地址,行地址和列地址经过译码以后,选中指定的单元进行输入和输出。I/O缓冲器完成数据的输入和输出的缓冲</font>

<font size="4" color="blue">行地址和列地址分别存储在行地址缓存器和列地址缓冲器,经过译码以后,选择指定的存储单元,然后在读写信号的控制下,完成对存储单元的读和写操作</font>

<font size="4" color="blue">这个芯片有自己的小的控制器,就是最上面的那个时序与控制的图,有行选通信号,列宣统信号和读写控制信号作为输入,产生行时钟,列时钟和写时钟。行时钟,列时钟控制了内部的读和写操作</font>

④4116(16×1位)芯片读原理 img

<font size="4" color="blue">16K的基本单元电路放在128行,128列上,上面的图像中,竖的是行,横的是列。

读放大器的一端如果是1的话,那么另外一端就是0

在读放大器的左边,如果电容有电,那么传出来的数据就是0,如果读放大器的右边,电容有电,传出来的数据就是1</font>

⑤4116(16×1位)芯片写原理 img

2.3.2.3动态RAM的刷新

<font size="4" color="blue">动态RAM是通过电容存储电荷的原理来存储信息,电容做得很小,容易漏电。如果一段时间内,我们不对电容的信息进行重写的话,那么信息就会丢失


<font color="red">刷新只和行地址有关
每次刷新操作都刷新动态RAM的一行所有的基本单元电路,每次刷新都是刷新一行的所有数据
在这里插入图片描述
在这里插入图片描述
如何刷新? —有硬件指出,读出一行的信息后重新写入,占用1个读/写周期。
接下来看看在什么时刻进行刷新</font></font>

①集中刷新(假设存取周期是0.5μs) 动态RAM中的电容要刷新的话时间一般是2ms。以128×128矩阵为例 集中刷新是在规定的一个刷新周期内,对芯片存储单元集中一段时间逐行进行刷新,此刻必须停止读/写操作。

<font size="4" color="blue">集中刷新就是把刷新时间集中在一起,在2ms内要求对所有的行进行刷新,动态RAM有128行,要求2ms内对这128行进行刷新

若存取周期为 0.5 μs,刷新周期为 2 ms(占 4 000 个存取周期),则对 128 行集中刷新共需 64 µs(占 128 个存取周期),其余 的 1936 µs(共 3 872 个存取周期)用来读/写或维持信息。由于在这 64 µs 时间内不能进行读/写操作,不管是CPU还是I/O都无法和动态RAM进行信息交换,所以这段时间是不能用的,称为“死时间”,又称访存“死区”。
如果在死区,CPU或者I/O需要进行时间的读出或写入,就必须进行等待</font>

②分散刷新(存取周期位1μs) img

<font size="4" color="blue">分散刷新是指对每行存储单元的刷新分散到每个存取周期内完成。

其中,把机器的存取周期 tc 分成两段,前半段 tM 用来读/写或维持信息,后半段 tR 用来刷新,即 tc = tM + tR。

若读/写周 期为 0.5 μs,则存取周期为1μs。

仍以 128 x 128 矩阵的存储芯片为例,刷新按行进行,每隔 128 μs就可将存储芯片全部刷新一遍,2ms的话每行被刷新了15.6次,被过度刷新了,降低了性能</font>

③分散刷新和集中刷新结合(异步刷新) imgimg

<font size="4" color="blue"> 如果2ms要刷新128行,那么每经过15.6μs刷新一行就可以了,我们就把2ms分成128份,每一份15.6μs在每一段时间里面,对其中的某一行进行刷新</font>

2.3.3动态RAM和静态RAM的比较

2.4只读存储器(ROM)

img

只读存储器一般用来保存系统程序或者系统信息,开机后的一些信息,其他更详细的信息放在RAM中,ROM通常保存一些固定的信息

接下来看看ROM的发展历程

  • 早期的只读存储器-----在厂家就写好了内容
  • 改进1--------用户可以自己写,不过是一次性的,如果要修改程序就得重新买芯片,原有的芯片的数据不能够擦除
  • 改进2------可以多次写------并且可以对信息进行擦除(早期的时候,那些可以擦除信息的芯片的设备要单独购买,不是很方便)
  • 改进3------电可擦写-----需要特定设备
  • 改进4------电可擦写------直接连接到计算机上 img 掩膜ROM

img PROM (一次性编程) img img EPROM(多次性编程)

N型沟道浮动栅 MOS电路(可用紫外线照射擦除,费时间) img

2.5CPU和存储器的连接(重点难点)

CPU执行的指令需要的数据都保存在主存储器中,运行的结果也保存在主存储器中,所以CPU和存储器要进行正确的连接,才能实现他们之间信息的交换

一般来说,CPU的地址线比较多,寻址范围也比较大。要构成主存储器,需要多个存储芯片共同组成。

2.5.1 存储器容量的扩展

单片存储芯片的容量有限,需要将若干存储芯片连在一起组成具有足够容量的存储器 所需芯片数量的计算公式img

位扩展:增加存储器的横向容量 字扩展:增加存储器的纵向容量

  • 位扩展
  • 字扩展
  • 同时扩展

2.5.1.1位扩展(为了增加存储字长)

img img

用2片1K×4位的存储芯片组成1K×8位的存储器 <font color="red">两个芯片要能同时工作,也就是要把两个芯片的片选用相同信号连接 在这里插入图片描述 增加存储字长 多个存储芯片的三组信号线关系 地址线和控制线公用 数据线单独分开</font>

2.5.1.2字扩展(增加存储字的数量)

img img img img

增加存储单元的数量 多个存储芯片的三组信号线关系 地址线和数据线公用 读写控制线公用 片选使能控制线独立,通过地址的高位字段进行译码决定img

2个芯片不能同时工作

<font size="4" color="blue">对第一个芯片来说,它用的地址线是A0~A9,如果A10为0,我们就选择第一个芯片,A10如果为1.我们就选择第二个芯片,A10就是我们的片选信号

从00000000000~01111111111 ,这1K的存储空间分配给第一个芯片
从10000000000~11111111111 ,这1K的存储空间分配给第二个芯片</font>

2.5.1.3字、位扩展

img 通过A10,A11来判断我们要访问的芯片是哪一组 00选择第一组芯片 01选择第二组芯片 10选择第三组芯片 11选择第四组芯片 可以使用24译码器

2.5.2 存储器与CPU的连接

img img

2.5.2.1例题讲解

img img ①写出对应的二进制地址码 img

<font size="4" color="blue">我们可以看成出A15到A11是固定的,A10到A0是连续的地址,从全0到全1,一共是2K×8位,这部分存放系统程序
在这里插入图片描述
<font size="4" color="blue">我们可以看成出A15到A10是固定的,A9到A0是连续的地址,从全0到全1,一共是1K×8位,这部分存放用户程序,1K×8位我们可以用两个1K×4位的芯片</font></font>

②芯片的选择

<font size="4" color="red">对应系统程序区,我们应该选择ROM,用1片2K×8
用户程序区要可读可写,选择RAM,用2片1K×4</font>

③分配地址线 img

<font size="4" color="blue"> 根据74138译码逻辑关系,必须保证控制端G1为高电平,G2A和G2B为低电平,译码器才能正常工作
A15始终为低、A14始终为高,分别接G2A和G1;而MREQ低电平有效,接G2B
剩下A13、A12、A11,分别接译码器的输入端C、B、A译码结果为4(Y4有效),选中ROM;译码结果为5(Y5有效),与A10一起通过与门,都为低电平有效时,选中2片RAM</font>

img

例题 img img img

2.6主存储器–存储器的校验

<font size="4" color="blue">存储器里面存放的数据如果发生错误,就会导致我们运行的程序错误,所以要对存储器的信息进行检验</font>

要解决的问题

  • 为什么要对存储器的信息进行校验?
  • 为了能够校验出信息是否正确,如何进行编码?
  • 纠错或检错能力与什么因素有关?
  • 校验出信息出错后是如何进行纠错?
  • 除了我们教材上讲的校验码,你还知道哪些容错编码?原理是什么?

编码的检测能力和纠错能力与任意两组合法代码之间二进制位的最少差异数有关

如果出错后的代码依然是合法代码,计算机压根检测不出出错的代码

编码的最小距离

<font size="4" color="blue">编码的最小距离就是指任意的两组合法代码之间二进制位数的最少差异

编码的纠错,校错能力和编码的最小距离有关
相关的检验方法详细看本专栏的第二章</font>

2.7提高访存速度的措施

  • 采用高速器件,让内存速度更快
  • 采用层次结构Cache-主存,把常用信息放在Cache中,Cache由静态RAM做的,速度快,集成度高,功耗低
  • 调整主存结构
  • img
  • img

img 假设CPU是16位,存储器的存储字长是64位,CPU每一次访问存储器,都可以访问出4个机器字,这4个机器字,每一个都可以是一条机器指令,又或者是长度为16的数据。 CPU一次把这四个值取出放在数据寄存器中,下一次在用的时候,就可以直接把需要使用的指令或数据取走,用这种方法可以增加存储器的带宽。 但是这种方法也有问题,假设现在CPU要向存储器中某一共个存储单元写一共长度为16的字,它要先把字写到单字长寄存器中,然后再写入到4个字长的数据寄存器中,之后再写到存储器中。<font color="blue">这样产生的问题就是,我们可能只需要写一个16位,但是其他的48位也会写到给定的存储单元中,这就会造成给定的存储字有48位被修改了,这个修改可能是错误的修改. 第二个问题,如果我们要取出的数据或指令不是连续的存放在相邻的指令中的,那么我们取出的指令可能就只有一条是有用的,其他的指令并没有用 <font color="red">出现这些问题的原因:虽然每一个存储单元包括四个机器字,但是这四个机器字存取的时候是以整体的方式进行存取的 为了解决这个问题,我们可以采用多体并行的方式</font></font>

多体并行系统 (1)高位交叉 顺序编址 (2)低位交叉 各个体轮流编址

<font size="4" color="red">低位交叉的特点
<font color="blue">在不改变存取周期的前提下,增加存储器的带宽
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述</font></font>

高性能存储芯片也可以提高访问速度 (1)SDRAM(同步DRAM)

<font size="4" color="blue">在系统时钟的控制下进行读出和写入
CPU无需等待</font>

(2)RDRAM

<font size="4" color="blue">主要解决存储器带宽问题</font>

(3)带Cache的DRAM

<font size="4" color="blue">在DRAM的芯片内集成了一个由SRAM组成的Cache,有利于猝发式读取</font>

3.1.概述

3.1.1使用的原因

<font size="4" color="blue">Cache是为了避免CPU空等现象

CPU空等现象:IO设备与cpu都需要访问内存,IO设备优先级较高,速度较慢,因此cpu需要等待IO访问内存从而出现空等现象。将热点数据缓存在Cache中可以有效避免cpu空等现象,直接从缓存中访问数据.

CPU和主存(DRAM)的速度差异
在这里插入图片描述
<font color="red">程序访问的局部性原理
时间局部性原理:当前正在使用的数据或指令在不久的将来还会被使用,那么当前正在使用的指令或数据,我们应该放到Cache,将来在使用的时候,就直接从Cache中取出
空间局部性原理:当前正在使用的数据或指令在不久的将来,相邻的指令或数据可能被用到,我们就把当前正在使用的数据或指令从内存中放到Cache,同时还需要把相邻的指令和数据也放入到Cache中。</font></font>

3.1.2Cache的工作原理

在这里插入图片描述
<font size="4" color="blue">如果我们把主存和Cache分成若干块,那么CPU给出的内存地址就可以分成两个部分,一部分是块内偏移地址,它的位数决定块的大小,比如说一个块包含16个字节,并且内存的编址单位是字节,那么块内地址部分就是4位,剩余部分就是主存块号。
一个块在内存和Cache之间传送的时候,是整体进行传送,块内字节顺序不会发生变化。

<font color="red">所以,内存的块内地址部分和Cache的块内地址部分的值是完全相同的。

<font color="blue">Cache中的标记,标记了主存块和Cache块之间的关系。如果一个主存块调入Cache块中,我们就可以把主存块号写到标记当中。将来CPU给出一个内存地址,它希望在Cache中访问到这个数据,它要首先确认这个块是否已经送到了Cache中,它就需要拿给出地址的主存块号和Cache中的标记进行比较。如果和某一个标记刚好相等,并且这个Cache块是有效的,这个块里面就保存了在内存中要访问的信息,它就可以直接从Cache中获取这些信息,它的速度就会大大提高

<font color="red">主存和缓存是按照块来存储的,块的大小相同</font></font></font></font>

命中和未命中

<font size="4" color="blue">缓存有C块,主存有M块,M>>C,主存中只能有部分块被缓存到了Cache中。

在CPU访问主存时,如果要访问的主存块已经调入缓存中,它的缓存能取到相应的数据,就说<font color="red">命中</font>
命中,就说明主存块和缓存块建立了对应关系,可以用标记记录与某缓存块建立了对应关系的主存块号

如果要访问的主存块没有调入缓存,那么就说<font color="red">未命中</font>
</font>

Cache命中率

<font color="blue" size="4">命中率: 就是在Cache中访问到CPU要访问的字块的概率。设Nc表示访问Cache的总命中次数,Nm未访问主存的总次数,即未命中次数。命中率h=Nc/(Nc+Nm)
命中率与Cache的容量和块长有关。


一般每块可以取4~8个字
块长取一个存取周期内从主存调出的信息长度
Cache-主存系统的效率
<font size="4" color="blue">效率e和命中率有关
在这里插入图片描述
在这里插入图片描述</font></font>

3.1.3Cache的基本结构

img

<font size="4" color="blue">CPU要访问内存的话,它要给出地址,包括块号和块内地址,由于Cache和主存之间是以块为基本单位传输数据的,所以主存的块内地址可以直接送到Cache的块内地址,或者形成Cache的块内地址

我们利用块号在<font color="red">Cache的地址映射变换机构中,</font>去确认是否发生命中。如果发生命中的话,需要给出当前的内存块保存在哪一个Cache块中。如果没有命中,就需要查一下,Cache中是否还有空间可以存入主存块,如果有的话,就访问主存,把主存块装到Cache块中;如果没有空间的话,那么主存块装入的那些Cache块都是满的,我们就要启用Cache替换机构,由Cache的替换机构根据替换算法,来算出哪一些块要从Cache中退出,写回到主存,或者直接作废,并且把主存中要用的块写入到Cache块中,这就是Cache替换机构要做的

<font color="red">地址映射:</font>
主存中的一个块如果要放到Cache中,它可以被放到Cache的哪一个块或哪一些块中。

<font color="red">变换:</font>
把主存的块号转变成相应的Cache块号,或者把主存的地址转变成相应的Cache的地址,然后在Cache中找到相应的主存块进行访问

在主存和Cache之间是有一条直接通路的,通过这条通路,可以完成主存和Cache之间的信息交换

<font color="red">我们的信息以块为基本单位保存在Cache存储体中</font></font>

3.1.4Cache的读写操作

读操作 img

<font size="4" color="blue">读操作是由CPU发出的,CPU发出这个访问地址,由Cache的地址映射和变换来确认是否发生命中。如果命中,就直接从Cache取出信息。若未命中,则需先判断,Cache是否已满,即是否可以直接将主存中对应的块装入Cache,若是,则访问主存,通过数据总线先将指令和数据传送给CPU,再通过直接通路,将指令和数据传送给Cache缓存。如果Cache已满,则需要通过Cache替换机构来访问主存并替换Cache中的某一个块。</font>

写操作

<font size="4" color="blue">读操作是不会对内存中信息进行修改的,但是写操作可能造成主存和Cache中的信息不一致。

<font color="red">写操作需要解决Cache和主存的一致性问题,可以采用写直达法和写回法</font></font>

  • 写直达法
    - 写操作时数据既写入Cache,又写入主存 - 写操作时间就是访问主存的时间,Cache块退出时,不需要对主存执行写操作,更新策略比较容易实现
  • 写回法
    - 写操作时只把数据写入Cache而不写入主存 - 当Cache数据被替换出去时才写回主存

3.1.5Cache的改进

①增加Cache的级数 片载(片内)Cache 片外Cache ②统一缓存和分立缓存

3.2.Cache-主存的地址映射

img img 有效位0用来代表Cache还没有存入数据,1表示里面有数据

3.2.1 直接映射

<font size="4" color="red">直接映射就是说主存中任意给定的块只能映射在某一个指定的Cache块中,每一个Cache块可以和若干个主存块对应
在这里插入图片描述</font>

<font size="4" color="blue">根据主存储体和Cache存储体的大小,把主存储体划分成若干个和Cache存储体相等的区域,每一个区的大小和Cache存储体的大小相同,每个区包含的字块数和Cache存储体包含的字块数相同
在这里插入图片描述</font>

3.2.2全相联映射

img img

3.2.3组相联映射

img

<font size="4" color="blue">主存储器中的字块也进行分区,每个区的大小和Cache中的组数相同,Cache被分成几组,主存储器的每一个区就包含多少块
在这里插入图片描述
在这里插入图片描述</font>

3.3替换算法

img img img img img img img img img

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://zengyihong.blog.csdn.net/article/details/124472835
-- 展开阅读全文 --
安全面试之XSS(跨站脚本攻击)
« 上一篇 07-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复