高速缓存

概念:高速缓存(cache),为了平衡CPU和主存(DRAM)之间日益增大的速度差异,在CPU和主存之间引入的一个部件,他是主存中数据的一个子集,CPU访问主存之前先访问高速缓存,如果高速缓存中有要取的数据(命中)则不用再访问主存,以此提高速度,一般有SRAM组成,组织方式组相联。高速缓存一般是以物理地址为tag和索引的,可以分级。L1cache分指令和数据cache.

I. 高速缓存结构和原理:

高速缓存的结构可以用(S,E,B,m)元组表示,S是高速缓存组个数,E是每组高速缓存包含的高速缓存行个数,B是每个高速缓存行中高速缓存块的字节数,m是地址位数。一下涉及这么多概念,不要捉急,我们先往下看,待会儿回过头来再细看。m位地址如下划分,t位标记,s位组索引,b位块偏移。

https://i-blog.csdnimg.cn/blog_migrate/3d5b07d87edb300731a5636e4b05e8a1.png


s,b和S,B,E,M(物理主存大小)的关系如下:

wps_clip_image-26617

以例说明高速缓存如何工作的,一条加载指令指示CPU加载主存地址A处的一个字时,它将地址A发送给高速缓存,如果高速缓存中存有地址A处的字的拷贝,它就将那个字返回给CPU。那么高速缓存如何知道自己是否存有地址A处的字的拷贝呢?地址A的s位索引得到高速缓存组,如果高速缓存存有A处字的拷贝的话,必定在此高速缓存组中,进一步如果地址A的t位标记和高速缓存组某高速缓存行的t位标记相同并且该高速缓存行的有效位有效,则拷贝只能在此高速缓存行的高速缓存块中,至于高速缓存块中的偏移,由地址A中的b位确定。参考下图可以更好的理解高速缓存工作过程。(注意上面过程中A一般是已经经过MMU转换的物理地址)

wps_clip_image-20770

wps_clip_image-296

上述的高速缓存工作机制以读操作并且读命中为例进行的说明,写操作更复杂,而且高速缓存有Write-throughCopy-back等工作方式配合命中和不命中的组合,各个流程比较复杂需要仔细研读,高速缓存工作方式详见:http://blog.csdn.net/kklvsports/article/details/9208475

有了前面的基础下面汇总如下基本概念:

高速缓存行:即cache line,是高速缓存缓存主存的基本单元

全相联高速缓存:只有一个高速缓存组即S = 1的高速缓存

组相联高速缓存:有多个高速缓存组即S > 1,E > 1的高速缓存

直接映射高速缓存:高速缓存组中只有一个高速缓存行即E=1的高速缓存

高速缓存大小:高速缓存大小C是指所有高速缓存块的大小之和,不包含有效位和标记位。

II. 高速缓存替换策略

如果高速缓存不命中的话,并且所有高速缓存行有效位都是有效(即高速缓存满),就要替换现有的高速缓存行,替换原则如下:

对于直接映射高速缓存,由于高速缓存组中只有一个高速缓存行,以主存中的内容直接替换该行即可。

对于组相联高速缓存,一个高速缓存组中有多个高速缓存行,有多种替换策略,如LRU最近最少使用策略替换最后一次访问时间最久的那行;LFU最不常有策略替换过去某个时间窗口内最少使用的行。

参考:《深入理解计算机系统》

### 使用 Power Query 从 PDF 文件中提取数据 #### 准备工作 为了能够顺利地通过 Power Query 提取 PDF 中的数据,确保已安装最新版本的 Microsoft Excel 或者其他支持 Power Query 的应用程序。 #### 单个PDF文件的操作流程 当面对单个PDF文档时,在Excel里打开Power Query编辑器并选择`从文件`>`从PDF`选项来加载目标文件。一旦选择了正确的PDF文件路径之后,会弹出预览窗口显示该文档内的所有表格结构[^1]。 ```python # Python模拟伪代码展示概念而非实际执行语句 source = Pdf.Tables("C:\path\to\your.pdf") # 加载指定位置上的PDF文件 ``` 对于所选中的表项可以进一步调整列宽、删除冗余行列以及应用转换规则等操作直至满足需求为止;最后点击关闭并上载按钮完成整个过程[^4]。 #### 多个PDF文件批量化处理方式 针对存放在同一目录下众多具有相似布局特征的PDF资料,则可以通过创建自定义函数实现自动化批量抓取功能。具体做法是在首次成功解析某个样本实例的基础上将其转化为可重复调用的形式保存下来作为模板使用[^2]。 ```m let Source = Folder.Files("C:\folder_path"), // 获取文件夹内所有文件列表 FilteredFiles = Table.SelectRows(Source, each ([Extension] = ".pdf")),// 过滤只保留PDF格式条目 CustomFunctionCall = Table.AddColumn(FilteredFiles,"Tables",each Pdf.Tables([Content])),// 应用自定义函数于每一行记录之上 ExpandColumn = Table.ExpandTableColumn(CustomFunctionCall , "Tables",{...}) // 展开嵌套表格以便后续分析 in ExpandColumn; ``` 此段M语言脚本实现了遍历特定路径下的全部PDF资源,并依次尝试从中抽取可用的信息片段加以整合呈现给用户查看[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值