cache行构成

1,195 阅读41分钟

Cache行构成

关注条件: Cache数据区大小和Cache总容量

  1. 物理地址位数 ( PA位数
    无论是什么映射方式 都受到物理地址位数的影响

  2. cache总行数

  3. cache块大小

  4. 映射方式

    直接映射: 1Tag标记位 2行号 3块内地址
    组相联: Tag标记位 组号 3块内地址 -->组号=总行数/路数
    全相联: Tag标记位 3块内地址

  5. 写策略
    直写法(重点)-不需要脏位(修改位) **
    回写法-------1bit
    脏位**\

  6. 替换算法:FIFO等
    随机替换:不用考虑替换位 其他替换:如八选一 全相联映射
    替换信息位比特数=log2cache块个数
    cache行替换位到底占多少个比特 取决于 路数

1). cache数据区的大小!=cache总容量
2). cache标记占多少位-确定映射
3). 写策略理解:
Cache行完整构成包括 Tag标记位、 有效位 、数据块(块内数据) 、脏位(修改位)、 替换信息位

回写法: 当我需要写某一个物理地址的数据,数据我优先会写到cache里边(也就是先修改它的副本数据)。但与此同时,暂时不会修改主存里的数据,只有这个数据块需要从这个cache里边淘汰的时候,我才把整个数据块写回到主存。所以在这种情况下,我们就需要1比特1比特的脏位信息表示标记在cache里边的这个数据块有没有被修改过
直写法: 不需要脏位,主存和cache数据保持一致,直接同步修改 所以写策略到底采用直写法还是回写法,决定了一个cache行当中到底要不要引入1比特的脏位, 从而也会影响一个cache行的总大小

下面这三个一定存在
1 有效位:一定存在1bit
2 块内数据:条件3能推出
3 Tag标记位: 1234都能影响tag占多少bit\

4 替换信息位:
5 脏位:
---写回法1bit
---直写法0bit: 修改cache 主存也同步改
替换算法
如果是随机替换算法 替换信息0bit
如果是其他替换算法,则替换信息位的bit数会直接受到4的映射方式影响 ,直接是0bit,组是log2;全相联log2

image.png

image.png

8路组相联- 每个分组有8个cache行标记淘汰顺序

2020

image.png

cache问题思路

TCB
VA-PA 查页表
全相联映射 一个行号指向一个cache行
组相联映射 一个组号指向多个cache行

cache总容量=总行数乘以一个cache的完整构成

切进程的时候,把cache的所有有效位都全部置为零。全部让它失效,相当于做一次刷新。 做一次刷新那一个新进程,

刚开始运行的时候 刚打开的时候,那个软件会比较卡。用着用着那个软件就开始流畅起来了,是因为什么

因为你新切的这个进程。它的cash,它的数据副本在cash当中还还没有填充进来, 所以任何在这个进程运行的时候访问任何一个地址,一定会cash缺失。一定需要访问主存。那你的这个进程肯定就会卡顿,对吧?一定就会卡顿,

而你的这个进程运行了一段时间之后诶,你发现它开始流畅起来了。

因为这个进程的数据开始逐渐的占领。这个cache的这些块这些有效位逐渐的变,从零变成一个一那这样的话,你的这个进程在运行的过程当中。它往就是基于局部性原理,它大概率都会开始能够命中

它表示的就是一个cash行里边的这个数据副本,它是否有效?如果被淘汰了,就就得从1变成0,对吧?

它是否有效或者切进程的时候,也得从一变成零


CPU给出的虚拟地址对应的物理地址是多少?va对应的PA等于多少

这样的一个问题是否在开始命中?得到PA是第一步。 第二个小问题,他问我们这个PA的cache是否命中?cache是否命中。会分析吗?会不会分析?好,它给我们的这虚拟地址

高20比特,然后低位12比特低位。序列号去查快表,

首先查快表。块表当中有一个tag标记。然后有效位 我们就可以确定它的十页号等于多少 把十页号零零四零h?和业内地址末尾的12个,12个比特拼接在一起,就可以得到PA,得到了物理地址也就确定了PA。确定了PA之后,把PA拆分成20+3+5位就可以确定访问的这个PA它对应的分组

因为是组相连映射嘛,组相连映射当中,

你首先要确定这个物理地址对应的是哪个分组?那根据组号上去查一下,在这个分组当中有两个cache始行。你再去对比一下,每一个cache行的这个tag标记位就前20个比特tag标记位,能不能对得上?如果能对得上并且有效位还等于一,那么。cache不就命中了吗?

