系统结构期末复习(五)存储系统

目录

  1. 存储系统的层次结构
  2. Cache基本知识
  3. 降低Cache不命中率
  4. 减少Cache不命中开销
  5. 减少命中时间
  6. 并行主存系统
  7. 虚拟存储器

1. 存储系统的层次结构

1.1 存储系统的层次结构

走出容量价格和速度三者困境的唯一方法是采用多种存储器技术,构成多级存储层次结构

  1. 程序访问的局部性原理
    时间局部性和空间局部性:对于绝大多数程序来说,程序所访问的指令和数据在地址上不是均匀分布的,而是相对簇聚的。时间:现在用到的是将来用到的,如循环;空间:将来用到的在现在的附近,如顺序执行。
  2. 存储系统的多层次结构
    在存储层次中,各存储器之间一般满足包容关系,即任何一层存储器中的内容都是其下一期(离CPU更远一层)存储器中内容的子集。CPU与M1之间传送信息一般以为单位,M1以外(含M1)的相邻存储器之间一般以块或页面为单位传送信息。

1.2 存储系统的性能参数

前提:
在这里插入图片描述
在这里插入图片描述

1. 存储容量

一般来说,整个存储系统的容量即是第二级存储器M2的容量,例如在由高速缓冲存储器Cache和主存组成的系统中,存储系统的容量就是主存的容量

2. 存储系统的平均每位价格C

在这里插入图片描述

3. 命中率H

在这里插入图片描述

4. 平均访存时间

在这里插入图片描述
不命中开销是在M1中没有找到,然后到M2中去找找到了,再传回M1,CPU必须从M1中取得数据。
在这里插入图片描述

1.3 三级存储结构

在这里插入图片描述
在这里插入图片描述虚拟存储器主要是为了解决扩大存储器容量的问题
在这里插入图片描述

