![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux内存管理
吃米的猫
这个作者很懒,什么都没留下…
展开
-
Linux内存管理总结
当Linux要运行一个程序的时候,进程通过虚拟内存读取指令。但是在运行指令之前,通过页表的映射,将虚拟地址转化为物理地址来获取实际的指令或数据来运行任务。在通常情况下,虚拟内存比物理内存要大。在Linux使用虚拟内存来分配程序运行所需要的物理内存。在Linux系统中,有两种内存:物理内存,虚拟内存。:虚拟地址到内存物理地址的映射表。:在机器中实际存在的内存。原创 2023-08-28 22:07:13 · 89 阅读 · 0 评论 -
Linux内存管理之OOM killer
物理内存是一种很稀缺的资源,它并不是无限的,也不是每次都能回收足够当前使用的空间。一常比较常见的场景是:物理内存即将耗尽,并且无法回收足够的空间来满足后续的任务。在这个时候,为了尽量保证系统的其它部份可用,系统调将调 用OOM killer.首先OOK killer会选择一个任务(一般会选择占用内存比较多的),然后将任务终止,期望任务 退出后会释放足够多的内存,以满足系统正常操作的需要。原创 2023-08-26 09:23:44 · 83 阅读 · 0 评论 -
Linux内存管理之内存碎片
随着系统持续的运行,内存不停的被分配使用、回收,再分配、再回收…,在这个过程中,内存往往会变理碎片化,不再连续。尽管通过虚拟内存可以将分散的物理页面以连续的方式对外展现(类似外观模式),但是有的时候需要分配比较大的,并且连续的物理内存。例如,当设备驱动程序需要一个很大的DMA缓存区的时候,怎么办呢?该机制统一将被占用的页面从内存的下部区域移动到上部空闲的区域,当完成一次整理之后,占用的页面在内存区域的一侧,空闲页面则连续的在另一侧,这样就有较大的的连续物理内存供分配使用了。原创 2023-08-24 21:24:24 · 104 阅读 · 0 评论 -
Linux内存管理之内存回收
随着系统的负载的增加,可用于直接分配的空闲页面越来越少,当它少于某一阀值的时候,一个分配请求到来就会唤醒kswapd守护进程,它将对内存页面进行异步扫描,判断它们的可用性后,要么释放,要么交换到存储设备中。随着内存使用量的继续增加,到达另一个最小的阀值,这个阀值触发直接回收的操作,在这种情况下,内存分配立即停止,直到回收足够多的内存页面来满足请求。在大部份情况下,如果内存页面在内核空间用于DMA缓存区,那么它是不能直接被回收再利用的,并且一直持有该页面空间,直到用户去主动释放。原创 2023-08-22 23:18:08 · 199 阅读 · 1 评论 -
Linux 虚拟内存入门
此外,不同的CPU架构,甚至相同架构的不同实现,对于查看这些范围的地址也是不一样的。通过虚拟内存,每个物理内存的访问都通过一个虚拟地址,当CPU从系统内存中读取(或写入)指令时,它通过MMU**,将指令中编码的虚拟地址转化为内存控制器所能理解的物理地址。应用程序通过虚拟内存抽象了物理内存的细节,只允许在物理内存中保留需要的信息,并且提供了一种在不同进程间的数据保护和数据共享机制。每个物理内存业都可以被映射为一个或多个虚拟内存页,这些映射关系保存在页表中,它是一个多维的数据集合,通过它可以将程序使用的。原创 2023-08-12 10:02:26 · 122 阅读 · 0 评论 -
Linux内存管理之内存域(Zones)
在另一些情况下,所需要的物理内存超过了虚拟内存最大可寻址的范围,这个时候就需要一些特殊的操作来访问内存了。Linux根据内存页面在设备中的用途将它们进行分组,这些分组称为域。例如Zones_DMA,包含用于DMA的设备的内存页面;Zones_Normal,包含正常寻址的页面。不同的平台对于DMA有不同的需求,内存域的实际布局依赖于硬件,并不是所有架构都有定义域,在有些情况下,设备并不能直接访问所有的物理内存(DMA)。在通常情况下,硬件会限制能够访问的物理地址范围。原创 2023-08-14 21:50:50 · 66 阅读 · 0 评论 -
Linux 内存管理之节点内存(Nodes)
在这类系统中,内存被划分成不同的堆,程序根据访问堆的“距离”不同,有不同访问的延迟。每个堆都被称作一个节点,对于每个节点,Linux都会构建一个独立的内存管理子系统。节点有自己的一组区域、页表、内存页及多种计数器。大部份多进程系统都是非统一内存的访问系统(NUMA)。原创 2023-08-15 21:21:57 · 117 阅读 · 0 评论 -
Linux内存管理之页面缓存(Page Cache)
已持久化的页被标记为脏页,这些页可以被Linux复用,它通过同步机制保证页面缓存中的内容与更新后的文件数据一致。类似的,当需要向一个文件中写入数据时,首先把数据写入到页面缓存中,然后再将数据持久化到存储设备中。每当读取数据时,为了提高后续再次读取的效率,减少再次从硬盘读取数据的时间,数据被放到页面缓存中。通常情况下,读取文件数据到物理内存中,物理内存的数据根据一定的策略进行更新。原创 2023-08-16 22:03:27 · 165 阅读 · 0 评论 -
Linux内存管理之匿名内存
在通常情况下,匿名内存规定了程序能够访问的虚拟内存域。当读取数据时,会创建一个匿名页表的对象(),该对象映射到一块空白物理内存页面(被格式化,填满0)。当执行写操作时,数据被写入到与之匹配物理内存页面中。匿名页面将被定义为脏页,脏页能够被系统回收复用。匿名内存的创建方式有两种,一种是通过程序的堆或栈来创建;另一种方式是通过系统调 用来产生(如系统间的请求、接收网络数据、发送数据等)。匿名内存又叫匿名映射,是指内存中的数据并不来自系统文件的内存。原创 2023-08-20 08:44:52 · 230 阅读 · 0 评论 -
Liunx内存管理概述
如果内存管理系统不包含MMU则被称为NO-MMU,它绝对值期待,希望它最终被创造出来。虽然两者在概念上是类似的,但是这里只讲有MMU的,CPU可以通过虚拟地址找到物理地址。在Linux中,内存管理经过多年的发展,已经变成一个超级复杂的系统,它紧跟时代的变化,包含越来越多的功能以支持MMU-less微控制单元和超级计算机的需要。原创 2023-08-10 21:11:21 · 114 阅读 · 0 评论 -
Linux 内存管理
顾名思义,Liunx内存管理子系统在系统中负责管理内存。它包括虚拟内存管理、段与页的实现、内核态与用户空的空间分配、将文件映射到进程空间等,很多很多酷炫的功能。Linux内存管理是一个非常复杂的系统,它有非常多的可配置项。大部份这些配置项可通过**/proc文件系统。Linux内存管理有很多专业术语,如果你还不熟悉它,请考虑阅读后续的。systemctl**命令进行调整。原创 2023-08-09 22:07:27 · 146 阅读 · 0 评论