149.计组补充(一)--存储系统_cache/虚拟存储

计组存储系统-cache和虚拟存储

距上次文章已三月了,这是关于408的综合题类型的总结补充
主要两类大题:存储系统和指令通路的综合题还有其他
以十年真题的综合大题来为典例+知识点再整理作为强化
废话少讲,先看这节

一.cache主存块

1.先理解程序访问的局部性原理:
  • 时间局部性原理:一个内存位置被重复引用
  • 空间局部性原理:一个内存位置被引用 其附件位置也很快被引用

这个用代码很好理解

        for (int i = 0; i < 5; i++) {
            sum+=a[i];
        }

其时间局部性是差的 数组a每个元素并未重复引用访问
空间局部性好 比如用完a[0]紧接着就是a[1]...

接下来综合题主要的考察理解就是对cache的理解
所以必须总的来理解工作原理

image
大致了解过程即可 知识点已经总结过 主要总结综合题的解法

2.地址映射

主存地址空间->cache地址空间
给你一堆(主存块大小等)信息 你必须先知道是什么映射然后划分得出主存地址结构

三种映射地址结构 必须牢记
image
直接映射无须替换算法 所以它就不会需要LRU位

3.cache行(块) 所需的"位"
  • 标记位:指明该块是主存中哪一个的副本 也就是编号
  • 有效位:cache行中的信息是否有效(=1)
  • 脏(修改)位:回写法中用到 =1时该块被修改过替换时需写回主存
  • LRU位:替换算法时用到 即计数值记录主存块的使用情况(其位数取决于cache组大小 4路即2位LRU位)
4.替换算法

在处理的时候用到 只有全相联和组相联映射用到

  • RAND随机算法
  • FIFO先进先出算法
  • LFU最不经常使用算法
    前面两个很好理解 没有使用程序访问的局部性原理
    主要考察的是LRU近期最少使用算法

很好理解 就是最近没用的替换掉
image

5.一致性写入策略

解决cache内容和主存中的内容不一致问题
写操作命中:

  • 全写法(直写法):数据同时写入cache和主存 某块需要替换直接覆盖 简单增加了访存次数 用写缓冲来减少时间损耗和速度不匹配问题
  • 回写法:只把数据写入cache 当块替换时才写回主存 为减少写回主存次数设置脏位

写操作未命中:

  • 写分配法:更新主存单元 把主存块调入cache 搭配回写法
  • 非写分配法:只更新主存单元 搭配全写法
6.计算 cache命中率和平均访存时间

就两个公式而已
image
注意这里写错了 第一个公式计算的是未命中率

前提知识先到这儿 其实就是之前的总结没啥区别

7.应用到题目中提炼知识:

块内地址 cache行号/组号 Tag标记 主存块数 主存块号
image
上述基本都是计算地址结构的位数
image
上述三个公式 基本用不到 知道位数后可以直接地址定位到对应位数判断

妈的不扯直接拿题来看:

(2020)
image
首先是组相联映射 主存地址32位 主存块大小64B 直写法(无修改位)
image
块内地址就是看主存块大小 组数就是看数据区大小和主存块大小和几路 LRU位数就是取决于几路 这个是最简单的基础知识
再看第二问 一般就是给个程序 然后一问次数有关的就是考察命中率的问题
几个核心点 程序条件范围 读取次数 什么类型变量 主存块数
image
注意点就是要看给你的地址块内地址初始为0 所以计算数组大小就不用加这个 否则需要加上偏移值
组号从3开始 无冲突替换所以缺失次数=主存块数
第三问就是有关我们之前总结的过程
按书上的原话就是:CPU发出读请求 若访存地址命中直接转换成cache地址再进行读 若未命中 需要访问主存 将字所在的块一次性从主存调入cache 若满了进行替换算法替换
image
大致就是根据指令地址先划分出来块内地址 组好 tag位 然后进行缺失处理 不过多阐述

(2019)
image
1:00401000
30:0040104A
16:00401025
这里后续总结有关虚拟页存储的知识 是否同一页就看虚页号就行根据页大小 块内地址和组号tag都很基础
image
注意一下组数的计算根据总行(块)数/几路来算

