• Linux 提供各种模式(比如,消息队列),但是最著名的是 POSIX 共享内存(shmem,shared memory)。

    • Linux provides a variety of schemes (such as message queues), but most notable is POSIX shared memory (shmem).

1. memory overcommit 与内存管理

理解Linux的memory overcommit

  • Linux 下的内存管理会影响 Linux 下的 C 代码在内存分配(malloc)时的执行情况:
  • Memory Overcommit的意思是操作系统承诺给进程的内存大小超过了实际可用的内存。一个保守的操作系统不会允许memory overcommit,有多少就分配多少,再申请就没有了,这其实有些浪费内存,因为进程实际使用到的内存往往比申请的内存要少,比如某个进程malloc()了200MB内存,但实际上只用到了100MB,按照UNIX/Linux的算法,物理内存页的分配发生在使用的瞬间,而不是在申请的瞬间,也就是说未用到的100MB内存根本就没有分配,这100MB内存就闲置了。
    • commit(或overcommit)针对的是内存申请,内存申请不等于内存分配,内存只在实际用到的时候才分配。
    • 也即有了 overcommit,内存的分配即是一种 lazy memory allocation;
    • 如果在使用过程中,真的超出可用的内存大小,Linux设计了一个OOM killer机制(OOM = out-of-memory)来处理这种危机:挑选一个进程出来杀死,以腾出部分内存,如果还不够就继续杀…也可通过设置内核参数 vm.panic_on_oom 使得发生OOM时自动重启系统。
  • overcommit 参数配置:
    • Linux 2.6之后允许通过内核参数 vm.overcommit_memory 禁止memory overcommit(也可通过 /proc/sys/vm/overcommit_memory)。内核参数 vm.overcommit_memory 接受三种取值:

      • 0 – Heuristic overcommit handling. 这是缺省值,它允许overcommit,但过于明目张胆的overcommit会被拒绝,比如malloc一次性申请的内存大小就超过了系统总内存。Heuristic的意思是“试探式的”,内核利用某种算法(对该算法的详细解释请看文末)猜测你的内存申请是否合理,它认为不合理就会拒绝overcommit。
      • 1 – Always overcommit. 允许overcommit,对内存申请来者不拒。
      • 2 – Don’t overcommit. 禁止overcommit。

转载于:https://www.cnblogs.com/mtcnn/p/9421469.html

Linux 内存管理与系统架构设计相关推荐

  1. 第19章 Linux电源管理的系统架构和驱动之CPUIdle驱动

    19.3 CPUIdle驱动 目前的ARM SoC(System on Chip)大多支持几个不同的Idle级别,CPUIdle驱动子系统存在的目的就是对这些Idle状态进行管理,并根据系统的运行情况 ...

  2. 第19章 Linux电源管理的系统架构和驱动之CPUFreq驱动

    19.2 CPUFreq驱动 CPUFreq子系统位于drivers/cpufreq目录下,负责进行运行过程中CPU频率和电压的动态调整,即DVFS(Dynamic Voltage Frequency ...

  3. Linux内存管理之slab 1:slab原理(+buddy伙伴系统)

    Linux内存管理之slab 1:slab原理(+buddy伙伴系统) 1. 为什么有了Buddy(伙伴系统)还需要slab? 1.1 什么是伙伴系统? 1.1.1 伙伴系统思想 1.2 伙伴系统例子 ...

  4. Linux内存管理:NUMA技术详解(非一致内存访问架构)

    图片来源:https://zhuanlan.zhihu.com/p/68465952 <Linux内存管理:转换后备缓冲区(TLB)原理> <内存管理:Linux Memory Ma ...

  5. Linux系统内存管理实验报告,Linux 内存管理 综合实验报告.pdf

    Linux 内存管理 综合实验报告 计算机与通信学院 Linux 内存管理 综合实验报告 指导老师:孙建华 组员 :夏槟 20040810720 段翼真 20040810503 米晓亮 2004081 ...

  6. Linux系统内存管理实验报告,linux内存管理实验报告

    <linux内存管理实验报告>由会员分享,可在线阅读,更多相关<linux内存管理实验报告(13页珍藏版)>请在人人文库网上搜索. 1.操作系统实验报告院别:XXXXXX班级: ...

  7. 别再说你不懂Linux内存管理了,10张图给你安排的明明白白!

    来自:后端技术学堂 过去的一周有点魔幻,有印象的有三个新闻:天猫总裁绯闻事件,蘑菇街裁员,不可能打工的周某也放出来了.三件事,两件和互联网行业相关,好像外面的世界很是精彩啊!吃瓜归吃瓜,学习还是不能落 ...

  8. XXX管理平台系统——架构

    XXX管理平台系统架构 前言 系统架构是项目中技术 实现的最重要的环节.系统架构的良好与否关系到系统的性能指标.安全指标.稳定性指标.可扩展性.业务实现等等. 系统架构涉及到系统硬件的选型.网络拓扑. ...

  9. 一文掌握 Linux 内存管理

    作者:dengxuanshi,腾讯 IEG 后台开发工程师 以下源代码来自 linux-5.10.3 内核代码,主要以 x86-32 为例. Linux 内存管理是一个很复杂的"工程&quo ...

最新文章

  1. 无人驾驶汽车系统入门:基于VoxelNet的激光雷达点云车辆检测及ROS实现
  2. 基于Vue+Nodejs实现宿舍管理系统
  3. 是时候给2020年做个总结了
  4. linux oracle查询乱码问题,Linux环境Oracle显示乱码的解决方法
  5. 神策数据全面支持苹果 ASA,全域归因方案再升级
  6. 【时间序列】最完整的时间序列分析和预测(含实例及代码)
  7. QML基础类型之data
  8. 一分钟理解Java公平锁与非公平锁
  9. Core Animation基础
  10. 重读The C programming Lanuage 笔记二:运算符优先级
  11. 游戏用计算机配置表显卡,5000元电脑配置9代i5配GTX1660TI显卡配置清单(可装Win7)...
  12. 谷歌浏览器安装扩展插件
  13. 知其然更要知其所以然
  14. Cnetos linux镜像全版本2.X、3.X、4.X、5.X、6.X、7.X、8.X
  15. 变态矿工源码、闪电鸡app等软件的应用及发展方向的个人见解
  16. 写程序验证费马素数猜想是否正确
  17. 阿里二面:RocketMQ 集群 Broker 挂了,会造成什么影响?
  18. 实用的链上数据查询工具——链数查
  19. ORALC常用函数(五)----STDDEV、STDDEV_POP、STDDEV_SAMP等函数
  20. 2013年最具技术影响力原创图书TOP10

热门文章

  1. c cuda 指定gpu_GPU并行编程:熟练使用CUDA C语言
  2. 多任务 schedule python_Python3.6 Schedule 模块定时任务 (实例讲解)
  3. 一个机器周期 计算机_计算机科学组织| 机器周期
  4. acquire方法_Python锁类| 带有示例的acquire()方法
  5. intersect函数_PHP array_intersect()函数与示例
  6. Java BigDecimal stripTrailingZeros()方法与示例
  7. 离散数学群论_离散数学中的群论及其类型
  8. android 服务端 漏洞,安卓漏洞 CVE 2017-13287 复现详解-
  9. C和汇编---while反汇编
  10. C和汇编混合编程----实现浮点数的加减乘除