【发布时间】:2012-04-15 07:09:30
【问题描述】:
我有一个项目,要求我开发一个应用程序来模拟不同页面替换算法的执行方式(具有不同的工作集大小和稳定期)。我的结果:
- 垂直轴:页面错误
- 水平轴:工作集尺寸
- 深度轴:稳定期
我的结果合理吗?我希望 LRU 比 FIFO 有更好的结果。在这里,它们大致相同。
对于随机,稳定期和工作集大小似乎根本不影响性能?我期望与 FIFO 和 LRU 类似的图表只是性能最差?如果参考字符串是高度稳定的(小分支)并且工作集大小较小,那么与具有许多分支和大工作集大小的应用程序相比,它的页面错误应该更少吗?
更多信息
My Python Code | The Project Question
- 参考字符串 (RS) 的长度:200,000
- 虚拟内存大小(P):1000
- 主内存大小(F):100
- 引用的时间页数(m):100
- 工作集大小 (e):2 - 100
- 稳定性(t):0 - 1
工作集大小 (e) 和稳定期 (t) 会影响参考字符串的生成方式。
|-----------|--------|------------------------------------|
0 p p+e P-1
所以假设上面的虚拟内存大小为P。要生成引用字符串,使用以下算法:
- 重复直到生成参考字符串
- 在 [p, p+e] 中选择
m数字。m模拟或引用页面被引用的次数 - 选择随机数,0
- 如果 r
- 生成新的p
- 否则 (++p)%P
- 在 [p, p+e] 中选择
更新(回应@MrGomez 的回答)
不过,回想一下您是如何播种输入数据的:使用 random.random, 从而为您提供可控的数据均匀分布 熵的水平。因此,所有值都同样可能 发生了,因为你是在浮点空间中构建的, 复发的可能性很小。
我正在使用random,但它也不是完全随机的,虽然使用工作集大小和页数引用参数,但引用是在某些地方生成的?
我尝试使用numFrames 增加numPageReferenced 相对值,希望它会更多地引用当前内存中的页面,从而显示LRU 优于FIFO 的性能优势,但这并没有给我一个明确的结果。仅供参考,我尝试了具有以下参数的相同应用程序(页面/帧比率仍然保持不变,我减小了数据大小以加快速度)。
--numReferences 1000 --numPages 100 --numFrames 10 --numPageReferenced 20
结果是
仍然没有那么大的差异。我是否可以说如果我相对于numFrames 增加numPageReferenced,LRU 应该有更好的性能,因为它更多地引用内存中的页面?或者我可能误解了什么?
对于随机,我的思路是:
- 假设有高稳定性和小工作集。这意味着引用的页面很可能在内存中。那么运行页面替换算法的需求会降低吗?
嗯,也许我得再考虑一下:)
更新:稳定性较低时垃圾不太明显
在这里,我试图将垃圾处理显示为工作集大小超过内存中的帧数 (100)。但是,由于稳定性较低(高t),注意抖动似乎不太明显,为什么会这样?是否解释为随着稳定性变低,页面错误接近最大值,因此工作集大小无关紧要?
【问题讨论】:
-
更新了我的问题:“在较低的稳定性上垃圾不太明显”
标签: operating-system virtual-memory page-replacement