Linux mmap读/写触发共享文件页生命周期

2023-11-06

概述

Linux的mm内存子系统的核心功能就要要管理各种类型的page,确保能高效分配和释放,让物理内存得以最大化使用。初识内存系统往往关注的是page的申请和管理流程,容易忽略page的释放回收流程,其实理解mm中的内存回收和释放也是最核心的机制。

Linux内核为了支持各种场景的内存使用场景,将page分成多种类型,怎么识别什么系统调用或者代码场景产生的是什么类型的page也是非常重要的,不过本文重点不是来讲解这个话题,而是只针对mmap共享文件场景讲述,看看这种file-back的page的生命周期是怎么样的。之所以讲解mmap共享文件场景,是因为网络上基本都是讲解匿名页生命周期的,但是还没由发现一篇完整讲述文件页生命周期的文章,而文件页的生命周期也是非常重要和复杂的。

所谓生命周期,就是页面从产生到回收的整个代码流程。我们知道,Linux内核page页面回收相关最重要的一个变量时_refcount,关于该点可以参考我前面的文章:page _refcount和_mapcount字段_nginux的博客-CSDN博客

本周将详细描述mmap写共享文件的page从诞生到回收的整个流程。

示例代码

#include<sys/mman.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<error.h>

char *g_addr = NULL;
char* mm_anon_priv() {
    return NULL;
}

char* mm_file_shared() {
    int fd = 0;
    int i = 0;
    int tmp;
    char *addr = NULL;
    struct stat sb;

    if((fd = open("/sdcard/1.txt", O_RDWR | O_CREAT)) < 0){
        perror("open") ;
    }
    if((fstat(fd, &sb)) == -1 ){
        perror("fstat") ;
    }

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

Linux mmap读/写触发共享文件页生命周期 的相关文章

  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是

随机推荐

  • 傻瓜式鸿蒙3.0使用Google(无需电脑)

    首先声明 此文仅做交流学术及为出国用户提供微不足道的帮助用 请遵守我国相关法律法规 此文仅做交流学术及为出国用户提供微不足道的帮助用 请遵守我国相关法律法规 此文仅做交流学术及为出国用户提供微不足道的帮助用 请遵守我国相关法律法规 可以先给
  • jsp+mysql分页技巧:巧用limit 进行分页查询

    发现问题 今天检查web程序 浏览 彩信xxxx日志 时 突然发现该web程序中不能浏览了 出错了 如下 500 Servlet Exception java lang OutOfMemoryError Resin 3 0 6 built
  • 文件描述符的阻塞与非阻塞设置

    默认文件描述符是阻塞的 即文件IO是阻塞的 设置为非阻塞 int setNonBlock int fd int flags fcntl fd F GETFL if flags 1 return flags flags O NONBLOCK
  • Qt递归获取指定文件夹下的所有文件

    方法一 使用类QDirIterator来进行遍历 简介 大概是说 适合于大目录遍历 支持递归但是不支持排序 QDirIterator NoIteratorFlags默认值 没有标志 迭代器将返回path符合QDir Filters的条目 Q
  • Android图形显示系统6 图像缓冲区(下)

    一 概述 我们再次回顾下上一篇文章 Android图形显示系统5 图像缓冲区 上 描述的图像缓冲区 Android 图形缓冲区由哪些部分组成 Android 的图形缓冲区由 Surface BufferQueue Layer Graphic
  • 树14--二叉搜索树的第k个结点

    树14 二叉搜索树的第k个结点 jz62 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 给定一棵二叉搜索树 请找出其中的第k小的TreeNode结点 测试用例 输入 5 3 7 2 4 6 8 3 返回值 4 说明 按节点数
  • JSP 页面传值方法总结

    1 URL 链接后追加参数 a href next jsp paramA A paramB B URL 后面追加参数 a
  • 【华为面试题】空间换时间

    题目 代码 function findCenterIndex nums 当数组只有一个元素时 该元素即为中心位置 if nums length 1 return 0 初始化左侧乘积和右侧乘积 let leftProduct 1 let to
  • Unity笔记—7(Unity常用API整理之Transform组件)

    Unity笔记 7 Unity常用API整理之Transform组件 文章目录 Unity笔记 7 Unity常用API整理之Transform组件 前言 一 Transform类 位置转换 核心知识点 属性 方法 继承的方法和属性 来自C
  • 各类配置文件格式简介(ini,yaml,conf,xml...)和nb的Viper

    目录 配置文件 ini 介绍 语法 demo 库 json 语法 demo 库 xml 介绍 语法 demo yaml demo toml properties HOCON plist plist 是捆上了手脚的 xml Viper 22k
  • ES的DSL语句

    1 相关概念 mysql与elasticsearch的概念对比 MySQL Elasticsearch 说明 Table Index 索引 index 就是文档的集合 类似数据库的表 table Row Document 文档 Docume
  • vue 代理服务,解决跨域问题

    1 解决跨域访问失败 在项目的根目录下创建一个 vue config js 文件 创建配置文件 module exports devServer proxy api target http cdn apc 360 cn ws true pa
  • java中^怎么用_^运算符在Java中做什么?

    插入符号 运算符在Java中具有什么功能 当我尝试这个 int a 5 n 它给我 for n 5 returns 0 for n 4 returns 1 for n 6 returns 3 所以我猜它不执行幂运算 但是那是什么呢 您可以张
  • 2023-9-12 完全背包问题

    题目链接 完全背包问题 初版 时间复杂度拉满 include
  • 第四章 随机变量的数据特征 4.3协方差及相关系数

    第四章 随机变量的数据特征 4 3协方差及相关系数 文章目录 第四章 随机变量的数据特征 4 3协方差及相关系数 协方差和相关系数的概念和性质 相关系数的意义 协方差和相关系数的概念和性质 其在一定程度上反应了X 与 Y之间的关系 按照定义
  • 如何更高效的提高CSDN浏览量 - 提升博客的曝光度

    前言 CSDN作为中国最大的IT技术社区 对于技术人员而言 拥有高浏览量的博客是提升个人知名度和影响力的关键 本文将介绍一个名为 CSDN Browsing Plus 的工具 通过它 我们可以更高级地增长CSDN的浏览量 提升博客的曝光度
  • 获取文件的绝对路径

    想要访问执行程序 exe 路径下的文件 有以下几个步骤 1 先通过函数GetModuleFileName获取执行程序的绝对路径 TCHAR szPath MAX PATH 0 GetModuleFileName NULL szPath MA
  • 4-3 嵌入法

    文章目录 4 3 嵌入法 基础知识 项目案例 动手练习 4 3 嵌入法 请参考 数据准备和特征工程 中的相关章节 调试如下代码 基础知识 import pandas as pd from sklearn model selection im
  • oracle 视图 其他用户,oracle创建视图中涉及到另外一个用户的表权限不足问题

    oracle创建视图中涉及到另外一个用户的表权限不足问题 在oracle中存储过程或者视图等对象创建时 如果涉及到另外一个用户的表 即使你已经grant dba了 也不行 必须显式地赋予查询权限 否则 你会发现在pl sql中可以执行语句
  • Linux mmap读/写触发共享文件页生命周期

    概述 Linux的mm内存子系统的核心功能就要要管理各种类型的page 确保能高效分配和释放 让物理内存得以最大化使用 初识内存系统往往关注的是page的申请和管理流程 容易忽略page的释放回收流程 其实理解mm中的内存回收和释放也是最核