首页 >> 电影

面试官:不同进程相异相同的虚拟地址,在 TLB 是如何区分的?

时间:2022-07-06 12:03:57

重定向,一个网络重定向可以被多个虚拟重定向同构。将PIPT图表cache模拟信号TLB,我们可以真的TLB不发挥作用通称原因。

而VIVT Cache发挥作用通称原因,缘故是VA只能转换成成PA,PA;还有面才存储器着图表。中会间多经传一手,所以引入了些原因。

TLB的红门原因

我们真的完以外相同的发挥作用密切关连见到的虚拟重定向仅限于是一样的,所以多个发挥作用下,完以外相同发挥作用的放以外一致的虚拟重定向可以同构完以外相同的网络重定向。这就会引发红门原因。

例如,发挥作用A将重定向0x2000同构网络重定向0x4000。发挥作用B将重定向0x2000同构网络重定向0x5000。当发挥作用A执行的时候将0x2000近似于0x4000的同构关连调用到TLB中会。当预设B发挥作用的时候,B发挥作用访问期间0x2000的图表,会由于中会弹TLB从网络重定向0x4000由此而来图表。这就引发了红门。

如何抑止这种红门?我们可以充分体现VIVT图表cache的能避免,在发挥作用预设时将整个TLB不能接受。预设后的发挥作用都一定会中会弹TLB,但是会引发效能严重损失。

如何尽意味著的避免flush TLB

首再行只能解释的是,这;还有的flush理解成使不能接受的意即。我们真的发挥作用预设的时候,为了避免红门,我们只能主动flush整个TLB。如果我们能够区别完以外相同的发挥作用的TLB嵌套就可以避免flush TLB。

我们真的Linux如何区别完以外相同的发挥作用?每个发挥作用拥有一个独一无二的发挥作用ID。如果TLB在假定确实中会弹的时候,除了较为tag以外,如此一来额外较为发挥作用ID该多好呢!这样就可以区别完以外相同发挥作用的TLB嵌套。发挥作用A和B虽然虚拟重定向一样,但是发挥作用ID不一样,自然就一定会发生发挥作用B中会弹发挥作用A的TLB嵌套。

所以,TLB加进一项ASID(Address Space ID)的给定。ASID就类似发挥作用ID一样,用来区别完以外相同发挥作用的TLB嵌套。这样在发挥作用预设的时候就不只能flush TLB。但是仅仅只能软件包管理工作和分摊ASID。

如何管理工作ASID

ASID和发挥作用ID肯定是不一样的,别重名二者。发挥作用ID假定仅限于更大。但是ASID一般是8或16 bit。所以原因下区别256或65536个发挥作用。

我们的例子就以8位ASID解释。所以我们不意味著将发挥作用ID和ASID一一近似于,我们只能为每个发挥作用分摊一个ASID,发挥作用ID和每个发挥作用的ASID一般是不也就是说的。每创建一个新发挥作用,就为之分摊一个新的ASID。当ASID分摊放后,flush所有TLB,重新分摊ASID。所以,如果就让放以外避免flush TLB的话,理就让原因下,运行的发挥作用数目只能小于也就是说256。

管理工作ASID上只能韧结合。Linux kernel为了管理工作每个发挥作用会有个task_struct结构体,我们可以把分摊给局限性发挥作用的ASID存储器在这;还有。网络重定向托重定向暂存器有空闲位也可以用来存储器ASID。

当发挥作用预设时,可以将网络重定向托重定向和ASID(可以从task_struct获得)共同存储器在网络重定向托重定向暂存器中会。当伦帮忙TLB时,接口可以对比tag以及ASID确实也就是说(对比网络重定向托重定向暂存器存储器的ASID和TLB嵌套存储器的ASID)。如果都也就是说,象征性TLB hit。否则TLB miss。当TLB miss时,只能多级给定网络重定向,伦帮忙网络重定向。然后调用到TLB中会,同时调用局限性的ASID。

如日中天

我们真的操作系统三维空间和用户三维空间是拆成的,并且操作系统三维空间是所有发挥作用提供者。

既然操作系统三维空间是提供者的,发挥作用A预设发挥作用B的时候,如果发挥作用B访问期间的重定向位于操作系统三维空间,放以外可以用作发挥作用A调用的TLB。但是现在由于ASID不一样,引发TLB miss。

我们针对操作系统三维空间这种以外局提供者的同构关连称之为global同构。针对每个发挥作用的同构称之为non-global同构。所以,我们在最终一级网络重定向中会引入一个bit(non-global (nG) bit)象征性不对global同构。

当虚拟重定向同构网络重定向关连调用到TLB时,将nG bit也存储器下来。当假定确实中会弹TLB时,当较为tag也就是说时,如此一来假定不对global同构,如果是的话,直接假定TLB hit,须要较为ASID。当不是global同构时,最终较为ASID假定确实TLB hit。

什么时候无论如何flush TLB

我们如此一来来最终的总结,什么时候无论如何flush TLB。

当ASID分摊放的时候,只能flush以外部TLB。ASID的管理工作可以用作bitmap管理工作,flush TLB后clear整个bitmap。当我们组织起来网络重定向同构的时候,就只能flush虚拟重定向近似于的TLB嵌套。第一印象意味著是修改网络重定向同构的时候才只能flush TLB,但是实际原因是只要组织起来同构就只能flush TLB。缘故是,组织起来同构时你并不真的之前确实发挥作用同构。例如,组织起来虚拟重定向A到网络重定向B的同构,我们并不真的之前确实发挥作用虚拟重定向A到网络重定向C的同构原因。所以就统一在组织起来同构关连的时候flush TLB。

;也: 松本coding

克痢痧中药成分
脉血康能治中风吗
预防拉肚子的药都有什么
安必丁的作用机理
缓解眼睛干涩用什么方法效果好
友情链接: