文章目录
接上篇选择题
打开同一个文件共享同一个内存索引结点

cache和TLB
cache由SRAM组成,TLB通常由相联存储器组成,可以由SRAM组成。
DRAM需要不断刷新,性能比较低。
TLB缺失可以由软件或者硬件处理,cache缺失需要由硬件处理。TLB和cache命中率都与程序局部性有关,缺失之后都需要去访问主存。
cache :CPU和主存之间的缓冲
cache分为一级cache,二级cache,三级cache等等.一级cache与cpu处于同一个指令周期.
Cache Line 是cache与DRAM同步的最小单位 .
典型的虚拟内存页面大小为4KB,而典型的Cache line通常的大小为32或64字节.
CPU 读/写内存都要通过Cache,如果数据不在Cache中,需要把数据以Cache Line为单位去填充到Cache,即使是读/写一个字节
大部分的cache允许软件在某个区域设置模式,一个区域可能是回写,另一个可能是预取.用户一般不能改变cache的模式, 这些通常由设备驱动程序来控制.
预取通常由软件通过所谓的cache隐函数madvise进行控制.
TLB:地址转换后备缓冲,计算机中用于加速虚拟地址到物理地址转换过程的一个硬件组件。
- TLB是一个高速缓存,访问速度快于主存。TLB是MMU中的一块高速缓存,也是一种Cache.
- TLB存放的是页表文件的副本,虚拟地址到物理地址的转换表
- TLB的主要目的是减少地址转换的开销,提高程序的执行效率
TLB的内部组成:缓存一般页表的指令页表缓存和数据页表缓存,以及缓存大尺寸页表的对应缓存。
TLB的刷新: - 进程进行上下文切换的时候,需要重新设置CR3寄存器(该寄存器内保存有页目录表物理地址(PDBR地址))运用CR3切换可实现对特定进程内存地址的强制读写操作
- 但在某些情况下,如使用【相同页表的进程切换】或【普通进程切换到内核线程】时,可以避免刷新TLB。
TLB与Cache的区别
TLB和Cache都是高速缓存,但TLB缓存的是页表数据,而Cache缓存的是实际数据。
TLB的访问速度对于虚拟地址到物理地址的转换至关重要,而Cache的访问速度则对于提高指令和数据的读取速度至关重要。
虚拟存储器由操作系统和硬件共同实现
虚拟存储机制采用[全相联映射]
cache访存过程中存在3种缺失情况
- TLB缺失:要访问的页面对应的页表项不在TLB中。
- cache缺失:要访问的页面对应的页表项不在TLB中。
- 缺页:要访问的页面不在主存中。
cache缺失/内存缺页处理机构
- Cache缺失处理由硬件完成:
- 缺页处理由软件完成,操作系统通过"缺页异常处理程序"来实现
- 而TLB缺失既可以用硬件又可以用软件来处理
- TLB保存的是页表中活跃的部分项目
CPU一次访存操作可能涉及5个地方的访问
- 虚实地址转换(翻译)部分
- TLB
- 页表
- 硬盘
- 物理地址到cache映射部分
- Cache
- 主存
如果发生缺页,那么中断处理一定在虚实地址转换的环节完成(在cache映射之前)
CPU和cache之间单位是"字",
cache和主存之间单位是"块"
主存和辅存之间单位是"页"(虚拟存储系统中)
CPU与cache(或主存)间信息交互的单位是字,而cache与主存见信息交互的单位是块。当CPU访问的某个字不在cache中时,将该字所在的主存块调入cache,这样CPU下次要访问的字才有可能在cache中
【在写不命中时】,加载相应的低一层中的块到高速缓存(cache)中,然后更新这个高速缓存块,成为写分配法;避开cache,直接把这个字写到主存中,成为非写分配法
写操作时,回写法,全写法【在命中时】使用
指令cache通常比数据cache具有更好的空间局部性,指令流通常是顺序执行的。数据流跳转或随机访问的概率较高。
CPU访存时,先要到cache中查看该主存地址是否在cache中,所以发送的是主存物理地址。只有在虚拟存储器中,CPU发送的才是虚拟地址。

1)时间局部性
时间局部性是指被引用过一次的内存位置很可能在不远的将来再被多次引用。一个内存位置被重复引用【循环体中的变量i,sum】
2)空间局部性
空间局部性是指如果一个内存位置被引用了一次,那么程序很可能在不远的将来引用其附近的一个内存位置。【存储空间集中度,数组顺序访问】【指令,数组,向量】
查找总结
参考
@啊哈哈哈哈哈韩
一、线性结构
(一)顺序查找
· 特点:按序依次查找。
· 要求:顺序表和链表都适用,有序表和无序表都适用。
· 平均查找长度(查找成功):ASL成功=(n+1)/2
· 最大查找长度(查找失败):ASL失败=n+1
(二)折半查找
· 特点:查找区域不断二分,查找树是一棵二叉排序树。
· 要求:有序顺序表。
· 平均查找长度(查找成功):ASL成功= l o g 2 ( n + 1 ) − 1 log_2(n+1)-1 log2(n+1)−1
· 最大查找长度(查找失败):ASL失败=树高= l o g 2 ( n + 1 ) log_2(n+1) log2(n+1) (向上取整)
(三)分块查找
· 特点:块间有序。
· 要求:顺序表和链表都适用,块间有序。
· 平均查找长度(查找成功):分块查找的平均查找长度为索引查找和块内查找的平均长度之和。设索引查找和块内查找的平均查找长度分别为 L i L_i Li和 L s L_s LsA,则分块查找的平均查找长度为ASL= L i + L s L_i+L_s Li+Ls。
二、树形结构
(一)二叉排序树
· 特点:左子树所有结点值<根结点值<右子树所有结点值,因此对二叉排序树进行中序遍历,可以得到一个递增的有序序列。
· 平均查找长度(查找成功):取决于树高,若是平衡二叉树,则ASL=O( l o g 2 n log_2n log2n),若是单支树,则ASL=O(n)。
(二)平衡二叉树
· 特点:任何结点左右子树高度差不超过1的二叉排序树。
· 平均查找长度(查找成功):ASL=O( l o g 2 n log_{2}n log2n)
(三)红黑树
· 特点:满足红黑性质的二叉排序树。
· 平均查找长度(查找成功):ASL成功=O( l o g 2 n log_{2}n log2n)
关于平衡二叉树和红黑树,详见我的另一篇文章:【408精华知识】平衡二叉树与红黑树的考察
(四)B树与B+树
三、散列结构
(一)散列查找
· 特点:据关键字而直接进行访问的数据结构。也就是说,散列表建立了关键字和存储地址之间的一种直接映射关系。
· 平均查找长度:对同一组关键字,设定相同的散列函数,则不同的处理冲突的方法得到的散列表不同,它们的平均查找长度也不同,需要在求出散列表的基础上计算出查找成功时的平均查找长度和查找不成功的平均查找长度。
哈夫曼树
2 n − 1 2n-1 2n−1哈夫曼编码叶子结点数=码字数
无向图只要没有权值相等的边,其最小生成树唯一
含有顶点数大于1的强连通分量,【有环】
线索二叉树的线索树是二叉树上空链域个数
2n0+2 n0=n0+n1+n2+1=n+1
n个节点总共有2n个指针域,n个结点对应n-1条边,n-1个已经使用的指针域
剩余n+1个空指针域用来作为线索指针
前序是进栈序列,中序是出栈序列