• Cache与内存映射


    全相联

    主存的某一Block可以映射到Cache中的任意一Block,多对多N<>M;

    全相联地址格式:

    高位为块地址与tag比较,offset负责取出Block内的字节 

    放一道例题把:

    既然新开了一章写就写的细一点,Cache全相联灵活性很高,如果Cache空闲,新块就能写入,如果Cache已满,就按照策略好一个块来替换(OS中实现)。全相联取得地址与每一个TAG进行比较,因此硬件实现起来更麻烦一点,这样带来的优点就是快。

    因此全相联用在TLB中,去判断是否有块命中,至于如何更新TLB就是OS要管的事了,用什么策略去更新块,什么时候去更新版本号。为什么OS要管这些呢,就不得不提到,CPU这个东西到底能看到什么,CPU这个东西看起来是一个核心,是所有动作的来源,但是在现代计算机中,他所看见的东西,都是OS让他看到的,所以在指令执行对于程序员的抽象下,OS为CPU提供了更完整的抽象(将虚拟内存呈现给CPU),所以CPU能看到的其实只有TLB页表,但是他却以为他拥有了整个程序空间(更准确一点是占用该CPU的进程,因为对于CPU来说他不关心他到底能看到什么),所以这一段东西就完全串起来了,从低向上自上而下,完全贯通了。

    直接映射

    主存的某一块J映射到Cache中的固定块K,K = J mod C,C是Cache包含的块数;一对多1<>P;

     直接映射的主存格式地址:

    TAG内容:主存中与该Cache数据块对应数据块的区地址;(其实说了半天还是主存地址的高位)

    Index:区内的索引号

     例题:

    直接映射不灵活,容易造成空闲的情况,但是实现比较简单。

    组相联

    Cache分成K组每组L块,主存的块J按照 I = J mod K映射到Cahce内的组I中的任何一块;多对多映射L<>M;

     组相联的主存地址格式:

    TAG:主存中与该Cache数据块对应的数据块的组内块地址;(高位高位高位高位)

    Set:组号

     数据访问与比较并行执行。

     例题:

     

  • 相关阅读:
    python 两个文件对比,以文件1为标准将文件2中有相等的内容整行取出
    【函数式编程】Java函数式编程学习
    【吊打面试官系列-Memcached面试题】memcached 最大的优势是什么?
    【LeetCode 48】旋转图像
    C++信息学奥赛1168:大整数加法
    ABP.Next系列02 项目下载 运行 -Fstyle
    Python 读pdf数据写入Excel表中
    Qt第二十一章:Qt Designer 之 布局
    5分钟学会 gRPC
    Android Framework 核心,为何初级开发需要重点学习Framework?
  • 原文地址:https://blog.csdn.net/zhousiyuan0515/article/details/126960077