后续搭配虚拟存储来综合应用


二.虚拟存储

主要是页式虚拟存储 弄完这个知识搭配之前的cache综合考察
主要考察:

  • 虚实地址转换
  • 虚拟地址结构
  • 命中率缺页有关
  • TLB快表有关

简单阐述,顾名思义是虚拟的,即判断虚地址对应内容是否在主存中,若在就转换成真实物理地址访问对应单元,若不在就调入主存后再访问,若满了就替换算法替换
大致过程和cache一样 注意虚拟存储机制使用全相联映射处理一致性问题采用回写法

1.页式虚拟存储器所需的"位"

以页为单位 重要的是页表中含有的那些位和cache不同

  • 有效位(装入位):表示对应页面是否在主存中
  • 脏位(修改位):页面是否被修改过
  • 引用位(使用位):配合替换算法设置
2.虚拟地址结构和地址转换

对于虚拟地址结构和cache映射地质结构一样记牢
image
其中对于cache地址结构块内地址也叫做块内偏移量 这个就是取决于给你的地址分析是否初始 然后页大小得出页内地址 然后虚拟地址减去它就是虚页号位数
物理地址的低位和页内地址一样 只是虚页号高位为物理页号

根据页表来实现地址转换
image
一般有一个页表基址寄存器存放页表首地址
核心就是看虚页号来找对应的物理页号

3.TLB快表和命中率缺页

把页对应的页表存放在cache组成的TLB中 提高效率
工作原理类似cache
有个核心点就是:

  • 全相联映射:TLB标记对应虚拟页号
  • 组相联映射:TLB标记对应虚拟页号高位部位 低位部分对应TLB组号
    考察主要是结合cache的综合题目

关于命中率缺页有关就是 页大小就是一页大小可以判断几页推出缺页次数
至于命中率有关就是:主存块数/总访问次数
image
知识点大致这些看综合类型题

(2021)
image
这道题除了第三问涉及到有关LRU的替换算法知识 其他都是很基础的
image
第三问根据之前的公式需要先算出组号 然后再使用LRU替换算法
image

(2023)
image
这道题基本很全面的涉及cache和虚拟存储的知识点
首先是基础的都整出来 注意起始偏移量
image
第二问就是知识点时间局部性看元素是否重复引用即可
第一问算页数也就是缺页次数 因为程序之前数组a不在内存
image
二维数组计算数组大小(注意这里起始0所以不用加上偏移量)后续有一道题不一样
页故障就是两页起始地址
第三问块内地址和组号简单 问a[1][0]地址就是a[0][0]+64*4B得到 然后再划分得组号
image
最后一问分析程序算命中率有关问题 算主存块数和总访问次数
image
一定注意算命中率有关一定是总访问次数根据程序分析而不是单纯数组大小 主要就是看循环条件数组大小和循环内部程序 对比之前即可 ji顺序换一下总访问次数不变命中率也不变

对比看一下2025年的题坑多点更为综合性强一点

(2025)
image
先弄一下基础的东西 注意给了起始地址了这里就有偏移量了
image
所谓cache索引也就是组号 VA11~VA6
我们再来分析偏移量这个和命中率有关的
image
这里初始不再是0了所以计算数组大小需要加上偏移量32B
然后就是平均访存时间公式套入题目中给了cache命中时间2个时钟周期 缺失损失200个时钟周期 对比上道题基本解决 剩下几问看一下
image
非常综合性的基本考察cache和虚拟存储的知识

最后补充一道TLB和cache虚拟存储的综合题

(2018)
image
image
先来分析简单的东西 配合图来看
image
分析出物理地址和TLB全相联映射不难
第三问看cache 可以看右图两行再看其地址结构得出是2路组相联映射方式
需要的附加位:LRU位(替换算法)+脏位(回写法)+有效位
image
最后一问是关于虚实地址变换
image
基本上也是知识点的结合综合

关于存储的知识点和综合题分析基本能解决 后续继续分析其他类型综合题

posted @ 2026-08-13 19:35  张泽好  阅读(5)  评论(0)    收藏  举报