首页 百科知识 换出或者丢弃进程占用的页面

换出或者丢弃进程占用的页面

时间:2022-10-09 百科知识 版权反馈
【摘要】:Linux并不会将选中的进程的整个可交换页面都交换出去,它只删除一小部分页面。Linux交换算法使用页面衰老算法。Linux在PTE中使 用一个硬件相关位来描叙页面的这个特性。进程的每个虚拟内存区域可能有其自身的交换操作,在 交换时使用的是这些方法。Clean的页面可以丢弃同时放入free_area以备重新使用。如果有足够的可交换进程页面被交换出去或丢弃,则交换后台进程将再次睡眠。

4.9.3 换出或者丢弃进程占用的页面

交换后台进程依次检查系统中的每个进程以确认谁最适合交换出去。比较好的候选者是那些可以被交换出去(有些是不可被交换出去的)并且只有一个或者几个页面在内存中的进程。只有那些包含的数据无法检索的页面才会从物理内存中交换到系统交换文件中去。

可执行映像的许多内容都可以从映像文件中读出并且可以很容易重读出来。例如,映象中的可执行指令不能被映像本身修改,所以决不会写到交换文件中去。这些页面直接丢弃就可以。当进程再次引用它们时,只需要从可执行映像文件中读入内存即可。

一旦确定了将要被交换出去的进程,交换后台进程将搜索其整个虚拟内存区域以找到那些没有共享或者加锁的区域。

Linux并不会将选中的进程的整个可交换页面都交换出去,它只删除一小部分页面。如果内存被加锁则页面不能被交换或者丢弃。

Linux交换算法使用页面衰老算法。每个页面有一个计数器来告诉核心交换后台进程这个页面是否值得交换出去(此计数器包含在mem_map_t结构中)。当页面没有使用或者没有找到时将会衰老;交换后台进程仅仅交换出那些老页面。缺省操作是:当页面被首次分配时,其年龄初始值为3,每次引用其年龄将加3,最大值为20。每次核心交换后台进程运行它来使页面衰老——将年龄减1。这个缺省操作可以改变并且由于这个原因它们被存储在swap_control数据结构中。

如果页面变老了(age=0),则交换后台进程将进一步来处理它。dirty页面可以被交换出去。Linux在PTE中使 用一个硬件相关位来描叙页面的这个特性。然而不是所有的dirty页面都有必要写入到交换文件中去。进程的每个虚拟内存区域可能有其自身的交换操作(由vm_area_struct结构中的vm_ops指针表示),在 交换时使用的是这些方法。否则,交换后台进程将在交换文件中分配一个页面并将页面写到设备上去。

页面的页表入口被标志成无效但是它包含了页面在交换文件中位置的信息,包括一个表示页面在交换文件中位置的偏移值以及使用的是哪个交换文件。但是不管使用的是哪种交换算法,以前那个物理页面将被标志成空闲并放入free_area中。Clean(或者not dirty)的页面可以丢弃同时放入free_area以备重新使用。

如果有足够的可交换进程页面被交换出去或丢弃,则交换后台进程将再次睡眠。下次它醒来时将考虑系统中的下一个进程。通过这种方法,交换后台进程一点一点地将每个进程的可交换或可丢弃物理页面收回知道系统再次处于平衡状态。这比将整个进程交换出去要公平得多。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