最后他问如果给出这样的一个地址,呃,吧啦吧啦呃,这样的虚拟地址,然后映射到这个cache的组号是多少?也是一个道理嘛,你把这个虚拟地址看看能不能转换成PA,如果能转换成PA,那么一个PA映射到。cache的哪一个分组是不是只需要看这个PA的中间三个比特到底是多少就可以了,对吧?所以最后这个小问其实也是一个道理,只不过在最后这个小问当中。大家下去看吧,


真题当中给一个数组,要么一维数组难一点的话就是二维数组,二维数组可能涉及到一行一行的去便利,可能涉及到一列一列的便利啊,

上面的二维数组按照行优先存储,你看这个起始地址这个数组的起始地址也告诉我们了 就能够推出任何一个元素的地址,就可以推出任何一个元素的地址size of int=4每一个数组元素是四个字节。然后,刚开始这个数组都不在主存当中,也就会缺页,然后在程序执行的过程当中。不会发生页面置换,也就是说每当缺页的时候,我的内存的容量总是足够的,不需要把老的页面置换出去。

第一个问题,数组a分配在几个页面当中,这个我们先不考虑,
第二个问题。是否有局部性?
第三个问题,在计算机m当中,虚拟地址总共是32位,每一位分别用a31到a0来表示,第0位到第31位啊,低位到高位。 那其中哪几位是用作会内地址?哪几位用作快cash的组号?这个东西a10的虚拟地址是多少?a10这个元素。它在主存块当中对应的cash组号等于多少有思路吗?其实就是问这个cash的地址结构,

第四个小问说。数组a占多少个主存块占多少个主存块一个主存块是32个字节,那整个数组整个数组是24×24行64列。然后每个数组元素是四个字节,对吧?再除以每个块的大小是32个字节。每个块大小是32个字节,你就可以算出整个数组会占多少个主存块

访问数组a的过程当中,不会和其他的什么开始冲突。访问数组a的过程当中cash的命中率等于多少?是不是一类题目啊?朋友们是不是一类题目啊?又是给你一个数组。又是给你这数组的起始地址,又是给你每一个数组的这个元素。然后最后。就是让你推出这个cash的地址结构。变态一点的题目,就是让你在推出每个cash行的完整构成。然后再给给你一个,其实给你数组的本质是给你了一系列的PA对吧?
给你这个数组的本质,给你这个程序的本质是套了一层马甲,它是要给你一系列的。呃,那个PA的访问序列对吧?那访问这些PA的过程当中cash会不会命中?你是不是又得回到?它到底是采用什么映射在组相连映射当中,先确定组号。本来本来是按行一行一行的去遍历各个元素,

最后这个小问说如果按列去遍历各个元素。cache的命中率又是多少?

总结

在第三章的大题当中啊,接下来我们还有trb啊,我们聊完了cache之后再聊trb会快很多,所以trb的学习不需要cache那么多的时间。

cache的题目。开始的题目一般来说啊,就是反正以各种各样的方式去给你,给你一些物理地址的信息。让你去分析cache。静态分析是最重要的第一步,你要先分析cash的地址结构。这套功法分析cache地址结构,然后有的题目可能会让你分析一个cache行的完整构成。那就是这套功法一二三四五。一个一个去分析,不要着急,

做题的时候一项一项的去确定每一项分别占多少个比特?那这样你就可以知道cache行的完整构成,如果他要再考你什么cache的总容量什么的,无非就是一个cache行的总大小算出来之后,你再乘以总行数是不是就OK了?
然后再基于你的这些静态分析。他会给你一个动态分析的题目。给你一个,那个访问序列PA的访问序列,一系列的物理地址。然后让你去分析cash的命中率,或者在这个过程当中有没有发生cache替换等等。那这些问题又回到了我们的静态分析,

静态分析以机器代码的形式给出的这种题目,我们只看一下吧,只看一下会在第四章部分会去讲,像一九年的题目。好吧,一九年的题目,其实你不看这个机器代码也行。

一四年的这个题目。它给了你一二三四,给了你六条机器指令。每一条指令的地址给出来了,那这个地址指的是虚拟地址。根据虚拟地址,我肯定可以拆分出它的虚拟页号,还有页框号对吧?物理页框号那么在一四年的45题当中就基于44题的这个条件。去询问你一些问题,询问你一些问题。比如说第二个小问。说指令cache总共有16行cache和主存的交换块,大小块大小为32字节。数据区的容量是多少?

数据区的容量是多少?cache数据区的总容量怎么算啊?我已经知道,每一个cache块的大小是32字节对吧?那cache数据区的总容量其实就是要确定。总共有多少个cache行?那用每cash行的行数乘以每一个cache行的这个数据区的大小,我就可以算出整个cash数据区的总容量,对吧?如果仅考虑程序p的执行,那么指定cache的命中率是多少?这个题目就是我刚刚提到的第三种题目的条件,它可能不是给你一个简单的C语言程序,而是给了你这样的一段机器指令。

问,你在执行这个这段程序的时候。cache的命中率等于多少?应该怎么算啊?32字节的开始块大小。五个比特对吧?意味着末尾的五个比特表示块内地址。所以我们可以从所我们要访问的就要执行的就是这几条指令嘛,所有的这些指令的末尾。五比特都是块内地址。那末尾的五比特之外。对应的就是cache的块号,对应的就是cache块的tag信息或者组号,

那些信息对吧?只要末尾五比特之外的所有的比特都完全一样。都完全一致的话,那么就可以说明这几个地址,这几个地址。一定这几条指令,这几条机器指令,一定是从属于同一个cache块,对吧?一定是从属于同一个cache块。所以这个题目其实他就又套了一层,这个机器指令用用机器指令的这种方式给了你一些条件,让你去分析这个呃。做cache的动态分析,它到底有没有命中这个问题,

其实本质上也是一样的。也是一样的,我们只要理解了这个cache访问的过程,什么时候cache会命中什么时候cache不会命中理解了这些过程之后。其实这个题目我觉得也可以迎刃而解,14年的题目比较有代表性。是我在这儿提到的第三类啊,以及其代码的形式给出。本质上也是给出。PA的访问序列对吧?只不过他是用机器指令给你的。然后你最终还需要把这个PA的访问序列去结合你的这一系列分析去看开始的命中率,开始的替换这些事情。


23.4一个主存块32字节 整个数组24行x64列 每个数组元素4个字节 再除以每个块的大小32字节 就可以求出整个数组占多少内存块
32字节等于5bit

虚拟地址,它会被分为页号,虚页号和页内偏移量


那我们知道trb是在呃va转换成PA这个过程当中,需要使用到的东西。就是去trb当中查慢表的数据副本,可以加快这个查表的这个速度。

根据昨天我们讲的那个骚图,相信大家已经有了更直观的一个认识,更直观的一个认识。好,那么对于trb涉及到trb的答题啊,涉及到trb的答题,我们需要关注这样的呃。trb关于trb的大题。需要关注这样的一些信息。需要关注这样的一些信息。啊,需要关注这样的一些信息。首先第一。虚也好。多少位?

虚页号多少位?呃呃,虚拟地址多少位?虚页号?多少位?特别是后者啊。因为虚页号是用于查查快表的,对吧?一个虚拟地址,虚拟地址,它会被。虚拟地址,它会被分为呃页号,虚页号和页内偏移量嘛,对吧?

业内地址或者叫。那我们重点关注的是页号。虚拟业号占多少位?我们需要用虚拟页号去查trb这个快表的信息。好,然后第二个条件。第二,第二个条件啊,第二个条件我们还需要关注。trb的映射方式。trb的原理本质上和cash是一样骚图的图四表示了一个全相连映射的t2b。图四。表示的是一个全相连映射的t2b。选项的原因说。然后图九图九表示的是一个四路组相连。四路组相连的t2b。它的原理和cash其实是一样的,硬件层面的原理是完全一样的。好,那么你会发现我在这儿啊,没有没有说trb有直接映射的方式。

trb的映射方式,我在我在骚图里边并没有画,直接映射,大家思考一下为什么?思考一下,为什么?用图四来给大家解释啊。为什么trb没有直接映射我在骚图里边?为什么只画了直全相连映射和?组相连映射

图九假如trb采用的是直接映射方式。我们从这砍一刀,从这砍一刀。四兄弟就砍我一刀,从这砍一刀,后面的东西我们都抛弃,不用假设这个trb,它总共有八行。行号如果用直接映射的话,

我们得先查诶,这个虚拟地址对应的行号对吧?假设它有八行,假设它有八行,行号分别是零到七。如图所示。假设它有八行零到七。那么,在采用直接映射的时候啊,我们是如何去查这个trb的?我们会从虚拟地址当中。找到虚拟页号,对吧?虚拟业号。虚拟地址的高高若干个比特啊,

是虚拟页号,而虚拟页号的后三个比特。后三个比特。后三个比特表示的是行号,假如采用直接映射的话,那后三个在这个例子当中就是后三个比特。表示行号。那么,接下来的问题是这样的。我的一个业号啊。假设我的一个业号嗯。呃,这这样吧。假设我的进程正在运行。并且。

