2023-02-28 mmap的原理及使用-思考

news/2024/4/19 23:56:04/文章来源:https://blog.csdn.net/adofsauron/article/details/129259028

摘要:

最近在使用mmap解决数据库内存占用损耗过高导致OOM的问题, 不得不说在有些场景下mmap是非常有用.

本文主要涉及一些对mmap的思考.



mmap本身的思考:

  1. mmap和文件系统的交互规则是什么
  2. mmap中给进程虚拟内存映射的文件上的部分,是什么? 为什么是页缓存? 有没有文件缓存?
  3. mmap在内核中处于哪一个模块? 如何与用户空间交互?
  4. open/write/read接口处理文件, 在内核中会发生什么, 页缓存有何变化? 文件缓存又是什么?
  5. 当对mmap映射后的内存进行写操作时, 数据从用户空间如何进入内核空间? 
  6. mmap写的数据, 何时写进磁盘文件?
  7. mmap读数据, 除了页缓存, 是否还有其他缓存?
  8. 如果实现一个用户态文件系统, 如何高效的实现mmap?
  9. 使用mmap映射后, 当进行写操作时, 为什么要用缺页异常来进行页加载? 有没有其他策略?
  10. 进程使用mmap映射后, 映射的虚拟内存, 是在进程的哪个段在做管理? 和堆内存和栈内存的关系是什么?

mmap使用的思考:

  1. 为什么进行映射的文件必须要用lseek占位? 如果不占位, 缺页如何处理?
  2. 当进程异常终止后, 映射的内存空间的数据, 如何被内核处理? 页缓存是否被内核磁盘交换?
  3. 如果映射的内存不够用, 能否扩充内存?

mmap的场景:

  1. tokyo-cabinet数据库的持久化
  2. linux可执行文件加载动态库

参考:

https://man7.org/linux/man-pages/man2/mmap.2.html

https://zhuanlan.zhihu.com/p/143270729

https://zhuanlan.zhihu.com/p/347449137

https://cloud.tencent.com/developer/article/2144681

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75169.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试题,用 Java 解【连续字母长度】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

百度CTO王海峰:深度学习平台+大模型,夯实产业智能化基座

2月27日,中国人工智能学会首届智能融合产业论坛在成都顺利举办。本届论坛由中国人工智能学会(CAAI)主办,中国人工智能学会智能融合专委会、百度公司、深度学习技术及应用国家工程研究中心和电子科技大学联合承办。中国工程院多名院…

企业级React Hooks实战开发指南

背景 大家有没有发现一个问题,我们从任何招聘网站上看到关于React(现在90%都是React Hooks)开发的招聘岗位薪资一定都比其他前端岗位的高,那是什么原因呢?本质的原因是:React学习成本高,导致学习的人少,然…

跟对象介绍十个常用的 Python 内置函数,她夸了我一整天

内置函数是什么 了解内置函数之前,先来了解一下什么是函数 将使用频繁的代码段进行封装,并给它起一个名字,当我们使用的时候只需要知道名字就行 函数就是一段封装好的、可以重复使用的代码,函数使得我们的程序更加简洁、模块化&a…

Goframe快速创建项目,并使用Cli工具创建dao、service、logic

GoFrame项目创建与Cli工具创建1.项目创建2.Mysql数据库配置3.Cli工具dao自动生成4.业务模型须知5.Cli工具service/logic自动生成 - 接口6.Controller/Api创建1.项目创建 官网 - 项目创建-init 开发文档 - 目录介绍 官网 - 示例项目 1.gf init 项目名 (创建项目…

Java及JVM简介

世界上没有最好的编程语言,只有最适用于具体应用场景的编程语言 懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。 java介绍 java是目前应用最为广泛的软件开发平台之一。随着…

C++---最长上升子序列模型---登山(每日一道算法2023.2.28)

注意事项: 本题为"线性dp—最长上升子序列的长度" 和 “最长上升子序列模型—怪盗基德的滑翔翼” 的扩展题,所以dp思路这里就不再赘述。 题目: 五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景…

复习知识点八之数组

目录 数组 静态初始化练习 打印 索引 数组遍历 练习1:遍历数组并求和 练习2:统计个数 练习3:变化数据​编辑 数组的动态初始化 数组的动态初始化和静态初始化的区别​编辑 数组的常见问题 数组常见操作 练习1:求最值 ​编辑 练习2 : 遍历数组求和 练习3: 练习4: 数…

值得收藏!适合小微企业的万元数字化攻略!

编者按:小微企业数字化之路困难重重?看看这款全新的全面数字化方案,低成本、部署效率、免安装、免维护、数据安全,小微企业的数字化福音!关键词:低成本,开箱即用,免安装免维护&#…

SpringMVC使用 redis 实现缓存

简介 SpringMVC 中也可以将缓存标签和 redis 结合起来使用,其实此时缓存没有起作用,只是通过缓存的那几个注解来操作 redis 而已;SpringMVC 中整合 redis 比较麻烦的是注意版本冲突的问题,如下是官网有关于版本的要求 https://d…

I.MX6ULL内核开发12:使用设备树插件实现RGB灯驱动

目录 一、引言 二、设备树插件格式 三、实验说明 四、实验准备 4.1 通过内核工具编译设备树插件 五、实验效果 5.1 uboot加载 5.2 加载RGB驱动 一、引言 Linux4.4以后引入了动态设备树(Dynamic DevicesTree),这里翻译位“设备树插件…

银行软件测试面试题目总结,希望可以帮到你

目录 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 总结感谢每一个认真阅读我文章的人!!! 重点:配套学习资料和视频教学 一、根据题目要求写出具体LINUX操作命令 1、分别写出一种…

SpringMVC源码:HandlerMapping加载1

参考资料: 《SpringMVC源码解析系列》 《SpringMVC源码分析》 《Spring MVC源码》 写在开头:本文为个人学习笔记,内容比较随意,夹杂个人理解,如有错误,欢迎指正。 前文: 《SpringMVC源码&a…

跨设备文件传输工具横评

文章目录对比QQ微信SnapDropLocalSendIntelUnisonLANDropTailscaleAirDroidSendAnywhere参考文献对比 传输速度测试条件大致相同,文件大小约为 100 MB 工具优点缺点传输速度备注QQ支持断点续传不要求同一局域网需要安装1.81 MB/s微信方便需要安装不支持大文件传完还…

ROS1学习笔记:ROS中的坐标管理系统(ubuntu20.04)

参考B站古月居ROS入门21讲:ROS中的坐标系管理系统 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、机器人中的坐标变换二、TF功能包三、小海龟跟随实验3.1 启动实验3.2 查看当前的TF树3.3 坐标相对位置可视化3.3.1 tf_echo3.3.2 rviz一、机器人中的坐标变换…

15个Spring扩展点,一般人知道的不超过5个!

Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Spring Boot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个…

Maven高级操作,别说你不知道

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞👍👍👍收藏⭐⭐⭐】一键三连!一起努力! 🤖 一、聚合 👻 1、作用: 用于快速构建maven工程,一次性构建多个模块/项目 &am…

【人脸识别】DDL:数据分布知识蒸馏思想,提升困难样本(遮挡、低分辨率等)识别效果

论文题目:《Improving Face Recognition from Hard Samples via Distribution Distillation Loss》 论文地址:https://arxiv.org/pdf/2002.03662v3.pdf 代码地址:https://github.com/HuangYG123/DDL 1.前言及相关工作 Large facial variatio…

阿里前端二面常考react面试题(必备)

说说 React组件开发中关于作用域的常见问题。 在 EMAScript5语法规范中,关于作用域的常见问题如下。 (1)在map等方法的回调函数中,要绑定作用域this(通过bind方法)。 (2)父组件传递…

华为OD机试模拟题 用 C++ 实现 - 最左侧冗余覆盖子串(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明最左侧冗余覆盖子串题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写…