当前位置: 代码迷 >> 综合 >> 2022-1-20
  详细解决方案

2022-1-20

热度:99   发布时间:2023-10-14 11:35:31.0

2022-1-20

  • 分页
    • 地址转换旁路缓冲存储器(TLB)
      • 上下文切换时(切换进程)
      • TLB替换策略

分页

在管理内存空间的时候,我们一般对其进行分页处理
2022-1-20
对于进程而言,它看到的是一共4页的连续空间,每页16字节,而在真实物理空间里,他们的页是被分开放的,类似于虚拟内存的分段
为了记录地址空间的每个虚拟页放在物理内存中的位置,操作系统通常为每个进程保存一个数据结构,称为页表。页表的主要作用是为地址空间的每个虚拟页面保存地址转换,从而让我们知道每个页在物理内存中的位置。
页表是每一个进程的数据结构,如果操作系统运行另一个进程,就需要为它管理不同的页表
2022-1-20
2022-1-20

地址转换旁路缓冲存储器(TLB)

TLB是一个在核心附近的缓存器,存了近期访问的虚拟页的映射
硬件算法的大体流程如下:首先从虚拟地址中提取页号(VPN),然后检查 TLB 是否有该 VPN 的转换映射。如果有,我们有了 TLB 命中,这意味着 TLB 有该页的转换映射。成功!接下来我们就可以从相关的 TLB 项中取出页帧号(PFN),与原来虚拟地址中的偏移量组合形成期望的物理地址,并访问内存,假定保护检查没有失败。
保护检查是指该页是否受到保护,能否访问,在页表里会储存一些其他的二进制位,用来标记该页的访问权利,例如读写或是否普通用户可以访问之类的
如果 CPU 没有在 TLB 中找到转换映射(TLB 未命中),我们有一些工作要做。在本例中,硬件访问页表来寻找转换映射,并用该转换映射更新 TLB,假设该虚拟地址有效,而且我们有相关的访问权限。上述系列操作开销较大,主要是因为访问页表需要额外的内存引用。最后,当 TLB 更新成功后,系统会重新尝试该指令,这时 TLB 中有了这个转换映射,内存引用得到很快处理。
为了弄清楚 TLB 的操作,我们来看一个简单虚拟地址追踪,看看 TLB 如何提高它的性能。在本例中,假设有一个由 10 个 4 字节整型数组成的数组,起始虚地址是 100。进一步假定,有一个 8 位的小虚地址空间,页大小为 16B。我们可以把虚地址划分为 4 位的 VPN(有 16 个虚拟内存页)和 4 位的偏移量(每个页中有 16 个字节)。
2022-1-20
显然其TLB表现为:未命中、命中、命中、未命中、命中、命中、命中、未命中、命中、命中。命中率有70%,也即提升了70%的访问速度

上下文切换时(切换进程)

由于每个进程都有自己的页表,所以在切换进程的时候,之前进程的页表就无效了,这时候TLB该进行甚么操作呢
最简单的就是在切进程的同时把TLB清空,这样的问题是,如果频繁切换进程,由于一直清空TLB,就会频繁触发TLB未命中,拖慢系统运行速度
第二种方法是在TLB内增加一个表示位,标记这是哪个进程的页表
2022-1-20

TLB替换策略

在向TLB中插入新项时,该替换哪一个旧项呢
两个解决方法:1、替换最近使用少的。2、随机替换