【问题标题】:Are .text pages swapped-out?.text 页面是否被换出?
【发布时间】:2013-08-19 18:35:13
【问题描述】:

是进程内存中的 .text 页面被换出,还是只是包含被换出的数据(堆)的页面?

这里的“换出”是指“被交换到交换区域”,而不是“仅仅从主内存中逐出”。我的疑问是 .text 页面是否只是被逐出然后从 HDD 中读取,因为它们永远不会被修改(与数据页面不同),或者它们是否被交换到交换区域。

那么,属于堆栈的页面是否被换出?

谁能更清楚地说明进程的虚拟内存中的哪些页面被考虑进行交换,哪些页面从不考虑?

【问题讨论】:

    标签: linux-kernel kernel paging swap virtual-memory


    【解决方案1】:

    最后考虑换出所有页面。在 Linux 中,它首先交换释放的缓存页面,然后是干净的非最近使用的页面(这只需要取消映射而不是写入交换设备)。在此之后,它将尝试将内存中的脏文件支持页面刷新到它们各自的支持设备,然后最终到达它必须开始交换匿名支持的进程页面(包括堆栈、可以编辑的数据、堆等......) .任何非内核页面始终是被换出的候选者,这取决于系统上的内存压力。

    已经有后备存储的页面只是简单地取消映射,或者如果它们是脏的,则刷新到它们的后备存储。出于明显的原因,它们不是为了交换而写的。

    【讨论】:

    • 谢谢。我不清楚哪些页面被交换到交换区域,哪些只是被驱逐。其次,仅取消映射页面如何确保在需要时获取它?
    • @user31986 因为您将在后续访问该页面时发生页面错误,然后该页面将执行 I/O 以获取该页面。被驱逐的页面(未发送到交换)是已经有后备存储的页面,只有匿名映射页面被发送到交换(因为它们无处可去)。
    • 谢谢。 “只有匿名映射的页面被发送到交换”,这一切都清楚了!
    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2012-11-18
    • 2010-09-24
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多