超越物理内存:机制
1、前面的假设全是内存空间足够大,能放入所有进程所需的页表。这里开始真实的情况,内存不一定能装下所有进程所需的资源(包括页表)。那为何操作系统要为进程提供足够的存储空间?答案是“方便和易用性”。
2、交换空间:
- 含义:在硬盘上开辟一部分空间用于物理页的移入和移出。
- 操作:在内存大小不足的情况下,将内存中的页交换到其中,并在需要的时候又交换回去。
- 简单机制:加入标志位“存在位”。如果存在位设置为1,则表示该页存在于物理内存中,如果存在位设置为零,则页不在内存中,而在硬盘上。
- 页错误:访问不在物理内存中的页,这种行为通常被称为页错误(page fault)。
3、页交换策略:选择哪些页被交换出或被替换(replace)的过程,被称为页交换策略(page-replacement policy)。这里在后面会详细说到。
4、页守护进程:
- 含义:为了保证有少量的空闲内存,大多数操作系统会设置高水位线(High Watermark,HW)和低水位线(Low Watermark,LW),来帮助决定何时从内存中清除页。关键词:高水位线和低水位线。
- 原理:当操作系统发现有少于LW 个页可用时,后台负责释放内存的线程会开始运行,直到有HW 个可用的物理页。
超越物理内存:策略
1、已知缓存命中和未命中的次数,可以计算程序的平均内存访问时间(Average Memory Access Time,AMAT):
AMAT = (PHit·TM) + (PMiss·TD)
其中TM 表示访问内存的成本,TD 表示访问磁盘的成本,PHit 表示在缓存中找到数据的概率(命中),PMiss 表示在缓存中找不到数据的概率(未命中)。PHit 和PMiss 从0.0 变化到1.0,并且PMiss + PHit = 1.0。
结论:在现代系统中,磁盘访问的成本非常高,即使很小概率的未命中也会拉低正在运行的程序的总体AMAT。所以,必须尽可能地避免缓存未命中,避免程序以磁盘的速度运行。
2、常用策略介绍(重点):
- 最优替换策略:替换内存中在最远将来才会被访问到的页,可以达到缓存未命中率最低。
- 简单策略(FIFO):当发生替换时,队列尾部的页(“先入”页)被踢出。
- 随机策略(RAND):在内存满的时候它随机选择一个页进行替换。
- 最近最少使用策略(LRU):特换最近最少使用的页。页替换策略可以使用的一个历史信息是频率(frequency)。
3、在不同工作负载下的表现:
结论1:当工作负载不存在局部性时,使用的策略区别不大。
结论2:在“80-20”负载场景中,随机和FIFO表现类似,都能很好地运行,但LRU 更好,因为它更可能保持热门页。
结论3:在循环工作负载场景中,LRU和FIFO都可能出现最坏情况。随机策略明显更好,虽然距离最优策略还有距离,但至少达到了非零的命中率。
4、近似LRU:
原因:在实际应用中,难以真正实现LRU。所以采用近似LRU算法实现。这里主要指的是始终算法。
时钟算法:
- 硬件准备:增加一个使用位(use bit)。
- 具体方案:周期性地清除使用位。遇到一个页的引用位为1,就清除该位(即将它设置为0)。直到找到一个使用位为0的页,将这个页进行替换。
效果:
5、其他的虚拟内存策略:
- 页选择策略:操作系统来决定何时将页载入内存。这要求,操作系统可能需要猜测一个页面即将被使用,从而提前载入。这种行为被称为预取。
- 聚集写入策略:该策略决定了操作系统如何将页面写入磁盘。许多系统会在内存中收集一些待完成写入,并以一种(更高效)的写入方式将它们写入硬盘。
6、抖动:
含义:当内存就是被超额请求时(正在运行的进程的内存需求超出了可用物理内存),系统将不断地进行换页,这种情况有时被称为抖动(thrashing)。
简单解决思想:准入控制。
注:
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名,转载请标明出处。