关于操作系统概念......一个进程可以有两个工作集,一个代表数据,另一个代表代码?
4 回答
“工作集”是与操作系统中的虚拟内存管理相关的术语,但它是一个抽象概念。
工作集只是一个概念,即有一组应用程序当前正在使用的虚拟内存页面,并且还有其他页面不使用。根据定义,应用程序当前使用的任何页面都是“工作集”的一部分,因此不可能有两个。
操作系统通常使用各种页面权限和内存保护来区分进程中的代码和数据,但这是与“工作集”不同的概念。
这取决于操作系统。
但是在像 Windows 这样的常见操作系统上,数据和代码之间没有真正的区别,所以不,它不能拆分它在数据和代码中的工作集。
如您所知,工作集是进程需要在主存储中拥有以避免颠簸的页面集。如果其中一些是代码,而另一些是数据,那没关系 - 关键是该过程需要定期访问这些页面。
如果您想将工作集细分为代码和数据以及可能的其他分类,以尝试对构成工作集的页面进行建模,那很好,但工作集作为一个整体仍然是所需的所有页面,无论这些页面如何页面被分类。
编辑:阻塞 I/O - 这会影响工作集吗?
请记住,工作集是在给定时间段内使用的页面的模型。当进程被阻塞的时间长度与被建模的时间段相比很短时,它变化很小 - 等待是微不足道的,并且所考虑的时间段内的工作集不受影响。
但是,当 I/O 等待与建模之前相比较长时,它就会发生很大变化。在进程被阻塞期间,它的工作集是空的。理论上,操作系统可以在此基础上交换所有进程的页面。
工作集模型试图根据它过去的行为来预测进程需要哪些页面。在这种情况下,如果进程在时间 t+1 仍然阻塞,那么空工作集的模型是正确的,但是一旦进程解除阻塞,它的工作集就会是非空的——模型的预测仍然说不需要页面,因此模型的预测能力失效了。但这是意料之中的——你无法真正预测未来。一般。并且工作集预计会随着时间而改变。
这个问题来自《操作系统概念》一书。他们正在寻找的答案(在网络上的其他地方找到)是:
是的,事实上许多处理器正是出于这个原因提供了两个 TLB。例如,一个进程正在访问的代码可能会在很长一段时间内保留相同的工作集。但是,代码访问的数据可能会发生变化,从而反映了数据访问工作集的变化。
这似乎是合理的,但与其他一些答案完全不一致......