在最近这段时间内,最近这段时间内。我的进程经常需要访问零号页。和八号页。零号页和八号页,我的进程经最近经常需要访问零号页和八号页好,那情况会是什么样呢?当我的进程要访问零号页的数据呃,要要查零号页的这个地址的时候。零号页的行号,它末尾的三比特会映射到零这个位置对吧?会映射到零这个位置好,那么零号页的页表项。零号页的页表项。是不是会被?

零号页的页表项是不是会被复制到trb行号为零的这个位置好,除了零号页之外,紧接着我又访问了八号页。那八号页的末尾三比特也都是全零。八号页的末尾三比特也都是全零,那此时八号页访问完之后,我又会把八号页的。表象给它覆盖掉,对吧?把它覆盖回零号页呃,覆盖到零号第零行这个位置。八号页完了之后又回到零号页,那么这个表象又从八变成08080808,不断的重复。这种情况是很有可能发生的,

对吧?比如说。我有一个数组a。它刚好所有的数组元素都在第零页,我有一个数组b,它所有的元素都在第八页,现在我要计算数组a。和数组b的加法。这种代码是不是很常见?数组a和数组b的加法,这种代码很常见吧?那当我计算数组AI+BI的时候,意味着我的这行代码就需要先访问零号页。从零号页当中找到AI再访问,八号页找到BI 0号,

八号,零号,八号,如此反反复。那这样的话,我的零号页和八号页不巧,它的行号在直接映射的情况下,它的行号都是相同的。那它就会出现什么==trb的抖动==,你可以这么理解。trb的抖动。就是这个表象被频繁的换入换出,每一次都是trb miss trb,没有民种对吧?每一次都是trb,

没有民种。但是这个表象又频繁的零第零行,这个表象会频繁的换入换出,所以你思考一下这种。直接映射的trb,你觉得好用吗?是不是会出现这种效率问题?对不对?会会出现这种抖动问题,效率很低,做很多无用功。因此trb的图示我并没有给出啊,直接映射那假如是组相连映射的话,是不是就好办了?

骚图的图九,我采用四路组相连映射,如果说我采用的是组相连映射。那么okay。同样是近期频繁的访问零号页和八号页,零号页和八号呃。零号页和八号页的。组号。末尾三个比特啊,没问题啊,零号页和八号页的左号末尾的三个比特都是零都是零。那么我是不是因为一个分组当中有我可以存四个页表项的那个副本数据嘛?那我可以把零号页的呃,

零号页的那个页表项。存到这八号页的页表项存到这,那每一次我来查trb的时候,我无论是访问零号页还是八号页,我总能命中命中率很高。对吧,所以组相连映射这种技术在trb当中是可以被使用的,而直接直接映射这种这种技术在trb当中通常不使用。那全相连映射的trb其实呃,它它又是效率更高的一种啊,我反复的我。我重复我近期经常要访问零号页,八号页那零号页我随便给它分配一行,可以分配到任意一行八号页的页表项,我也可以给它分配到任意一行

是这样一个逻辑对吧好,所以我们回到刚才的这个总结trb的映射方式。trb的映射方式呃,你可以记一下啊,直接映射这种。抖动可能trb抖动。效率低。可能t2b抖动。效率低。好,所以所以直接映射方式,我们接下来就不做探讨。如果考试的老师他出题目出到什么直接应试的trb那?啊,反正大家都知道它的原理和cash一样就行了,

那除了直接映射之外,trb考试当中可能会有两种映射方式,一种是组相连。要关注k路组相连映射,要关注它的路数,另一种全相连映射。这是trb有可能的映射方式。那trb的这个呃。信息哈。除了这两个之外。第三个,你还需要关注替换算法,同cash。cash也有什么随机替换啊?cash的替换算法同cash的替换算法,因为它呃底层的原理是一致的嘛,对吧?

cash有随机替换,先进先出,还有最近最久未呃最最近不常使用巴拉巴拉的,有各种各样的算法。好那么。对于trb来说啊,它的替换其实也是同样的逻辑,比如说假如,我是假如,我这个trb。看骚图的图八这个tlb啊,假设嗯一二三四五六它采用全相连映射。trb总计只有六行。

总计有六行。啊啊,我们取个整吧,总计有八行,我们再补两行。假设我们总计有八行trb,也就是说在trb当中有八个页表项的副本数据,对吧?那么tlb是不是总会装满?装满了之后,我们是不是也得决定到底要把哪一份哪一个页表项的副本数据给淘汰掉?给替换出去,对吧?给淘汰掉。那在这种情况下,

我们也需要考虑替换算法,这个这个问题如果采用随机替换算法。那这八行当中,我任意淘汰一行都OK,所以如果采用随机替换算法的话。一个trb的一整行的完整构成,我就不需要替换信息位。而如果采用的是先进先出或者其他的任何一个算法,其他的任何非随机的算法的话。那么,我的这个trb的一整行当中啊?trb的一整行。除了trb标记,除了有效位,除了这个页框号之外,

我是不是也得考虑替换信息位这个东西啊?如果总在全相邻映射当中,如果总共有八行tlb的话,那我是不是得用三个比特来表示替换信息,和cash是一样的逻辑,对吧?

那在组相连映射当中,我们看。骚图的图九。在组相连映射当中,如果我采用了比如说四路组相连映射,那么就意味着如果在一个分组当中,这四个trb的呃trb的四个行都全部都填满了。接下来我我需要一个新的那个页表项,要把它调进来,我需要淘汰一个trb。淘汰一个页表项的副本数据,那么在四路组线类映射当中,我是不是用两个比特去表示同一个分组当中的这四?四个表象,它的淘汰优先级分别是多少?对吧?用零到三去表示。所以trb的一整行的完整构成,其实也除了trb标记,除了有效位页框号之外。有可能也会涉及到这个替换信息位,那具体替换信息位等于多需要多少个比特?这个和cash是一模一样的道理。

这是trb,你需要关注的三个条件,你需要关注的三个最重要的条件。那刚才我们说tlb的完整构成。tlb的一整行或者trb的一个表象吧,也可以这么说的完整构成。首先tag标记为。

其次,有效位。然后每一个页每一个页表项,每一个trb的表项肯定会有物理页框号,对吧?物理框号。

最后替换算法的信息位。

trb的有效位一定是存在的。而且是一比特,对吧?一定存在一比特页框号,这个东西也一定存在。页框号也一定存在,具体多少个比特要看要看那个呃。多少个比特得看物理页框号就是。得看页框数量吧。物理页框总共有多少个?需要多少个比特去才能去映射物理,所有的物理页框对吧?这就是页框号,你要关注的信息。确定了页框总共有多少个,

你就可以确定这页框号占多少个比特,当然有的题目他可能就直接画图,就告诉你这些信息了,你不用自己去推。好,接下来tag标呃tag放到最后吧,tag放到最后替换信息位。替换信息位啊。它占多少个比特?要看题目给的条件就是替换算法。trb的替换算法。要看题目给的条件啊t2b的替换算法到底是什么?如果是采用随机。随机算法。如果是采用随机替换算法的话,

替换算法的信息位就是零比特。只需要零比特,而如果采用其他。比如说先进先出算法,先进先出的替换策略,或者最近最久未使用策略等等啊。如果采用其他的算法,那么。它的替换信息位有多少位啊?怎么计算?是不是就得看?我们还得关注它的,它到底是组相连映射。还是全相连。如果是组相连映射这种呃,如果采用的是组相连映射,那么这个替换算法的呃,这个信息位。位数应该是等于log以二为底。路数。对吧,四路组相连,意味着每组有四个。页表项,四个trb的表项。八路组相连,意味着每组有八个表项,所以log以二为底路数这么多的比特。就是就是替换算法的信息位而全相连映射的话log。以二为底。就是trb的总行数吧。trb总共有多少行?和cache是一样的逻辑,对吧?和cache是一样的逻辑好,这是替换算法的信息位,最后是tag标记位。tag标记位。受什么影响?tag标记位受什么影响?是不是也得考虑它的?它采用的是什么映射方式?

如果采用的是。如果采用的是组相连映射。如果采用组相连映射,那tag标记位是等于多少?我们看骚图的图九。骚图的图九。骚图的图九我们采用了四路组相连映射,对吧?四路组相连映射四路意味着每个分组占总共有四个表象。总共有四个表象。那么,我们的虚页号啊,虚页号的末尾的。若干个比特,需要表示组号,也就是说我们需要关注它总共有几个分组。而不是不是关注他的路数,而是关注他的组数,总共分为了几个分组?像这个图骚图的图九当中总共八个分组,因此需要用三个比特来表示组号,对吧?三个比特表示组号。那除了这三个比特之外,高位的那些部分就是trb标记。剩余的高位就是t2b的标记位。标记为好。那组相连映射它的。结构它的地址啊,它的地址结构就是啊。整个虚页号。整个虚页号会被拆分成两个部分。一个是tag标记位。就是trb的标记位,一个是组号。一个是组号。拆分成这样的两个部分。而左号。组号的位数啊,组号的位数。等于。log以二为底组数。

