在阅读Windows研究内核的内存管理代码时,我对工作集的概念感到困惑。
答案 0 :(得分:17)
“工作集”是“当前算法正在使用的内存部分”的简写,由CPU恰好访问的内存部分决定。这对你来说是完全自动的。如果您正在处理数组并将结果存储在表中,则数组和表是您的工作集。
这是讨论的原因,因为CPU会自动将访问的内存存储在缓存中,靠近处理器。工作集是描述您想要存储的内存的好方法。如果它足够小,它可以全部适合缓存,你的算法将运行得非常快。在操作系统级别,内核必须告诉CPU每次访问新页面(通常是4k大小)时,应用程序在哪里找到物理内存(解析虚拟地址),所以你也要避免那么多的命中尽可能。
有关算法性能与工作集大小(第23页左右)以及许多其他有趣信息的图表,请参阅What Every Programmer Should Know About Memory - PDF。
基本上 - 编写代码以访问尽可能少的内存(即类很小,而不是太多),并尝试确保在该内存的一个非常小的子集上运行紧密循环。
答案 1 :(得分:6)
粗略地说,工作集是活动使用的内存区域。 http://en.wikipedia.org/wiki/Working_set
答案 2 :(得分:5)
“工作集”是一个非正式术语,表示应用程序或应用程序集“经常”(经常用于某些定义)访问的内存。应用程序还可以分配他们不经常访问的内存(每隔几十秒不超过一次,甚至可能不是每小时一次);这将超出工作集。
一个例子可能是你有两个Firefox Windows,一个你几个小时没看过的最小化的Windows,以及你现在正在浏览的一个。用于存储与打开窗口相关联的数据的存储器将位于工作集中;用于存储与未打开的窗口相关联的数据以及几个小时未查看的数据的内存不在工作集中。
这主要用于讨论系统中是否有足够的RAM。如果您的工作集小于RAM,则可以舒适地工作,因为程序或程序经常访问的数据始终在内存中。如果您的工作集大于RAM,操作系统将不断地将页面交换到磁盘,以便腾出空间来交换应用程序想要访问的页面;这些换出的页面,在工作集中,几乎会立即再次需要,这意味着你必须把其他页面写到磁盘上,它就像这样继续下去。这被称为“颠簸”。
如果你不是在读或写很多文件,那么你的磁盘灯一直亮着,你的系统感觉很慢,这是一个很好的迹象,表明你正在挣扎。
答案 3 :(得分:0)
您的程序正在使用的“工作集”中不的所有内存都标记为交换到磁盘。当操作系统需要更多内存用于其他工作时,它会尝试将每个程序的工作集保留在内存中,但其他所有内容都可以用于抓取。
答案 4 :(得分:0)
工作集是任何时候在物理上都在内存中的页面集。虽然工作集如果引用并以千字节显示,您可以拥有的最小工作集是4k(Itanium上为8K),因为它是Windows中页面的大小。
要查看流程的工作集,请查看任务管理器“流程”选项卡中的“内存使用情况”列。
如果您正在运行.NET应用程序,则可以减少工作集,查看任务管理器进程选项卡中的进程,然后最小化应用程序。当Windows将其交换到页面文件时,其工作集会大大减少(因为假定该过程不会“正常工作”)。
答案 5 :(得分:0)
术语"工作集"与工作集页面替换算法有关(该算法在this article of Andrew Tanenbaum中得到很好的解释)。
因此工作集是一个进程要求在执行期间从内存加载的页面。工作集由最近加载的页面和之前加载的k
页面组成。当为新的需求页面使框架空闲时,只能交换不在工作集中的页面。
答案 6 :(得分:0)
工作集是驻留在物理内存中的虚拟页面的子集。