为什么需要虚拟内存?
内存系统面临的两个问题:
内存短缺:内存资源永远不够,越来越多的进程需要越来越多的内存时,某些进程因为得不到内存而无法运行。
内存访问需要被保护(隔离):内存容易被破坏,一个进程可能误踩其他进程内存空间。
虚拟内存
正如软件工程中的其他抽象,虚拟内存是操作系统物理内存和进程之间的中间层。它为进程隐藏了物理内存这一概念,为进程提供了更加简洁和易用的接口。这个中间层提供了三个重要的能力:
高效使用内存:虚拟内存系统在内存中自动缓存最近使用的存放在磁盘上的虚拟地址空间的内容(通过缺页实现):VM将主存看成是存储在磁盘上的地址空间的高速缓存,主存中保存热的数据,根据需要在磁盘和主存之间传送数据;
简化内存管理:VM为每个进程提供了一致的地址空间,从而简化了链接、加载、内存共享等过程;
内存保护:保护每个进程的地址空间不被其他进程破坏。虚拟内存系统通过在页表条目中加入保护位,从而简化了内存保护。
Cache的操作
cache的3种操作:
clean:检查对应内存cache line 的dirty bit。如果dirty bit为1,将cache line的内容写回下一级存储,并将dirty bit置为0.
invalid:检查对应内存cache line 的valid bit.如果valid bit 为1,置为0.
flush:每条cache line 先clean,再invalid.