Linux 中的内存区域标志:为什么需要 VM_WRITE 和 VM_MAYWRITE?

2024-03-06

Mel Gorman 的“Understanding the Linux Virtual Memory Manager”(2007 年)(这是本书章节链接 https://www.kernel.org/doc/gorman/html/understand/understand007.html#toc31) 描述内存区域 (vm_area_struct) 的标志:

VM_WRITE - 页面可以被写入

VM_MAYWRITE - 允许设置 VM_WRITE 标志

我不明白为什么 Linux 需要这两个标志,而不是其中之一。从上面的描述来看,听起来好像设置了VM_MAYWRITE,但没有设置VM_WRITE。在什么情况下? Linux 内核在这些情况下的行为有何不同?

例如,COW 机制根据 VM_MAYWRITE 标志检测受 COW 保护的页面(请参阅源代码 https://elixir.free-electrons.com/linux/v2.6.11/source/mm/memory.c#L303)。当设置VM_MAYWRITE时,Linux内核不会设置VM_WRITE标志吗?如果是,为什么不使用单个标志并从一开始就设置它呢?


内存保护级别可以更改,内核使用VM_MAY%标志来确定是否允许此类更改。

从上面的描述来看,听起来好像设置了VM_MAYWRITE,但没有设置VM_WRITE。在什么情况下?

在内存最初是只读的并且您希望使其可写的情况下。

例如,COW 机制根据 VM_MAYWRITE 标志检测受 COW 保护的页面(请参阅源代码)。当设置VM_MAYWRITE时,Linux内核不会设置VM_WRITE标志吗?如果是,为什么不使用单个标志并从一开始就设置它呢?

不,事实并非如此。is_cow_mapping()不是检查内存是否可写,而是检查内存是否可以通过以下方式写入mprotect()。如果不能,那么它显然不是 COW 映射!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 中的内存区域标志:为什么需要 VM_WRITE 和 VM_MAYWRITE? 的相关文章

随机推荐

  • UIScrollView 在 Swift 中不滚动

    我的 UIScrollView 不会向下滚动 我不知道为什么 我已经关注了有关此问题的 Apple 文档 IBOutlet weak var scroller UIScrollView override func viewDidLoad s
  • 限制样式表对父窗口小部件的影响?

    我正在设置 a 的背景颜色QWidget子类 当我使用样式表执行此操作时 其他组件的样式QWidget更改 例如 按钮的颜色及其外观发生变化 如何确保只有容器小部件的背景颜色发生变化 其余子组件保持不变 一种方法是指定 ID 选择器 确保设
  • 在 Android 应用程序中播放 Youtube 视频,无需使用 Android Youtube API

    有没有另一种方法可以在 Android 应用程序中播放 Youtube 视频而不使用 Android Youtube API 我们已经使用上述 API 实现了一个解决方案 但在某些设备上需要降级 Youtube 应用程序版本才能播放视频 我
  • 当我们运行任何rails命令时,可以采取什么措施来修复以下错误:“`require_relative':无法加载此类文件”

    任何 Rails 命令对我都不起作用 我通过rvm安装了几个版本的ruby 我尝试安装所有版本的 Rails 它们确实安装成功 但对于所有版本 每当我运行时 我都会遇到以下错误any我的项目目录中的rails命令 rails new blo
  • NSMutableSet 包含重复项

    我有一个名为的自定义类card我需要从随机大小的卡片数组中创建一组 10 张独特的卡片 另外 我需要首先包含所有列入白名单的卡 以确保它们始终包含在内 我的问题是白名单中的卡片 并且只有白名单 可能会在集合中重复 随机添加的卡片永远不会重复
  • 在哪里可以找到 4.0 的 TPL 数据流版本?

    我正在寻找 NET 4 0 版本的 TPL 数据流库 Nuget 包有一个 4 0 版本的库 但它似乎针对 NET 4 5 我发现了对 4 0 版本的各种引用 例如在这个论坛中 http social msdn microsoft com
  • 将鼠标事件从 iframe 传播到托管文档

    我有一个覆盖整个 HTML 文档的 iframe 我想将点击和悬停事件传播回托管文档 我有什么选择 几周前 我被要求针对一个项目对此进行研究 这是可以做到的 这里有一个实际的例子 http www esqsoft com javascrip
  • 授权导入范围后是否可以浏览电子表格?

    我在谷歌驱动器上创建了几个电子表格 所以我是所有这些的所有者 我有一个电子表格 主 它作为主文件将数据导出到我与顾问团队共享的其他电子表格 活动报告 中 导出的数据使他们能够使用列表作为数据验证等 这有助于主文件分析他们的活动 无需清理数据
  • java中的数字格式

    如何在java中获取这些格式 Input 1223893 180703 80967 1461 700 Output 1 223 893 180 703 80 967 1 461 700 我总是会一一转换数字 这只是为了获得更多示例 你可以阅
  • 将 Dash 与 Websocket 结合使用

    使用 Dash 和 Websockets 构建实时仪表板的最佳方式是什么 我想在每次收到消息时更新图表 但我发现的唯一的事情是每 x 秒调用一次回调 如下例所示 import dash import dash core components
  • 下载 Google 网络历史记录的脚本

    如何编写脚本来下载 Google 网络历史记录 我知道关于 https www google com history https www google com history 供稿 https www google com history
  • Façade 是否利用了开闭原则?

    The 维基百科页面 http en wikipedia org wiki Open closed principle 截至今天2013 02 27 开闭原则说它是通过继承实现的 开闭原理这个名称有两种用途 这两种方法都使用继承来解决明显的
  • 创建iOS框架时未定义符号OBJC_CLASS_$

    我正在尝试构建一个 iOS 框架 为此 我使用了一些依赖项 并且单独构建框架项目时没有出现错误 当我在演示应用程序中使用 CocoaPods 安装时 出现以下错误Undefined symbol OBJC CLASS DFPRequest
  • 我需要对 Spacy NER 进行文本清理吗?

    我是新来的NER and Spacy 尝试找出需要进行哪些文本清理 如果有 看起来像我发现的一些例子修剪了前导和尾随空格 然后用开始 停止索引进行处理 我看到一个例子 那个人做了一堆清理工作 但他的准确性非常差 因为所有索引都搞乱了 澄清一
  • 如何将文本格式的时间戳转换为MS Excel的实际日期格式?

    文本中的时间戳为 Mon May 16 00 01 46 IST 2016 我应该如何将此字符串转换为 dd mm yyyy hh mm ss excel 时间格式 您将需要执行一系列字符串操作和日期时间函数 首先假设您的字符串位于 A1
  • 如何向 joint.js 元素添加 onclick 事件?

    我在 DAG 中有一个 joint js 元素 并且希望能够通过单击它来触发事件 我可以用 selector click 来做到这一点 但我想知道是否有一个 joint js 特定的处理方法 因为那样可能会更好 我认为 onclick 的候
  • 是否有可能使用 oAuth 制作 100% 基于浏览器的 javascript Twitter 客户端(根本没有后端)?

    是否有可能使用 oAuth 制作 100 基于浏览器的 javascript Twitter 客户端 根本没有后端 我不这么认为 您仍然需要一种安全的方式从 Twitter 获取访问密钥 并且您可能希望隐藏您的消费者密钥
  • 在生产中顺利重新部署 WAR?

    我想知道是否有一种 顺利的方式 将 Java WAR 重新部署到生产服务器 没有集群 没有 OSGi 我能想到的就是停止服务器 更新文件 重新启动服务器 我需要提前 10 分钟在网站上显示维护警告 你的方法是什么 首先 热部署并不总是有效
  • 在 WPF 中使用 MS ReportViewer

    我将通过将 ReportViewer 放置在 WindowsFormsHost 中来开始在 WPF 应用程序中使用 MS ReportViewer 这是正确的方法吗 设计报表的最佳方法是什么 因为您无法在设计时在 WindowsFormsH
  • Linux 中的内存区域标志:为什么需要 VM_WRITE 和 VM_MAYWRITE?

    Mel Gorman 的 Understanding the Linux Virtual Memory Manager 2007 年 这是本书章节链接 https www kernel org doc gorman html underst