要看trb分为了几个组,对吧?注意哦,是组数。是组数而不是路数,是组数而不是路数。好,如果是全相连映射的话。如果是全相连映射的话,那么它的tag标记为。就和虚页号完全相同。整个序列号作为tag标记位,就这么简单,就像我们的图骚图的图。图四骚图的图四一样,

把整个虚拟页号作为tag标记位。好。那讲完这个啊那。trb,你只需要关注到这三个东西。trb的题目分析也会变得顺畅起来,接下来我们看两个题目,然后就下课。坚持坚持。okay吗?好,我们看两个题目啊,我们回到。刚才我记得我们看了一个题目,它提到了trb。

看二一年王道三点六,147页第七

这个题目它就是主要考了trb,主要考了trb,假设这个什么?呃,计算机主存地址是24位,主存地址24位,它这给的是PA的位数,对吧?主存地址是PA的位数。采用分页存储管理,虚拟地址为30位好va的位数,我们已经知道了页大小是4 KB,4 KB 1需要用12个比特来表示。对吧,需要用12个比特来表示,

然后trb trb采用trb啊,采用二路组相连映射方式。二路组相连映射方式和lru替换算法总共分了八组哦,哈哈哈,总共分了八组。请回答下面的问题。嗯,好。其实啊。就是。呃,我们在。就是呃我我在这画一个高亮啊,画一个高亮回到刚才总结的这个图。所有的涉及trb的题目,

所有涉及trb的题目,你首先要搞清楚的就是。虚页号。查tlb的时候,序列号应该如何拆分的问题?你首先要搞清楚的就是这个问题。类似于就类似于cash的题目,你首先要搞清楚,你要访问cash的时候PA要如何拆分。这是开始题目解题的第一步啊,那trb的题目也是一样的,你要解决trb的题目,那首先第一要关注,第一个要解决的就是。你你要怎么把序列号拆分成诶查trb的这样的几个部分,

那无非就是。首先要关注的就是它是采用组相连还是全相连,我们说了去直接映射不太可能出现呃,即便出现直接映射,那其实就是行把。直接映射其实就是一路组相连嘛,对吧?就是把行号把组号变成行号就行了,就是呃,同样的道理好我们。所以我们二一年的这个题目,我们也要首先把tlb查tlb的那个地址信息。va的地址清晰,先给它拆分出来,先给它拆分出来好,

那不妨来画一下啊。总共30位。30位的va。30比特的va末尾的12比特是12比特啊,12比特是业内偏移量。业内偏移量而剩余的。18比特更高位的18比特。是虚业号。序列号。那这个trb它既然采用的是二路组相连映射,那根据刚才我们的总结。当tlb采用组相连映射的时候,我们是不是需要把它的虚页号拆成两个部分末尾的这?低位的几个比特需要表示组号,高位的几个比特需要表示tag就是标记位去对比的那个标记位信息。

好,那么组号等于log以二为底组数。题目告诉我们。它总共采用二路组线链映射,总共分为了八组,三比特表示组号,那剩下的高位的15个比特就是tag标记位。对不对tag标记位好? 第一个小问问我们虚拟地址中哪几位表示序列号,哪几位表示页面地址啊?刚才不小心已经说出来了。道破了天机十高18位,是业号低12位,是业内地址第二小问问。我们已知访问trb的时候,虚页号的高位部分用作trb的标记,低位部分就是。用作trb的组号m的虚拟地址中,哪几位是trb标记,哪几位是trb组号?好高18位当中啊,低三位是组号。高15位是tag标记位第二个小问,也解决了

第三个小问。假设trb初始为空。访问虚拟页号,这几个页号的时候。访问这几个页号的时候,在这个过程当中,哪一个序列号对应的t2b表项被替换?哪一个trp很抽象,

第三个小问,现在有思路吗?对这几个序列号访问。需不需要发生替换?会不会命中trb表象?需不需要替换?现在有思路吗?有思路吗?我们的这几个数啊,它就是给了你虚拟页号啊,给了你虚拟页号,你把这几个数。分别翻译成。

18个比特来表示,分别翻译成18个比特来表示,然后关注这18个比特当中的末尾三个比特。用这样的方式,你就可以你就可以确定每一个序列号,它对应的组号应该等于多少对吧?好,那么你确定了每一个页号对应的组号是多少了?之后他问你的是?哪个序列号对应的trb表象被替换?有思路吗?这个tlb采用二路组相连,也就是说每一个分组,每一个分组会包含两个tlb表象。对吧,

