【发布时间】:2020-01-08 16:15:19
【问题描述】:
如果发生页面错误,那么我们必须替换请求帧的进程中最近最少使用的页面,还是必须替换整个主内存中最近最少使用的页面?
谢谢。
【问题讨论】:
标签: operating-system lru
如果发生页面错误,那么我们必须替换请求帧的进程中最近最少使用的页面,还是必须替换整个主内存中最近最少使用的页面?
谢谢。
【问题讨论】:
标签: operating-system lru
理论
假设有N页数据,其中包括:
我们的目标是用来自所有可能来源的“接下来最有可能需要”的数据填充 RAM。请注意,这可以包括(例如)将属于某个进程的最近使用的数据从 RAM 发送到交换空间,以便您可以使用该 RAM 从 Internet 预取未请求的数据(如果您知道数据更有可能比流程中的数据更早需要)。
主要有3个问题:
一些数据由正常进程控制,而不是操作系统;并且没有标准方法可以让正常进程参与操作系统的“让 RAM 充满最有可能需要的下一个数据”方案。
您通常无法准确预测未来。请注意,您可以查看诸如调用“sleep()”后进程何时唤醒以准确预测未来的一小部分;并且您可以跟踪统计数据以不准确地预测其他事情(例如,如果您知道用户在过去 10 天中有 9 天的午餐时间检查了某个网站,那么您可以预测他们有 90% 的机会会在今天午餐时间)。当然(在某些情况下)“最近使用”是“最有可能很快再次需要”的合理预测;这导致“在 RAM 中保留最近使用的”,这就是“驱逐最近最少使用”(LRU)的来源。
传输数据会产生成本,其中成本取决于数据现在的位置以及当前获取数据所需的硬件有多忙(例如,当当网卡忙于做很多其他事情时,网卡什么都不做,但价格昂贵)
练习
您可以尝试解决所有问题(例如,跟踪很多事情并拥有精美的预测算法;在决定做什么时考虑传输和/或生成数据的成本;并提供某种“当前内存压力通知”,正常进程可以用来参与操作系统的“使 RAM 充满最可能需要的数据”方案);但这一切都很复杂和困难(例如,您希望确保弄清楚 RAM 中应该/不应该在什么中的开销不会比您获得的性能花费更多),因此操作系统通常会做一些更简单和更少的事情有效。
具体来说;一个非常简单的操作系统可能只会“驱逐最近最少使用的”(没有预取,没有考虑传输成本,并且根本没有正常进程参与);尽管非常糟糕,但这可能被认为“足够好”。
如果发生页面错误,那么我们必须替换请求帧的进程中最近最少使用的页面,或者我们必须替换整个主内存中最近最少使用的页面?
理想情况下,您会尝试从所有内存(可能包括属于内核本身的数据)中逐出“最不可能很快需要”的数据;但是妥协是不可避免的,没有什么可以说“尽管非常糟糕,但已经足够好”的操作系统不能仅仅从当前进程中驱逐最近最少使用的页面。
【讨论】: