IT铁人
前面说到了Cache System後面还有一个Virtual Memory,Virtual Memory是利用硬碟支援Main Memory的技术。比如说我们做了需要很多Memory的事情,像是Chrome开了很多分页或是开了很多APP,8GB或是16GB的Main Memory有时候会塞不下,所以我们就需要安全且有效率的方法实行,否则电脑将无法正常运作。
在支援Virtual Memory的电脑中,处理器会产生一个Virtual Address,并且藉由硬体及软件转译程Physical Address。
也就是说电脑会告诉你东西的编号,要去某个地方询问才能得知东西的真正位置在哪个装置的哪个位置。
不同於Cache System的单位名称Block,Virtual Memory的单位称为Page,如果要求的page不在Main Memory,则称为page fault。
因为记忆体跟硬碟的存取速度有明显的落差,所以Virtual Memory注重的是减少page fault,通常采用Fully Associative,并且也会使用教聪明的演算法更换page。
我们透过Page Table储存Virtual Address,并将此表存在Main Memory中,Page Table架构如下:
透过page table可以找到phsical page number,并且有一个valid bit,如果是1代表该page在Main Memory中,反之则在disk中,并且称为page fault。因为将page放在Main Memory中程序才能正常执行。
为了更好的演算法决定哪个page要被替换掉,我们需要加上一些资讯。Reference bit就是拿来检测该page多久没有被使用到了,不过因为LRU成本较高,我们使用的只是类似LRU的作法而已。
因为写回硬碟相当花时间,所以我们又增加了一个bit来确认该page有没有被更动,有发生改动才花时间写回硬碟。
增加了这两种bit,在加上Main Memory还有disk的图形就会如下图所示:
如果存取到不在Main Memory(Physical Memory)中的就代表page fault,此时要在disk才能翻到。
可以注意到上面还有一个TLB,马上就来说说他是什麽。
我们凡是都会希望再快一点,page的存取一样有区域性,所以现在用到的page很可能等等又要用到,相较於现在page table放在Main Memory中,如果我们能另外用一个硬体当作一个特别的page table,速度又可以提昇许多。
TLB就像是page table的cache,可以更快速的取得某些physical address,如果这边没有找到再去page table找,所以通常TLB不会太大,以免花在TLB的时间太多。
前面提到如果需求的资料不再较为快速的那一层称为miss,不过miss还可以分成三个类型:
名称 | 原因 |
---|---|
强迫性失误(Compulsory misses) | 第一次使用的区块必定不在快速的那一层中,所以必定发生失误,也称为冷开机失误(cold-start misses)。 |
容量性失误(Capacity misses) | 程序执行时如果容量不足以包含所有需要的区块时,区块会不断被取代。 |
冲突性失误(Conflict misses) | 在Set Associative以及Direct Mapped中,当许多区块撞到同一个entry中,导致其不断遭替换。 |
既然知道了miss的原因,我们就可以着手改善:Conflict misses可以透过增加关联度降低,不过可能造成读取速度变慢;Capacity misses可以透过加大容量,不过可能导致整体效能降低;Compulsory misses可以增加区块大小,不过会造成miss penalty增加。
各种作法都会有优缺点,最後该怎麽做需要不断的实验,才能找出对当下最有帮助的作法。
上一篇 | 下一篇 |
---|---|
Multilevel Cache | Disk很大,你忍一下 |
>>: Day10 为什麽电脑懂我的指令?函数宣告 part2
Hello 大家好,我是阳光伏特家的工程师 Oscar,这是我第一次参加铁人赛!每年都想报名结果每年...
前面有介绍过 Module 的一些基本使用方式,然而有一项非常强大的功能没有被提及,就是 动态模组(...
终於进入到Angular环节了, 个人学习过程中主要以保哥的Angular教学为主。 Angular...
同一个部门,类似的职缺;为什麽有些人做的轻松惬意,而有些人却累的跟狗一样? 如果在过往的工作中只遇过...
JavsScript 的资料型别分成两大类,第一类是基本型别,第二类是物件型别,型别的介绍可以参考前...