每一个分组最多只能存储两个trb表象,所以如果说唉,我现在不知道我我也没算过,大家可以自己去算哈算一下。假如十二七四二十假设这几个序列号都。映射到了同一个分组。就是把它转换成18比特,然后观察末尾的三比特,假设这几个序列号十二七四二十都映射到了同一个分组。那么是由于每一个分组。它是两路组相连,由于每个分组只能存两个表项,对吧?所以访问12这个页表项的时候12。12这个页号对应的页表项的时候会把这个页表项诶放到这个分组当中。占了一个坑,然后七这个页号对应的页表项也会放到这个分组当中OK,一个分组当中的两个位置已经被占满了,那接下来如果再访问到四号页。而四号页的组号和12期又是相同的,那么四号页的这个页表项。要把它放到trb当中,是不是就得把12或者七给替换出去?对不对?就得把12或者七给替换出去?那访问四号页的这个页表项的时候。trb表象就发生了替换,那同样的道理,如果最后一个20,

它也映射的同一个分组,那么访问20,这个表象的时候也会发生trb替换。 明白了吗?这其实和。cash是一样的原理啊,只要弄清楚cash。你再来看trb,我相信也会有更深刻的认识

啊对了,刚才第三个小问呃说漏了一点哈,就是访问这些表象的时候,你还得考虑这个替换策略,你还得考虑替换策略。哪个页表项是先放到分组当中的?啊,

或者说。aru是最近最久未使用嘛,根据这个替换策略,你去判断一下诶,哪些页表项会被替换?所以这个替换策略是这题目中的这个lru替换算法条件是用在第三小问哈大家,自己回去分析一下,自己回去分析一下。和cash是一样的道理, 第四个小问,如果说将这个计算机当中的虚拟地址位数增加到32位,那么trb的。表象的位数需要增加几位? 第四再回到第四个小问,虚拟地址增加到32位,那trb表项的位数。应该增加几位,那这就回到了我们。二一年的这个题目非常典型啊。

这就回到了我们刚才分析的这个问题,每一个trb的表象的完整构成。包括tag标记位,有效位,页框号和替换算法的信息位,对吧?那在这个题目的第四个小问,这题目的第四个小问是告诉我们虚拟地址va增加到从30。呃,原本是30位增加到32位啊va,从30位增加到32位。那么,每一个trb表象会受影响的是哪个东西啊?

页框号会受影响吗?页框号只受物理页框数量的影响,对吧?如果说物理地址我换一种问法。如果第四个小问,第四个小问,我改成物理地址,增加到32位,那么就意味着页框号也位数就会增加,对吧?那这样的话,如果是物理地址的位数增加,那么trb表象的这个元素,这个因素就会受到影响。就会受到影响,

而如果是va增加了两个比特,那受影响的只有tag标记位对不对?替换算法,这个只和呃路数组相连,映射当中只和路数相关。替换算法的这个标记位只和路数相关,而有效位一定就只有一个比特页框号不会受va的位数变换影响。va的位数变换会影响的就是。你看va原本30位虚页号用18比特表示,如果增加到32位,那虚页号就是20比特对吧?

那么tag标记位就会从15位变成17位,17比特。所以每一个trb表象,每一个trb表象的位数就应该增加两位,也就是tag标记位会变多。好,所以明白了trb的每一行的完整构成,其实这个题目分析起来就非常的轻松了。非常轻松了。

最后看一道题,我们就结束今天的课程啊。一八年的这个题目,刚才第二小问被我们跳过了,一八年这个题目是看图说话啊,

你要观察它的这个trb。它的这trb它采用什么样的映射方式?它采用什么样的映射方式?那trb的映射方式会影响什么呢?会影响虚页号的结构拆分?如果他是用整个20比特去查页表去对比这个trb的tag标记位,那说明这一定一定是全相连映射,对吧?如果这个题目我要让它呃,我要改编这个题目的话,我可以这么改,把这20位的序列号变成呃17位。加三位17+3位,然后用这三位。这三位作为组号,

用这17位作为tag标记位,如果它是组相链映射,如果它是组相链映射的话,那序列号肯定需要分成这样的两个部分来使用。对吧,需要分成这样的两个部分来使用,而一八年的这图,它没有把序列号拆分,所以它肯定是全相链映射。okay吗?这是一八年题目,

一六年,146页的第五题

这个题目也是看图说话啊,他在这个题目当中,他在这个图当中给了你很多信息。好说呃,采用夜视虚拟存储啊,采用夜视虚拟存储,按自己编制虚拟地址va va是32位物理地址PA是?24位夜大小8 KB,8 KB需要用13个比特来表示,对吧?trb采用全相连映射,采用全相连映射。然后cash的数据区大小是64 KB,数据区大小是64 KB,按照两路组相连映射方式来组织cash。cash是两路组相连trb是全相连,然后主存块的大小是64b,主存块的大小是64b。那么,64k,64 KB除以呃那个主存块的大小64b。

可以算出cash的总行数,对吧?可以算出cash的总行数,而cash采用二路组相连映射,二路组相连映射。因此,它总共分几个分组,用总行数。总行数除以路数。除以路数。是不是就可以得到cash的分组数?cash的分组数得到了cash的分组数之后,我就可以根据分组数推出组号cash的组号。需要多少个比特?行云流水一套操作,

行云流水好,那对于trb来说,它采用全相邻映射,所以我们知道在全相邻映射的trb当中,我们只需要把虚拟地址的虚拟号。序列号作为完整的tag标记位去查trb就可以了。只需要把序列号去查trb就可以了,好那么呃,这个图当中哈,它第一个想问我们a到g的位数各是什么trb的标记字段b当中应该存放的是什么?我们来把这个图完善一下啊呃,这个是虚拟地址,它拆成了两个部分,一个a一个空,那这个a这个部分它你看比较器。

去查t2b,去查t2 BA,这个部分是什么?现在明确了吗?是页号对吧?a这个部分是页号。业号等于多少个比特?等于32比特再减掉呃,这个业内偏移量13比特32-13。等于多少等于19吧,19个比特业内偏移量是13个比特业内偏移量是13个比特。好,然后呃,这的标记啊trb trb的这个标记b是什么?b是什么?

b是什么?什么东西啊?呃呃,它是让我们说位数啊。tlb采用全相连映射的tlb,它的tag标记位和虚页号是完全相同的,所以这的b。是不是也是19个比特也是19个比特好,然后我们再看啊,它这是查trb trb命中不命中的话查页表。然后trb这边查到了页框号,页框号得儿干到这个地方,这儿是物理页框号对吧?c就是物理页框号。那页框号等于多少呢?

物理地址总共是24位,然后其中末尾的13位是业内偏移量24-13=11,所以高11位就是物理地址。高11位就是物理地址呃,物理页框号低13位就是业内偏移量就是业内偏移量。好,然后把这24位的PA物理地址拆分成cash的地址,再去查cash。呃,因为cash采用组相连映射对吧?组相连映射那所以需要第一个部分就是tag标记位,第二部分就是组号,第三个部分就是cash的字块内地址。由64b的字块内地呃,

这个这个块大小可以推算出g这个部分占多少个比特?而通过刚才我们提到的这个思路,你确认了组号,确认了组数,分了几个分组之后,你就可以确认组号需要多少个比特。那PA当中剩下的高位就是tag标记位,而这个tag标记位,而这个tag标记位的呃,那个位数。位数和我们这个二路组相连映射的这个呃cash的tag标记位应该是相同的,所以h的位数和e的位数又是相等的,大家自己下去推一下。那这就是第一个小问,第二小问。

呃将块号为这个的主存块放到cache当中时,所映射的cache的组号是多少?这个块号映射到呃。这是快号啊,这是快号,这个快号映射到cash当中,组号等于多少会做吗?64个字节,64个字节需要用六比特来表示。末尾的六个比特,六个比特是块内地址。然后高位啊,

高位的。更高位。这个是快耗。这是快号主存快号。主存块号是四零九九,你把这个四零九九诶翻译成翻译成e和f。叫翻译成二进制,翻译成二进制拆分成tag标记位占多少个比特,再拆分成组号占多少个比特?组号占多少个比特?那这样的话,你是不是就可以确定这个四零九九它属于cash的哪个分组?对吧?对应的h字段的内容是什么?h字段的内容其实就是tag标记位等于多少,

你看h字段的内容就是tag标记位等于多少,自己去算。然后第三个小问开始缺失了八八八,第四个小问采用止血法的策略呃八八八,这这个大家自己去看吧。反正剩下的就呃,你看答案是可以看懂的,然后因为我们六点钟噼里啪啦,这边会强行停播哈它。可能会影响我们深沉回放这件事情,所以在这儿就不得不跟大家先说一声再见了。好,那么今天的课程就到此为止,今天我们介绍了cash和trb的题目,大家首先主攻cash的题目,

把cash理解透了trb也顺理成章的,可以理解。那cash的题目我们呃首先要解决的就是分析cash的地址结构。分析地址结构,然后有的题目你需要分析cash行的完整构成,只要把cash的静态分析做完了,那么cash的动态分析无非就是套一些马甲。给你一些呃,这个物理地址的访问序列,然后去计算开始的命中率,开始的替换等等这些东西。然后trb的考察方式呢?也和cash是类似的啊,只不过是查一个是茶叶表,一个是访问cash,

快就这么简单