1.4 存储层次的4个问题

  1. 当把一个块(页)调入高一层(靠近CPU)存储器时,可以放到哪些位置上(映像规则
  2. 当所要访问的块(页)在高一层存储器中时,如何找到该块(查找算法
  3. 当发生不命中而且高一层存储器已经满时,应该替换哪一块。(替换算法
  4. 当进行写访问时,应进行哪些操作(写策略

2. Cache基本知识

2.1 基本结构和原理

要点:
1. 主存和Cache被分成大小相同的块,Cache是按块进行管理的
2. 主存信息以块为单位调入Cache
3. 块大小放几十字节
4. Cache中的数据是主存中的副本
5. 全相联和直接映像都是特殊的组相联,全相联的组数就等于1,直接映像的组数就等于块数
6. 一定要注意一个概念,所谓的 n路组相联,指的是组相联中,每组里的块数,而不是组数

在这里插入图片描述
在这里插入图片描述

2.2 映像规则

  • 解决问题:把一个块从主存调入Cache时可以放置到哪些位置
1. 全相联映像

主存中的任一块可以被放置到Cache中的任意一个位置。
特点:空间利用率最高,冲突概率最低,实现最复杂

2. 直接映像

主存中的每一个块只能被放到Cache中唯一一个位置。
特点:空间利用率最低,冲突概率最高,实现最简单
在这里插入图片描述

3. 组相联映像

Cache被等分成若干组,每组由若干个块构成。主存中的每一块可被放到Cache中唯一一个组的任何一个位置。组的选择常采用位选择算法
在这里插入图片描述

  • n路组相联:如果每组中有n个块(n=M/G)
  • 绝大多数计算机都采用直接映像、两路组相联、四路组相联,特别是直接相联应用的最多。
    在这里插入图片描述
    ⚠️⚠️⚠️索引的划分是在块地址的部分进行划分,和块内位移无关。
    在这里插入图片描述

例题:
设cache共有8块,每块大小为4B,主存共有64块,请给出直接映像、2路组相联映像、4路组相联映像和全相联映像时的访存地址格式和具体分析过程

cache每块大小位4B,则偏移为2位。总位数为2+6=8位
直接映像:(分成8组,每组1块)index=3位;tag=6-3=32路组相联:(分成4组,每组2块)index=2位;tag=6-2=44路组相联:(分成2组,每组4块)index=1位;tag=6-1=5

根据主存大小确定地址长度

2.3 查找方法

  • 查找算法是干啥的?
    当CPU给出一个内存地址时,找一找Cache中有没有该内存单元的副本,也就是看看是“命中”,还是“不命中”。
  • 怎么知道“命中”还是“不命中”?
    假设,Cache的块数为4, 主存的块数为8,直接映像,也就是主存的块地址划分为1位标识位,2位索引,如下图所示。凡是内存地址索引位为“00”的,映像到Cache的“00”块上,以此类推。
    在这里插入图片描述
    从图上可以看出,多个内存块可以映射到同一Cache块上。也就是,如图示,块地址为“001”和块地址为“101”的内存块,都可以映像到“01”Cache块上。那么,当CPU给出一个内存地址,怎么判断该地址对应的内存块是否在Cache中呢?相信大家也观察到了,虽然映像到同一个Cache块的内存块地址的索引位是相同的,但是标识位必定不相同。比如说图中的“001”和“101”,前者的标识为“0”,后者的标识为“1”。 如此,在Cache块对应的位置记录下来当前在该块中的内存块的标识,就能表示清楚,当前时刻,在Cache块中保存的是内存那一块的副本。
  • 查找目录表:Cache中有一个目录表,每一个Cache在该表中都有唯一的一项,用于指出当前该块中的信息是哪个主存块的。实际上记录的就是tag,存放目录表的存储器又叫做标识存储器。目录表中给每一项设置一个有效位,用于指出Cache中的块是否包含有效信息。
  • 候选位置:一个主存块可能映像到Cache中的一个或多个Cache块位置。
  • 当CPU访问主存块时,必须且只需查找它的候选位置的tag,如果tag匹配且有效项为1,则为要找的块。为了保证速度,对各候选位置的检查应该并行进行。
  • 原理上先进行“主存到Cache”地址变换,得到Cache地址后再去访问Cache存储体,而且对于全相联必须如此,但实际上,在采用直接映像或组相联映像的情况下,为了提高访问速度,把==“主存到Cache”地址变换和访问Cache存储体安排成同时进行。同时,不知道哪个位置上有所要访问的数据,所以要把所有候选位置中的相应信息都读出来==,在“主存到Cache”地址变换完成后,再根据其结果从这些信息中选一个,发送给CPU。
  • 实现并行查找的方法:用相联存储器实现;用单体多字的按地址访问的存储器和比较器来实现
    相联存储器是一种按照内容访问的存储器。
    在这里插入图片描述
    单体多字节存储器是一次能够取出多个存储字的存储器。
    在这里插入图片描述
    所需硬件:大小为2gxnxh位的存储器和n个h位的比较器。相联度n增加,比较器的个数和位数都会增加。
  • 无论是直接映像还是组映像,查找时只需要比较tag,index无须参加比较:因为索引已被用来选择要查找的组(或块),而所有index相同且只有index相同的块才被映像到该组中。

2.4 Cache的工作过程

在这里插入图片描述
【分析】
容量是8KB的Cache
块大小 32B :块内偏移 5 位
(写缓冲器和相联度无关,而且题目中已经告知是直接映像)写缓冲器大小是 4 个块:(4-路组相联)组内偏移 2 位
共有 256 个块:索引 8 位
tag = 34-5-8=21位
在这里插入图片描述
写缓冲器的介绍:
为了提高写访问的速度,才设置了一个写缓冲器。这个写缓冲器是按字寻址的,含有4个块,每块大小4个字。当要进行写入操作时,如果写缓冲器不满,那么就把数据和完整的地址写入缓冲器。对CPU而言,本次写访问已经完成,CPU可以继续往下执行,由写缓冲器负责把该数据写入主存。
⚠️在写入缓冲器时,要进行写合并检查。即检查本次写入数据的地址是否与缓冲期内某个有效块的地址匹配。如果匹配,就把新数据与该块合并。

由于21064的数据Cache是直接映像的,所以当发生调块时必然引起替换,因为该Cache使用写直达法,所以替换时不必把被替换块写回主存。当发生不命中时,21064将使数据绕过Cache,直接写入主存。
在这里插入图片描述

Cache相关问题的解题方法:

  1. 整个内存数据块大小,确认主存地址位数,即CPU发送过来的地址位数
  2. 然后根据每块大小和组数,确认块内偏移和索引
  3. 目录项中第一位为有效位,剩余位为标识。有多少个取决于组数(每组设1个,所以换索引即直接对应同组位置一样的地址)
  4. 同时去存储数据的地方找数据
  5. 进行标识比对(相联存储器、单字多节的按地址访问的存储器和比较器)

some ideas:

  1. 写缓冲器就类似于在输出和外设之间的输出井,CPU只需要关注把数据输出就可以去做其他的事情了,而后续的数据选择输出都不需要CPU关注,这样可以节省时间,提升访问速度,缓冲CPU和设备之间速度不匹配的问题
  2. 写入时,都进行一个检查,涉及到写操作、替换操作都可以进行一个和当前合并内容是否有相同的部分进行比较。
    在这里插入图片描述

2.5 替换算法

数据块调入内存时发生冲突,需要将Cache中的块替换出,尽量避免替换掉马上就要用到的信息。

2.5.1 替换算法

1. 随机法

随机选择被调出的块,不能正确的反应程序的局部性

2. 先进先出法

最早调入最先被替换,不能正确的反应程序的局部性。

3. 最近最少使用法(LRU)

本来是选择近期使用次数最少的块作为被替换的块,但实际上是只选择最久没有被访问的块。能较好地反应程序的局部性原理,命中率在三种策略中最高,硬件实现成本较高。

2.5.2 LRU算法的硬件实现

1. 堆栈法
  • 基本思想:使用一个堆栈来记录相联Cache的同一组中各块被访问的先后次序(这个先后次序是用堆栈元素的物理位置来反映的,从栈底到栈顶的先后顺序一起记录了该组中各块被访问的先后次序)
    在这里插入图片描述
  • 所需硬件:每组设置一个项数与相联度相同的小堆栈(每一项位数:log2n位);对硬件堆栈的要求——相联比较、能全部下移、部分下移、从中间取出一项;只适用于相联度较小的LRU算法。
2. 比较对法

不用相邻比较,仅仅使用一般的门、触发器来实现LRU替换算法。

  • 基本思路:让各块两两组合,构成比较对。每一个比较对用一个触发器的状态来表示它所相关的两个块最近一次被访问的远近次序,再经过门电路就可找到LRU块。
    TAB:表示A比B更近被访问过
    在这里插入图片描述
  • 硬件:多少个块就需要多少个门;每个门的输入端要连接所有与之相关的触发器
    在这里插入图片描述
    在这里插入图片描述
    当组内块数较多时,可以使用多级状态位技术来减少所需的硬件量:
    在这里插入图片描述

2.6 写策略

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.7 Cache性能分析

两个重要公式:

  1. 平均访存时间=命中时间+不命中率×不命中开销
    两个组成部分既可以使用绝对时间也可以使用时钟周期数来衡量。执行一个程序所需的CPU时间能更好地反应存储系统的性能。
  2. CPU时间=(CPU执行周期数+访存次数×不命中率×不命中开销)× 时钟周期时间
    其中,不命中开销是指不命中、访存所需要的周期数。

    ⚠️在计算最终的性能时,要把所有的存储器停顿都考虑进去,
  • 问题:Cache命中所用的时钟周期数(⚠️是命中所用,还未命中到命中的时间)被看作是CPU执行的时钟周期数的一部分还是存储器停顿时钟周期数的一部分。两种说法都合理,但是广泛使用的是第一种。
    在这里插入图片描述
    在这里插入图片描述
    CPIexecution越低,代表执行部分占比越小,不命中部分占比越大,相对影响越大。
    在这里插入图片描述
    在这里插入图片描述

2.8 改进Cache性能

Cache的作用是弥补主存在速度上的不足,因此Cache的性能重点关注的是它对访存时间的提升。【在提升和改进某个部件的性能时要考虑这个部件存在的意义是什么,这个部件有什么作用,再去考虑如何提升性能】

平均访存时间=命中时间+不命中率x不命中时间
所以可以从三个方面来改进Cache的性能:降低不命中率、减少不命中开销、减少命中时间


3. 降低Cache不命中率(8‘)

3.1 三种类型的不命中

在这里插入图片描述

3.2 增加Cache块的大小

问题1:不命中率为什么会降低?
首次访问,Cache是空的,所以发生强制失效。发生失效只有要从主存调入一块。块越大,调入的字节越多,下次访存的时候不失效的可能性就越大。所以强制性不命中率降低。

问题2:不命中率为什么后来又升高了?
块大了,块数少了。所以带来强制性不命中降低的同时,带来了冲突不命中的增加。两者共同作用,导致总的不命中率增加。看来,块大小设置多大,是需要好好设置一下的。

问题3:增加块大小,会不会对其他性能参数有影响?
当然有影响,块大了,调块的时间长,所以会增加不命中的开销。
在这里插入图片描述

3.3 增加Cache的容量

在这里插入图片描述

3.4 提高相联度

2条经验规则:

  1. 采用相联度超过8的方案的实际意义不大
  2. 2:1Cache经验规则——容量为N的直接映像Cache的不命中率和容量为N/2的两路组相联Cache的不命中率差不多相同。
    在这里插入图片描述

3.5 伪相联Cache

  • 又称列相联,既能获得多路组相联的低不命中率又能保持直接映像Cache的命中速度。
  • 基本思想:首先按与直接映像相同的方式访问,如果命中直接给CPU;如果不命中,检查将索引字段的最高位取反的位置去寻找另一个位置(块),如果这一块的标识匹配,称发生伪命中
  • 伪相联Cache有两种访问时间,分别对应于正常命中和伪命中。要能够指出在同一组的两个块中访问哪个块才更可能是快速命中。解决方法:当出现伪命中时交换两个块的内容,把最近刚访问过的块放到第一位置(直接映像所对应的块上)【因为局部性原理,刚访问过的块很可能就是下一次要访问的块在这里插入图片描述
    在这里插入图片描述
    多种命中时间会使CPU流水线的设计复杂化,因此伪相联技术往往是应用于离处理器较远的Cache上,例如第二级Cache。

3.6 硬件预取

  1. 指令和数据都可以在处理器提出访问请求之前进行预取
  2. 预取内容可以直接放入Cache,也可以放在一个访问速度比主存快的外部缓冲器中
  3. 指令预取通常由Cache之外的硬件完成
  4. 预取建立在利用存储器的空闲带宽(若不采用预取,这些带宽将浪费掉)的基础上,但是如果它影响了对正常不命中的处理,就可能会降低性能
  5. 利用编译器的支持可以减少不必要的预取
    在这里插入图片描述

3.7 编译器控制的预取

在这里插入图片描述

  • 非阻塞Cache:只有在预取数据的同时处理器还能继续执行的情况下,预取才有意义。要求Cache在等待预取数据返回的同时,还能继续提供指令和数据。
  • 编译器控制预取的目的也是要使执行指令和读取数据能重叠执行。循环是预取指令的主要对象。
  • 每次预取指令需要花费一条指令的开销,因此要保证这种开销不超过预取所带来的收益。编译器可以通过把重点放在那些可能会导致不命中的访问上,使程序避免不必要的预取,从而较大程度地减少平均访存时间。

3.8 编译优化

通过软件的方法进行优化来降低不命中率,这种方法的特色是无须对硬件做任何改动。分为减少指令不命中减少数据不命中两个方面。

3.8.1 程序代码和数据重组

  • 重新组织程序而不影响程序的正确性很容易。
  • 书中简介两种:
    a. 把一个程序中的过程重新排序,就可能会减少冲突不命中,从而降低不命中率
    b. 为了提高大Cache块的效率,把基本块堆砌,使得程序的入口点与Cache块的起始位置对齐就可以减少顺序代码执行所发生的Cache不命中的可能性
  • 如果知道分支指令很可能成功转移,可以通过以下两点改善空间局部性
    在这里插入图片描述
  • 数据对存储位置的限制更少,便于调整顺序。目的是改善空间局部性和时间局部性
  • 编译优化技术包括数组合并、内外循环交换、循环融合、分块等。数组合并是将本来相互独立的多个数组合并成一个复合数组,以提高它们的局部性。循环融合是将若干个独立的循环融合为单个的循环,这些学换访问同样的数组,对相同的数据作不同的运算,这样能使读入Cache的数据在被替换出去之前得到反复使用。

3.8.2 内外循环交换

在这里插入图片描述

3.8.3 分块

在这里插入图片描述
在这里插入图片描述

3.9 牺牲Cache

  • 定义:在Cache和其下一级存储器的数据通路上增设一个全相联的小Cache,称为“牺牲Cache”,其中存放因冲突而被替换出去的那些块。
  • 基本思想:当发生不命中时,在访问下一级存储器之前,先检查“牺牲cache”中是否有所需的快,如果有直接和Cache中的块进行交换。
  • 采用命中率较高的全相联映像,而且仅在替换时发生作用。(而且从降低不命中率的角度单独看牺牲Cache,采用全相联也是不命中率最低的)
  • 这里把该方法归为减少不命中率的方法。因为把“牺牲Cache”看成是Cache的向下扩展,在“牺牲Cache“上命中也算命中。但是归到减少不命中开销的方法也是可以的,站在”Cache和牺牲Cache之间看问题”。前面的伪相联和预取也是。

4. 减少Cache不命中开销(5‘)

4.1 采用两级Cache(采用比较多的方法)

  1. 在CPU和主存之间增加Cache的原因就是弥补主存与CPU的速度差异。那为什么不把Cache做的很大呢?原因很简单,太贵,而且CPU直接访问的Cache一般是在CPU片上,占用CPU的芯片面积。那么为了进一步弥补主存和Cache速度上的差异,一般的处理器都使用多级Cache,有片上的,也有片下的
  2. 两级Cache的平均访问时间分析
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 对于二级Cache有以下结论:
  1. 在第二级Cache比第一级Cache之间的首要区别是:第一级Cache的速度会影响CPU的是时钟频率,而第二级Cache的速度只影响第一级Cache的不命中开销。(许多不适合第一级的设计方案可能适合第二级)
  2. 设计第二级Cache只有两个问题需要权衡:能否降低CPI中的平均访存时间部分;成本是多少
  3. 在第二级Cache比第一级Cache大的多的情况下,两级Cache的全局不命中率的容量与第二集Cache相同的单级Cache的不命中率非常接近。
  4. 可以使用上一节的技术来减少第二级Cache的不命中率,从而达到减少不命中开销的目的(提高相联度和伪相联的方法都值得考虑)在这里插入图片描述
  5. 采用增加块大小的方法来减少不命中率。由于前面有结论:Cache块增加到一定程度后 反而可能导致不命中率上升。但是对于第二级Cache来说,容量大,使不命中率达到最低的块的大小也比较大。
  6. 多级包容性:如果第一级的数据总是同时存在于第二级Cache中,则称第二级Cache有多级包容性。(有利于I/O于Cache之间内容一致性的检测)
  7. 为了减少平均访存时间,让容量较小的第一级采用较小的块,而让容量较大的第二级Cache采用较大的块。仍可实现包容性,但是在处理第二级Cache不命中时要做更多的工作:替换第二级Cache中的块时,必须作废所有对应于该块的第一级Cache中的块。
    10.在这里插入图片描述

4.2 让读不命中优先于写

设置一个大小适中的写缓冲器

  1. 读不命中,需要访存时,可能存储器还未更新,要读的内容还在写缓冲区中,若推迟访问,直到写缓冲的数据都写入主存,会增加命中时间。
  2. 不等写缓冲器清空,直接在写缓冲区的数据里面找是否有需哟啊的数据

4.3 写缓冲合并

  • 写缓冲合并:为了减少写访问所花的时间,写直达Cache一般都采用一个写缓冲器。如果该缓冲器不满,就可以把数据和相应地址写入该缓冲器。从CPU的角度来看,这个写操作就算完成了。CPU可以继续执行后面的指令,而写缓冲器继续负责将之写入存储器。在写缓冲器不为空的情况下,则需要把这次的写入地址与写缓冲器中已有的所有地址进行比较,看是否有匹配的项。如果有地址匹配而对应的位置又是空闲的,就把这次要写入的数据与该项合并。
    在这里插入图片描述
  1. 写缓冲区有四项,每项四个64位的字。
  2. 如果一次写操作,不合并,每次写操作使用缓冲区一项,使用了一个64位的字。四个字就得用四项,启动四次写主存操作。
  3. 如果写缓冲合并,最好的情况下,四个字地址是连续的,写入了写缓冲区一项中。也就是启动一次写操作,连续写了4个字,节省了很多时间。也就是节省了写不命中的开销。

4.4 请求字处理技术(不用增加硬件)

  • 请求字:当从存储器向CPU调入一块时,块中往往只有一个字时CPU立即需要的,这个字称为请求字【请求字到达后,不等整个块都调入Cache,就可以把该字发送给CPU并重启CPU继续执行】
    在这里插入图片描述

4.5 非阻塞Cache技术

  1. 采用尽早重启动技术时,在请求字到达之前,CPU还是要处于等待状态。有些流水方式的计算机采用==记分牌或Tomasulo类控制方法,允许指令乱序执行(后面的指令可以跨越前面的指令先执行),CPU无须在Cache不命中时停顿。
  2. 不命中发生后,CPU在等待数据Cache给出数据的同时,有可能继续执行后面的指令,如果采用非阻塞Cache或非锁定Cache技术,则可以将CPU性能提高更多。(不命中时不完全拒绝CPU的访问,而是能处理部分访问,从而减少了实际不命中的开销。
  3. 支持多重不命中下的命中不命中下的不命中,则可进一步减少实际不命中开销。
  4. 但是不是可以同时处理的不命中次数越多越好,对于整数程序来说,重叠次数对性能提高影响不大,简单的一次不命中下命中就几乎可以得到所有好处。

5. 减少命中时间

5.1 容量小、结构简单的Cache

  • 硬件越简单,速度就越快
  • 应使Cache容量足够小,以便可以与处理器做在同一芯片上
  • 折中方案:把Cache的标识放在片内,而把Cache的数据存储体放在片外,这样既可以实现快速标识检测,又能利用独立的存储芯片来提供更大的容量。
  • 还要保持Cache结构的简单性,例如采用直接映像

5.2 虚拟Cache

一般由存储管理部分MMU完成,按照访问地址是物理地址还是虚拟地址,把Cache分成物理Cache和虚拟Cache。

5.2.1 物理Cache

  • 物理Cache:使用物理地址进行访问传统的Cache,其标识存储器中存放的是物理地址,进行地址检测也是用的物理地址。在这里插入图片描述

5.2.2 虚拟Cache

  • 虚拟Cache:可以直接用虚拟地址进行访问的Cache,其标识存储器中存放的是虚拟地址,进行地址检测用的也是虚拟地址。
    在这里插入图片描述
  • 优点:在命中时不需要地址转换,节省了地址转换的时间,不命中时地址转换和访问Cache时并行进行的,速度比物理Cache快很多。
  • 并非所有计算机都采用虚拟Cache的原因:每当进行进程切换时需要清空Cache,由于新进程的虚拟地址可能与原进程的相同,但它们所指向的物理空间确是不同的。
  • 解决方法:增加一个进程标识符字段(PID),这样多个进程的数据可以混放在Cache中,由PID指出Cache中的各块是属于哪个程序的,PID经常是由操作系统指定。【对于每一个进程,操作系统从循环使用的几个数字中指定一个作为其PID】不过,这种方法有时也需要清空Cache,这种情况仅发生在当某个进程的PID被重用的时候,即该PID以前已被分配给了某个进程,现在又把它分配给另外一个进程的时候。
  • 虚拟Cache没有流行起来的另一个原因?
    操作系统和用户程序对同一个物理地址可能采用两种以上不同形式的虚拟地址来访问,这些地址称为同义别名。它们可能会导致同一个数据在虚拟Cache中存在两个副本。而这是不允许的,否则会发生错误,这种情况在物理Cache中不会发生,因为物理Cache会首先把虚拟地址转换到同一物理地址,从而找到同一个物理Cache块
  • 用软件的方法解决alias很容易,只要要求alias相同的某些地址位相同。
  • 对于虚拟地址,最后还应该考虑I/O。I/O通常使用物理地址,所以为了与虚拟Cache打交道,需要把物理地址映像为虚拟地址。

5.2.3 虚拟索引-物理标识方法

直接用虚地址中的页内位移,作为访问Cache的索引,但标识却是物理地址。
局限性:直接映像Cache的容量不能超过页面大小。
为了既能实现大容量Cache,又能使索引位数比较少,可以采用提高相联度的方法:
在这里插入图片描述
另一种方法:硬件散列变换
在这里插入图片描述

5.3 Cache访问流水化

把对第一级Cache的访问按流水方式组织,使得访问Cache需要多个时钟周期才能完成。实际上它并不能真正减少Cache的命中时间,但可以提高访问Cache的带宽

5.4 踪迹Cache

开发指令级并行性所遇到的一个挑战:当要每个时钟周期流出超过4条指令时,要提供足够多条彼此互不相关的指令是很困难的。
解决方法:踪迹Cache,存放的是CPU所执行过的动态指令序列,其中包含了由分支预测展开了的指令,该分支预测是否正确要在取到该分支指令时进行确认。
在这里插入图片描述

5.5 Cache优化技术总结

在这里插入图片描述
在这里插入图片描述


6. 并行主存系统

主存的性能主要由带宽延迟来衡量。
延迟:存储器的访问时间,也就是启动1次存储器操作到完成该操作时所需要的时间
带宽:单位时间内存储器存取的信息量
以往Cache主要关心的是主存的延迟(影响Cache的不命中开销),而I/O主要关心的是主存的带宽。随着第二级Cache的广泛使用,主存带宽对于Cache来说也重要,因为第二级Cache的块比较大。实际上,Cache可以通过增加Cache块的大小来利用主存带宽的增加,因为==在高带宽的情况下,块大小增大并不会使不命中开销增加多少。
并行存储系统:在一个访存周期内能并行访问多个存储字的存储器,它能有效地提高存储器的带宽。
在这里插入图片描述
在这里插入图片描述
在相同器件条件下(TM相同),如果要提高主存的带宽,可以采用以下两种并行存储器结构:单体多字存储器和多体交叉存储器。

6.1 单体多字存储器

在这里插入图片描述
在这里插入图片描述

6.2 多体交叉存储器

在这里插入图片描述

6.2.1 高位交叉编址

在这里插入图片描述

  1. 这种编址方式,在一个存储体内地址是连续的,因此易于扩展
  2. 这种编址是由于地址是连续的,并不能发挥并行的特点
  3. 访问合理时,能够使不同的请求源访问不同的存储体,实现并行工作,比如说CPU访问一个存储体时,I/O访问的是另一个
    在这里插入图片描述

6.2.2 低位交叉编址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3 避免存储体冲突

体冲突:指两个访问请求要访问同一个存储体
解决这个问题的一种方法:采用许多体去减少体冲突的次数。
在这里插入图片描述
在这里插入图片描述

7. 虚拟存储器

7.1 基本概念

在这里插入图片描述
许多计算机采用段式和页式的组合——段页式
两者兼顾的优点:每段被划分为若干个页面,这样既保持了段作为逻辑单元的优点,又简化了替换的实现,而且段不必作为整体全部一次调入主存,而是可以以页面为单位部分调入。

7.2 快速地址转换技术

  1. CPU给出的访存地址是虚地址,要先查找页表才能获得实际的物理地址,也就是虚实地址转换。然后才能看看是否在Cache命中,还没实际访问数据就被迫访存了一下。
  2. TLB是一个专用Cache,专门存放近期使用的页表项,如果命中了,就能直接完成虚实地址的转换,无须访问主存中的页表。
  3. 每次访存都要引起对主存的两次访问:第一次是访问页表,以获得所要访问数据的物理地址,第二次才是访问数据本身。
  4. TLB来解决问题:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 17
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
一、 简答题(每小题10分,共20分) 1. 简述使用物理地址进行DMA存在的问题,及其解决办法。 2. 从目的、技术途径、组成、分工方式、工作方式等5个方面对同构型多处理机和异构型多处理机做一比较(列表)。 二、(60分)现有如下表达式: Y = a × X 其中:X和Y是两个有64个元素的32位的整数的向量,a为32位的整数。假设在存储器中,X和Y的起始地址分别为1000和5000,a的起始地址为6000。 1.请写出实现该表达式的MIPS代码。 2.假设指令的平均执行时钟周期数为5,计算机的主频为500 MHz,请计算上述MIPS代码(非流水化实现)的执行时间。 3.将上述MIPS代码在MIPS流水线上(有正常的定向路径、分支指令在译码段被解析出来)执行,请以最快执行方式调度该MIPS指令序列。注意:可以改变操作数,但不能改变操作码和指令条数。画出调度前和调度后的MIPS代码序列执行的流水线时空图,计算调度前和调度后的MIPS代码序列执行所需的时钟周期数,以及调度前后的MIPS流水线执行的加速比。 4.根据3的结果说明流水线相关对CPU性能的影响。 三、(20分)请分析I/O对于性能的影响有多大?假设: 1. I/O操作按照页面方式进行,每页大小为16 KB,Cache块大小为64 B;且对应新页的地址不在Cache中;而CPU不访问新调入页面中的任何数据。 2. Cache中95%被替换的块将再次被读取,并引起一次失效;Cache使用写回方法,平均50%的块被修改过;I/O系统缓冲能够存储一个完整的Cache块。 3. 访问或失效在所有Cache块中均匀分布;在CPU和I/O之间,没有其他访问Cache的干扰;无I/O时,每1百万个时钟周期中,有15,000次失效;失效开销是30个时钟周期。如果替换块被修改过,则再加上30个周期用于写回主存。计算机平均每1百万个周期处理一页。
第一章 计算机体系结构的基本概念 1.1 引论 1.2 计算机体系结构的概念 1.2.1 计算机系统中的层次概念 1.2.2 计算机体系结构 1.2.3 计算机组成和计算机实现技术 1.3 计算机体系结构的发展 1.3.1 存储程序计算机体系结构及其发展 1.3.2 计算机的分代和分型 1.3.3 应用需求的发展 1.3.4 计算机实现技术的发展 1.3. 5 体系结构的生命周期 1.4 计算机体系结构中并行性的发展 1.4.1并行性概念 1.4.2 提高并行性的技术途径 1.5 定量分析技术基础 1.5.1 计算机性能的评测 1.5.2 测试程序 1.5.3 性能设计和评测的基本原则 1.5.4 CPU的性能 1.6 影响计算机体系结构的成本和价格因素 1.6.1 集成电路的成本 1.6.2 计算机系统的成本和价格 1.7 小结习题一第二章 计算机指令集结构设计 2.1 指令集结构的分类 2.1.1 指令集结构的分类 2.1.2 通用寄存器型指令集结构分类 2.2 寻址技术 2.3 指令集结构的功能设计 2.3.1 CISC计算机指令集结构的功能设计 2.3.2 RISC计算机指令集结构的功能设计 2.3.3 控制指令 2.4 操作数的类型、表示和大小 2.5 指令集格式的设计 2.5.1 寻址方式的表示方法 2.5.2 指令集格式的选择 2.6 编译技术与计算机体系结构设计 2.6.1 现代编译器的结构和相关技术 2.6.2 现代编译技术对计算机体系结构设计的影响 2.6.3 计算机体系结构对当前编译技术的影响 2.7 DLX指令集结构 2.7.1 DLX指令集结构 2.7.2 DLX指令集结构效能分析 2.8 小结习题二第三章 流水线技术 3.1 流水线的基本概念 3.1.1 流水线的基本概念 3.1.2 流水线的分类 3.2 DLX的基本流水线 3.2.1 DLX的一种简单实现 3.2.2 基本的DLX流水线 3.2.3 流水线性能分析 3. 3 流水线中的相关 3.3.1 流水线的结构相关 3.3.2 流水线的数据相关 3.3.3 流水线的控制相关 3.4 流水线计算机实例分析(MIPS R4000) 3.4.1 MIPS R4000整型流水线 3.4.2 MIPS R4000浮点流水线 3.4.3 MIPS R4000流水线的性能分析 3.5 向量处理机 3.5.1 向量处理方式和向量处理机 3.5.2 向量处理机实例分析 3.6 小结习题三第四章 指令级并行 4.1 指令级并行的概念 4.1.1 循环展开调度的基本方法 4.1.2 相关性 4.2 指令的动态调度 4.2.1 动态调度的原理 4.2.2 动态调度算法之一:记分牌 4.2.3 动态调度算法之二:Tomasulo算法 4.3 控制相关的动态解决技术 4.3.1 减少分支延迟:分支预测缓冲技术 4.3.2 进一步减少分支延迟:分支目标缓冲 4.3.3 基于硬件的推断执行 4.4 多指令流出技术 4.4.1 超标量技术 4.4.2 多指令流出的动态调度 4.4.3 超长指令字技术 4.4.4 多流出处理器受到的限制 4.5 小结习题四第章 存储层次 5.1 存储器的层次结构 5.1.1 从单级存储器到多级存储器 5.1.2 存储层次的性能参数 5.1.3 “Cache—主存”和“主存—辅存”层次 5.1.4 存储层次的四个问题 5.2 Cache基本知识 5.2.1 映象规则 5.2.2 查找方法 5.2.3 替换算法 5.2.4 写策略 5.2.5 Cache的结构 5.2.6 Cache性能分析 5.2.7 改进Cache性能 5.3 降低Cache失效率的方法 5.3.1 增加Cache块大小 5.3.2 提高相联度 5.3.3 Victim Cache 5.3.4 伪相联Cache 5.3.5 硬件预取技术 5.3.6 由编译器控制的预取 5.3.7 编译器优化 5.4 减少Cache失效开销 5.4.1 让读失效优先于写 5.4.2 子块放置技术 5.4.3 请求字处理技术 5.4.4 非阻塞Cache技术 5.4.5 采用两级Cache 5.5 减少命中时间 5.5.1 容量小,结构简单的Cache 5.5.2 虚拟Cache 5.5.3 写操作流水化 5.5.4 Cache优化技术小结 5.6 主存 5.6.1 存储器技术 5.6.2 提高主存性能的存储器组织结构 5.7 虚拟存储器 5.7.1 虚拟存储器基本原理 5.7.2 快表(TLB) 5.7.3 页面大小的选择 5.8 进程保护和虚存实例 5.8.1 进程保护 5.8.2 页式虚存举例:Alpha AXP的存储管理和21064的TLB 5.9 Alpha AXP 21064存储层次 5.10 小结习题第六章 输入输出系统 6.1 概述 6.2 存储设备 6.2.1 磁盘设备 6.2.2 磁带设备 6.2.3 光盘设备 6.3 总线 6.3.1 总线分类 6.3.2 总线基本工作原理 6.3.3 总线使用 6.3.4 总线标准和实例 6.3.5 设备的连接 6.3.6 CPU与I/O处理的匹配 6.4 通道处理机 6.4.1 通道的作用和功能 6.4.2 通道的工作过程 6.4.3 通道种类 6.4.4 通道中的数据传送过程 6.4.5 通道的流量分析 6.5 I/O与操作系统 6.5.1 I/O和Cache数据一致性 6.5.2 DMA和虚拟存储器 6.6 I/O系统设计 6.7 小结习题六第七章 多处理机 7.1 引言 7.1.1 并行计算机体系结构的分类 7.1.2 通信模型和存储器的结构模型 7.1.3 通信机制的性能 7.1.4 不同通信机制的优点 7.1.5 并行处理面临的挑战 7.1.6 并行程序的计算/通信比率 7.2 多处理机的存储器体系结构 7.2.1 集中式共享存储器体系结构 7.2.2 分布式共享存储器体系结构 7.3 互连网络 7.3.1 互连网络的性能参数 7.3.2 静态连接网络 7.3.3 动态连接网络 7.4 同步与通信 7.4.1 同步机制 7.4.2 大规模机器的同步 7.5 并行化技术 7.5.1 并行化的基本策略 7.5.2 并行语育与编译器 7.6 多处理机实例 7.6.1 Challenge多处理机系统 7.6.2 Origin 20007.
计算机系统结构大学期末复习资料题库含答案 1.看下述程序段:( C ) k: R5=R2 k+1: R0=R1×R4 k+2: R2=R5+1 k+3: R4=R0×R3 k+4: R3=R4-1 K+5: …… k和k+2之间发生的是什么数据相关 I. 先写后读相关 II.写-写相关 III. 先读后写相关 A.只有I B.只有I、II C.只有I、III D.以上都不对 2.开发并行的途径有( D ),资源重复和资源共享。 A、多计算机系统 B、多道分时 C、分布式处理系统 D、时间重叠 3.在计算机系统设计中,比较好的方法是(D )。 A、从上向下设计 B、从下向上设计 C、从两头向中间设计 D、从中间开始向上、向下设计 4.执行微指令的是(C) a.汇编程序 b.编译程序 c.硬件 d.微指令程序 5. 软件和硬件在(B)意义上是等效的。 A. 系统结构 B.功能 C. 性能 D. 价格 6. 实现汇编语言源程序变换成机器语言目标程序是由(D ) A.编译程序解释 B.编译程序翻译 C.汇编程序解释 D.汇编程序翻译 7. 按照计算机系统层次结构,算术运算、逻辑运算和移位等指令应属于(A)级机器语言。 A. 传统机器语言机器 B.操作系统机器 C. 汇编语言机器 D.高级语言机器 8.对汇编语言程序员,下列(A)不是透明的。 A. 中断字寄存器 B.乘法器 C. 移位器 D.指令缓冲器 9.在采用基准测试程序来测试评价机器的性能时,下列方法按照评价准确性递增的顺序排列是(B )。(1)实际的应用程序方法 (2)核心程序方法 (3)玩具基准测试程序(小测试程序) (4)综合基准测试程序 A.(1)(2)(3)(4) B.(2)(3)(4)(1) C.(3)(4)(1)(2) D.(4)(3)(2)(1) 10. 下列体系结构中,最适合多个任务并行执行的体系结构是( D) A、流水线的向量机结构 B、堆栈处理结构 C、共享存储多处理机结构 D、分布存储多计算机结构 11. 从用户的观点看,评价计算机系统性能的综合参数是( B ): A、指令系统 B、吞吐率 C、主存容量 D、主频率 12. 设指令由取指、分析、执行 3 个子部件完成,每个子部件的工作周期均为△t,采用常规标量单流水线处理机。若连续执行 10 条指令, 则共需时间 ( C )△t。 A.8 B.10 C. 12 D. 14 13. 系统响应时间和作业吞吐量是衡量计算机系统性能的重要指标。对于一个持续处理 业务的系统而言, ( C ) ,表明其性能越好。 A. 响应时间越短,作业吞吐量越小 B. 响应时间越短,作业吞吐量越大 C. 响应时间越长,作业吞吐量越大 D. 响应时间不会影响作业吞吐量 14. 若每一条指令都可以分解为取指、分析和执行三步。已知取指时间t 取指=4△t,分 析时间t 分析=3△t,执行时间t 执行=5△t。如果按串行方式执行完100 条指令需要( C )△t。 A. 1190 B. 1195 C. 1200 D. 1205 15. 如果按照流水线方式执行,执行完100 条指令需要 (B)△t。 A. 504 B. 507 C. 508 D. 510 16. 并行访问存储器最大的问题就是访问冲突大,下面不属于并行访问存储器的缺点的是:( D ) A、取指令冲突 B、读操作数冲突 C、写数据冲突 D、译码冲突 17. 一条4段流水线,每段执行时间为1ns,求该流水线执行100条指令最大效率为(C) A.100% B.96.2% C.97.1% D.388% 18. 假设一条指令的执行过程可以分为“取指令”、“分析”和“执行”三段,每一段的执行时间均为 ,连续执行n条指令所需要花费的最短时间约为(B)(假设仅有“取指令”和“分析”可重叠并假设n足够大): A. B. C. D. 19. MISD是指(C) A.单指令流单数据流 B.单指令流多数据流 C.多指令流单数据流 D.多指令流多数据流 20. 星形网络的网络直径和链路数分别为(A)和(D)。 A.N-1 B.N/2 C.2 D.N(N-1)/2 21. 软件和硬件在(B)意义上是等效的。 A.系统结构 B.功能 C.性能 D.价格
好的,下面是数据库系统原理期末复习的一些重点内容: 1. 数据库系统的基本概念和体系结构 数据库系统是指对数据进行管理和处理的系统,包括数据库、数据库管理系统(DBMS)、应用程序和用户。数据库系统的体系结构包括三层:外层是用户层,中间是应用程序层,内层是数据库管理系统层。 2. 数据库设计与规范化 数据库设计是指根据需求分析,将数据组织成逻辑上相互独立的数据模型,并转化为物理存储结构的过程。规范化是指通过一系列规则,将关系模式转化为更加规范、高效的形式,避免数据冗余和不一致性。 3. 数据库查询语言 数据库查询语言(SQL)是数据库系统中最常用的语言,包括数据定义语言(DDL)、数据操作语言(DML)和数据控制语言(DCL)。DDL用于定义数据库中的模式、表、视图、索引等;DML用于对数据库中的数据进行操作;DCL用于管理数据库的安全性和完整性。 4. 数据库索引 数据库索引是一种数据结构,用于提高数据库查询的效率。常见的索引类型包括B树索引、哈希索引和全文索引等。 5. 数据库事务和并发控制 数据库事务是指由一系列操作组成的不可分割、原子性的工作单元。并发控制是指在多个用户并发访问数据库时,保证数据的一致性和完整性的机制。常见的并发控制技术包括锁、多版本并发控制(MVCC)和时间戳等。 6. 数据库备份和恢复 数据库备份是指将数据库中的数据和元数据备份到其他存储介质的过程。数据库恢复是指在数据库损坏或错误时,将备份数据和日志应用到数据库中的过程。常见的备份和恢复策略包括完整备份、增量备份和差异备份等。 以上是数据库系统原理期末复习的一些重点内容,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值