首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

理解 Linux 的虚拟内存

前言 ---- 前不久组内又有一次我比较期待的分享:”Linux 的虚拟内存”。...前几天另一位同事来问另一个虚拟内存相关的问题,我才发现对于虚拟内存,我的理解还不够深刻,一些概念还有些矛盾。于是翻一下资料重新整理一下这些知识,希望下次在用到它们时能更顺畅。...我们前文提到了虚拟内存通过缺页中断为进程分配物理内存内存总是有限的,如果所有的物理内存都被占用了怎么办呢?...直接操作物理内存 操作系统使用了虚拟内存,我们想要直接操作内存怎么办呢? Linux 会将各个设备都映射到 /dev/ 目录下的文件,我们可以通过这些设备文件直接操作硬件,内存也不例外。...小结 ---- 虚拟内存的概念非常容易理解,但是它会衍生出来的一系列非常复杂的知识。

3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    理解 Linux 的虚拟内存

    前几天另一位同事来问另一个虚拟内存相关的问题,我才发现对于虚拟内存,我的理解还不够深刻,一些概念还有些矛盾。于是翻一下资料重新整理一下这些知识,希望下次在用到它们时能更顺畅。...我们前文提到了虚拟内存通过缺页中断为进程分配物理内存内存总是有限的,如果所有的物理内存都被占用了怎么办呢?...,通过这种”交换”技术,Linux 可以让进程使用更多的内存。...直接操作物理内存 操作系统使用了虚拟内存,我们想要直接操作内存怎么办呢? Linux 会将各个设备都映射到 /dev/ 目录下的文件,我们可以通过这些设备文件直接操作硬件,内存也不例外。...小结 虚拟内存的概念非常容易理解,但是它会衍生出来的一系列非常复杂的知识。

    2.1K10

    Linux内核理解 Memory barrier(内存屏障)

    本文例子均在 Linux(g++)下验证通过,CPU 为 X86-64 处理器架构。所有罗列的 Linux 内核代码也均在(或只在)X86-64 下有效。...腾讯T6-9首发“Linux内核源码嵌入式开发进阶笔记”,差距不止一点点哦Memory barrier 简介程序在运行时内存实际的访问顺序和程序代码编写的访问顺序不一定一致,这就是内存乱序访问。...避免编译时内存乱序访问的办法就是使用编译器 barrier(又叫优化 barrier)。Linux 内核提供函数 barrier() 用于让编译器保证其之前的内存访问先于其之后的完成。.../kernel.h>#include #include #include #include <linux/kfifo.h...使用与操作求取下标的前提是环形缓冲区的大小必须是 2 的 N 次方,换而言之就是说环形缓冲区的大小为一个仅有一个 1 的二进制数,那么 index & (size – 1) 则为求取的下标(这不难理解

    2.1K00

    深入理解Linux内存子系统

    目录 一、走进 linux 内存 二、 linux 内存地址空间 三、 Linux 内存分配算法 四、 内存使用场景 五、 内存使用那些坑 一、走进 linux 内存 1、内存是什么?...3)保障 cpu 计算的稳定性和高性能 二、 linux 内存地址空间 1、linux 内存地址空间 Linux 内存管理全貌 2、内存地址——用户态&内核态 用户态:Ring3 运行于用户态的代码则要受到处理器的诸多...,不能访问内核空间虚拟地址 内核空间是由内核负责映射,不会跟着进程变化;内核空间地址有自己对应的页表,用户进程各自有不同额页表 三、 Linux 内存分配算法 内存管理算法——对讨厌自己管理内存的人来说是天赐的礼物...Linux 内存管理框架 1、内存碎片 1) 基本原理 产生原因:内存分配较小,并且分配的这些小的内存生存周期又较长,反复申请后将产生内存碎片的出现 优点:提高分配速度,便于内存管理,防止内存泄露...它们是通过页表映射的 当它们移动到新的位置,页表项也会相应的更新 6、slab 算法——基本原理 1) 基本概念 Linux 所使用的 slab 分配器的基础是 Jeff Bonwick 为

    2.1K52

    Linux内核内存泄漏怎么办?

    Linux内核内存泄漏怎么搞? 1、Kmemleak介绍 在Linux内核开发中,Kmemleak是一种用于检测内核中内存泄漏的工具。...内存泄漏指的是程序中已经不再使用的内存没有被妥善地释放,导致内存的浪费。内核中的内存泄漏同样会导致系统性能下降、系统崩溃等问题。...dump=0xffffffc008efd200 > /sys/kernel/debug/kmemleak即可查看详细信息 2.3 通过Linux启动参数控制开关 Kmemleak的默认开关状态可以通过...CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF 配置来控制,当然也可以通过向Linux内核启动参数中加入kmemleak=off来控制。...简单理解:相当于追踪内存分配相关接口,记录分配内存的首地址,堆栈大小等信息,在内存释放阶段将其删除。

    71520

    深入理解Linux C语言内存管理

    在任何程序设计环境及语言中,内存管理都十分重要。   内存管理的基本概念   分析C语言内存的分布先从Linux下可执行的C程序入手。...ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux...06.png   左边的是UNIX/LINUX系统的执行文件,右边是对应进程逻辑地址空间的划分情况。   首先是堆栈区(stack),堆栈是由编译器自动分配释放,存放函数的参数值,局部变量的值等。...栈是向低地址扩展的数据结构,是一块连续的内存区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,当申请的空间超过栈的剩余空间时,将提示溢出。因此,用户能从栈获得的空间较小。   ...这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。

    2.8K10

    Linux 虚拟内存,这理解很到位

    我们前文提到了虚拟内存通过缺页中断为进程分配物理内存内存总是有限的,如果所有的物理内存都被占用了怎么办呢?...Linux 提出 SWAP 的概念,Linux 中可以使用 SWAP 分区,在分配物理内存,但可用内存不足时,将暂时不用的内存数据先放到磁盘上,让有需要的进程先使用,等进程再需要使用这些数据时,再将这些数据加载到内存中...,通过这种”交换”技术,Linux 可以让进程使用更多的内存。...直接操作物理内存 操作系统使用了虚拟内存,我们想要直接操作内存怎么办呢? Linux 会将各个设备都映射到 /dev/ 目录下的文件,我们可以通过这些设备文件直接操作硬件,内存也不例外。...小结 虚拟内存的概念非常容易理解,但是它会衍生出来的一系列非常复杂的知识。

    2.7K10

    理解linux平台上java程序的内存模型

    java 程序是运行在jvm 虚拟机里面的,离开jvm虚拟机,那么java程序无法直接在linux平台的运行。 所以java应用程序和os 平台之间是隔着jvm虚拟机的。...jvm进程会根据 可用堆空间的大小,动态调整jvm的堆大小,但是最大不超过Xmx设置的值,当然也会减小堆空间的大小,最小为Xms设置的值;如果设置的Xms 大于 Xmx, 那么可能会导致java程序无法正常启动...GC 过程的理解: 在jvm进行GC的时候,会遍历所有已经分配的堆空间里的对象,从而判断是否可以进行内存回收, 如果这时候有一部分数据已经在SWAP空间上,那么就需要把这部分数据交换回内存,而如果内存本就不够...而Linux的swap回收是具有滞后性的,所以可能看到swap的空间被大量使用. 同时会经历系统响应缓慢的情况....D. java占用空间大小计算: java 程序是在jvm里面运行的,所以java 程序占用的内存大小理论上不会超过 JVM的 堆大小,主要包含以下部分: java 永久代(java程序的代码区和数据区

    95530

    五万字 | 深入理解Linux内存管理

    整个体系分为3部分,左边是物理内存,右边是虚拟内存,中间是虚拟内存映射(分页机制)。我们先从物理内存说起,内存管理的基础还是物理内存的管理。 物理内存那么大,应该怎么管理呢?...(注意,类比是理解工具,不是论证工具)。对应的,物理内存也是采用类似的三级区域划分的方式来管理的,三个层级分别叫做节点(node)、区域(zone)、页面(page),对应到省、县、乡。...二、物理内存区划 内核对物理内存进行了三级区划。为什么要进行三级区划,具体怎么划分的呢?这个不是软件随意决定的,而是和硬件因素有关。下面我们来看一下每一层级划分的原因,以及软件上是如果描述的。...关于中断与异常的基本原理请参看《深入理解Linux中断机制》。...下面我们来看一下这个函数是怎么处理的。

    3.1K34

    Linux必知必会-理解内存使用统计命令free

    本文详细介绍了Linux系统中的free命令的使用方法以及关键参数的含义,这可能是你见过的关于free命令最详细的一篇文章了,绝对值得你收藏。...free命令显示了Linux系统中物理内存、交换分区的使用统计信息。...指标说明 使用free命令查看内存信息,最重要的是理解当前系统的可用内存并不是直接看 free 字段就可以看出来的,应该参考的是 可用内存 = free + buffers + cached 除去标题行之后...free 空闲内存加上buffer和cached之后的内存,也就是真正的可用内存总量 第三行为交换分区使用统计 标题 说明 total 交换分区内存总量 used 正在使用的交换分区内存 free...参考文献 Meaning of the buffers/cache line in the output of free Linux ate my ram!

    87830

    深入理解Linux内存中的Buffer与Cache

    Linux操作系统采用了一种高效的内存管理机制,其中的Buffer和Cache是内存管理的两个关键组件。理解这两者的作用和运行机制对于系统性能优化和故障排查至关重要。...当脏页的比例达到或超过此值时,系统将启动同步写入操作,将脏页写入磁盘。 影响: 控制脏页的及时写入,适当设置有助于避免频繁的磁盘写入操作。...dirty_background_ratio 或 sysctl -w vm.dirty_background_ratio=10 作用:dirty_background_ratio 参数定义了当脏页的比例超过此值时...结论 Buffer和Cache是Linux内存管理中不可或缺的组件,它们通过缓存I/O操作和文件系统数据,显著提高了系统的性能和响应速度。...深入理解它们的工作原理以及如何监控和优化内存使用,对于SRE来说都是至关重要的。通过合理配置和管理内存,可以确保系统在高负载下依然保持出色的性能。

    87810

    Linux 底层原理」理解进程内存布局,掌握程序动态

    在《攻克 Linux 系统编程》中,我们解释了的 ELF 文件头中指定的程序入口地址,各个节区在程序运行时的内存排布地址等,指的都是在进程虚拟空间中的地址。...这样做,一方面为了安全,防止进程操作其他进程或者系统内核的数据;另一方面为了保证系统可同时运行多个进程,且单个进程使用的内存空间可以超过实际的物理内存容量。...在 Linux 系统中,使用如下命令可查看一个运行中的进程的内存排布。 ? 稍微修改上一篇中的示例代码,在 main 函数返回之前,增加一个无限循环,保持程序一直运行。 ?...深入理解了这些底层行为细节,就可以顺理成章地理解 fork() 的一些行为表现和正确使用规范,无需死记硬背,也可获得一些别人踩过坑后才能获得的经验。...对这些底层实现细节的充分理解,能帮助读者更好地理解各个系统调用的行为表现,并根据具体的应用需求选择正确、合适的实现方案。

    2K30

    深入理解 Linux 物理内存分配全链路实现

    前文回顾 在上篇文章 《深入理解 Linux 物理内存管理》中,笔者详细的为大家介绍了 Linux 内核如何对物理内存进行管理以及相关的一些内核数据结构。...关于物理内存区域中的紧急预留内存相关内容,笔者在之前文章 《深入理解 Linux 物理内存管理》一文中的 “ 5.1 物理内存区域中的预留内存 ” 小节中已经详细介绍过了。...笔者在上篇文章 《深入理解 Linux 物理内存管理》的 “ 5.2 物理内存区域中的水位线 ” 小节中曾详细地介绍了各个水位线的含义以及在不同水位线下内存分配的不同表现。...(页高阈值)。...我们在 《深入理解 Linux 物理内存管理》一文中的 “ 3.2 非一致性内存访问 NUMA 架构 ” 小节,介绍 NUMA 内存架构的时候曾经提到:当 CPU 自己所在的本地 NUMA 节点内存不足时

    80510

    Linux 内存管理中的 Buffers 和 Cached:理解和区分

    引言  当涉及到 Linux 系统的内存管理时,"Buffers" 和 "Cached" 是两个经常会引起混淆的术语。这两个概念都代表了系统内存的一部分,但它们的作用和工作方式有所不同。...这些文件可能是系统使用频繁的文件,存储在内存中可以加快对它们的访问速度。Cached 内存是由 Linux 内核自动管理的,用于提高系统性能。...当系统有足够的空闲内存时,会将一些文件的副本保留在 Cached 中,以便以后快速访问。  在 Linux 系统中,经常会遇到两个内存相关的概念:Buffers 和 Cached。...当谈论 Linux 系统的 Buffers 时,我们可以通过示例代码来演示一些基本的文件读写操作,以解释 Buffers 在文件系统操作中的作用。...理解这两者的区别可以帮助我们更好地管理和优化系统内存,提高系统的整体性能和响应速度。我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    78610

    linux服务器内存不够用怎么办?

    服务器随着运行时间的增加,占用内存会逐渐增加。如果服务器内存小,就很容易出现内存占满,系统变慢,甚至是卡死的情况。一个办法是增加物理内存,但这涉及到费用、停机、开机箱等。这里有一个处理方案,可供借鉴。...效果好的话,可以不用买内存条了哈哈。 如果你分析各个进程占用内存大小,然后把它们加一起,发现并不等于总占用内存的大小。那为什么free -m指令显示剩余的内存那么小呢?内存用来做什么了呢?...原来操作系统运行中会自己选择部分数据缓存到内存中,free -m结果中 -/+ buffers/cache: 后面统计的就是缓存数据的情况 ?...缓存使用的物理内存加上进程占用物理内存,才是总的物理内存。 为了保护服务不会因为物理内存占用过高而卡死,可以定时计划crontab中每隔一小时清空操作系统的缓存数据,配置如下。...当然,我的实验场景是物理内存本来就小只有8G,并且系统访问用户不大的情况。其它系统是否适用还没有数据支持。

    9.9K20

    性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?

    从 free 命令可以看到,缓存其实就是 Buffer 和 Cache 两部分的总和 字面意思,Buffer 是缓存区,Cache 是缓存,两者都是数据再内存中的临时存储 Buffer 和 Cache...的区别 man free 执行上面的命令,可以从帮助手册中看到 buffer 和 cache 说明 Buffers:内核缓冲区用到的内存,对应的是 中的 Buffers 值 /proc/meminfo...所以百度 Buffer 和 Cache 什么意思可能并不适用于你当前的环境 所以可以通过下面说的 proc 文件系统来确认它们的含义 proc 文件系统 再次回顾 proc 是 Linux 内核提供的一种特殊文件系统...为了验证上面的问题,会通过案例来展开描述 Buffer 和 Cache 在不同场景下的使用情况 系统配置 操作系统:Ubuntu 18.04 机器配置:2 CPU,8GB 内存 预先安装 sysstat...KB bi 和 bo 则分别表示块设备读取和写入的大小,单位为块 / 秒,因为 Linux 中块的大小是 1KB,所以这个单位也就等价于 KB/s 正常情况下,空闲系统中,你应该看到的是,这几个值在多次结果中一直保持不变

    85820

    性能测试必备知识(10)- Linux怎么管理内存的?

    8GB 的 这个内存其实是物理内存 物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM) 灵魂拷问 只有内核才可以直接访问物理内存,那么进程要访问内存时,怎么办?...页表实际上存储在 CPU 的内存管理单元 MMU 中 正常情况下,处理器就可以直接通过硬件,找出要访问的内存 在页表的映射下,进程就可以通过虚拟地址来访问物理内存了 灵魂拷问 么具体到 一个 Linux...进程中,这些内存又是怎么使用的呢?...64 位系统的内存分布也类似,只不过内存空间要大得多 灵魂拷问 内存究竟是怎么分配的呢?...其实并没有真正分配内存 这些内存,都只在首次访问时才分配,也就是通过缺页异常进入内核中,再由内核来分配内存 Linux 使用伙伴系统来管理内存分配 这些内存在 MMU 中以页为单位进行管理,伙伴系统也一样

    1.9K30
    领券