oci*_*cir 9 linux memory-management
执行(例如)以下命令以获取内存映射页面的列表:
pmap -x `pidof bash`
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出:
为什么一些只读页面被标记为“脏”,即需要回写的写入?如果它们是只读的,则进程应该无法写入它们...(在提供的示例中,脏页始终为 4 kB,但我发现其他情况具有不同的值)
我还检查了 /proc/ pid /smaps 并且该页面被描述为“私人脏”。
脏页不一定需要回写。脏页是自内核上次将其标记为干净后写入的页。数据并不总是需要保存回原始文件。
这些页面是私有的,不是共享的,因此它们不会被保存回原始文件中。不可能有只读文件支持的脏页。如果页面需要从 RAM 中删除,它将保存在交换中。
只读、私有和脏但在内存映射文件范围内的页面通常是包含需要在运行时初始化但在初始化后不会更改的常量的数据页面。例如,它们可能包含嵌入指针的静态数据;指针值取决于程序或库被映射的地址,因此它必须在程序启动后计算,在这个阶段页面是读写的。计算完指针后,页面的内容在这个程序实例中永远不会改变,因此页面可以更改为只读。有关代码片段的示例,请参阅stosb 的“Hunting Down Dirty Memory Pages”。
您可能很少看到只读、可执行、私有、脏页;这些发生在一些更自由地混合代码和数据的链接器上,或者使用即时编译。
| 归档时间: |
|
| 查看次数: |
1726 次 |
| 最近记录: |