首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 内核 内存管理】物理内存组织结构 ② ( 内存模型 | 平坦内存 | 稀疏内存 | 非连续内存 | 内存管理系统三级结构 | 节点 Node | 区域 Zone | 页 Page )

文章目录 一、内存模型 二、内存管理系统三级结构 一、内存模型 ---- 从 CPU 处理器 的角度出发 , 观察 内存的 " 物理分布 " , 有如下 3 种内存模型 , Linux 内核针对这...3 种内存模型进行不同的处理 ; ① 平坦内存 : Flat Memory , 物理地址空间 是 连续的 , 没有 " 内存空洞 " ; ② 稀疏内存 : Space Memory , 物理地址空间...是 非连续 的 , 有 " 内存空洞 " , 该内存模型 支持 内存条的 " 热插拔 " 操作 ; ③ 非连续内存 : Discontiguous Memory , 物理地址空间 是 非连续 的 , 有...内存空洞 ; 二、内存管理系统三级结构 ---- 内存管理系统 3 级结构 : ① 节点 Node , ② 区域 Zone , ③ 页 Page , Linux 内核中 , 使用 上述 3 级结构...描述 和 管理 " 物理内存 " ;

2.7K30

kmalloc分配物理内存与高端内存映射--Linux内存管理(十八)

虚拟内存连续、但物理内存中不连续内存区,可以在vmalloc区域分配. 该机制通常用于用户过程, 内核自身会试图尽力避免非连续物理地址。...内核通常会成功,因为大部分大的内存块都在启动时分配给内核,那时内存的碎片尚不严重。但在已经运行了很长时间的系统上, 在内核需要物理内存时, 就可能出现可用空间不连续的情况....动态内存映射区 该区域由内核函数vmalloc来分配, 特点是 : 线性空间连续, 但是对应的物理空间不一定连续. vmalloc分配的线性地址所对应的物理页可能处于低端内存, 也可能处于高端内存....kmallc & kfree分配释放连续物理内存 kmalloc和kzalloc kmalloc函数与用户空间的malloc一族函数非常类似, 只不过它多了一个flags参数, kmalloc函数是一个简单的接口...他们定义在tools/virtio/linux/kernel.h?v=4.7, line 46 这两个函数返回一个指向内存块的指针, 其内存块至少要有size大小. 所分配的内存区在物理上是连续的.

6.3K21

如何查看linux系统中空闲内存物理内存使用剩余内存

查看linux系统中空闲内存/物理内存使用/剩余内存 查看系统内存有很多方法,但主要的是用top命令和free 命令 当执行top命令看到结果,要怎么看呢?...一些简单的计算方法:  物理已用内存 = 实际已用内存 - 缓冲 - 缓存 = 6811M - 350M - 5114M 物理空闲内存 = 总物理内存 - 实际已用内存 + 缓冲 + 缓存  应用程序可用空闲内存...= 总物理内存 - 实际已用内存  应用程序已用内存 = 实际已用内存 - 缓冲 - 缓存 top命令的结果详解 top命令 是Linux下常用的性能 分析工具 ,能够实时显示系统 中各个进程的资源占用状况...内容如下: Mem: 191272k total  物理内存总量   173656k used  使用的物理内存总量   17616k free  空闲内存总量   22052k buffers  ...测量一个进程占用了多少内存linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

19.7K41

Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

文章目录 一、物理页 page 简介 1、物理页 page 引入 2、物理页 page 与 MMU 内存管理单元 3、物理页 page 结构体 4、Linux 内核源码中的 page 结构体 二、内存节点...pglist_data 与 物理页 page 联系 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 物理页 Page , Linux 内核中 , 使用 上述..., 就是 " 内存区域 " zone , " 内存区域 " 再向下划分 , 就是 " 物理页 " page ; 2、物理页 page 与 MMU 内存管理单元 在 Linux 内核中 , MMU 内存管理单元...结构体 " 物理页 " page 是 Linux 内核 " 内存管理 " 中的 最小单位 , 物理页 中的 " 物理地址 " 是连续的 , 每个 " 物理页 " 使用 struct page 结构体...SPARSEMEM */ // 页描述数组 struct page *node_mem_map; #endif } 参考 【Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构

6.7K10

物理内存管理

前言: 书接上回《内存映射技术分析》,继续来分析一下linux物理内存管理。 分析: 1,物理内存 PC上的内存条,或者手机上的内存芯片,物理上实实在在的内存,就是物理内存。...在linux-4.0.4/mm/page_alloc.c中: ? 其中MAX_ORDER是11,所以order最大也就是10,因此linux上从buddy system可以申请最大的连续内存就是4M。...这里需要说明一下,对于Linux来说,一般都不需要连续内存,因为系统跑起来之后,CPU在protected mode下访问的是虚拟地址,MMU把不连续物理地址映射成连续的虚拟地址就可以了。...比如说手机播放视频的时候,使用硬件decode,video decoder可能没有MMU,那么就需要大量的连续物理内存了,就需要使用CMA来分配。 这里的代码不分析了,网上也会比较多。...就是说,让Linux在管理这些memory block的时候,跳开两个不连续的block中间的hole,节省一些page struct占用的内存

2.6K70

连续内存分配

连续内存是一种比较直观的做法。这种做法将内存分为两个区域,一个是用户进程区域,另一个是操作系统区域。操作系统一般放在内存的低地址区域,这时因为中断向量被设置在低地址,例如0x80中断。...连续内存分配是最简单的一种方法,它主要用于批处理系统。给内存分为固定大小的块。每个块只能容纳一个进程。这样一个个大小不同的内存分块就形成了,当新进程需要内存的时候,系统会为它找一块足够大的孔。...不连续的小孔最终就会无法容纳一个进程,导致产生碎片化的内存。还有一种碎片是内部碎片,一般系统分配的内存是2的次方,而不是你需要多大分配的就刚好是这么大。...一种解决外部碎片的方法是移动内存中的内容,使得所有的空闲空间合并成为一整块。这适合于运行时绑定地址的进程,并且这个操作带来的开销是巨大的,不能经常使用。 另外的解决办法就是允许物理内存为非连续分配。...这样只要有物理内存就可以为进程分配。主要有两种实现方案分页和分段。它们还可以合并使用。

1.8K20

Linux释疑:物理内存占用80%以上,正常吗?

Linux 系统(比如 CentOS/RadHat、Debian/Ubuntu)上配置 lnmp环境,通过探针查看物理内存使用率: 当然,也可以使用 top 命令查看: 从上面的图片可以看出 物理内存...Linux 特性: 充分利用物理内存,加快数据访问 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。...主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。...换句话说,每增加一些物理内存Linux 都将能充分利用起来,发挥了硬件投资带来的好处,而Windows只将其做为摆设,即使增加8GB甚至更大。...Linux 的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为 cache 和 buffers ,以此提高数据访问性能。 页高速缓存(cache)是 Linux内核实现的一种主要磁盘缓存。

4.5K10

Linux 内核 内存管理】物理页释放 ( 物理页释放 __free_pages 函数 )

文章目录 一、物理页释放 __free_pages 函数 一、物理页释放 __free_pages 函数 ---- 页分配器 提供了 释放 物理页的 函数 __free_pages , 该函数定义在 Linux...内核源码的 linux-4.12\mm\page_alloc.c#4083 位置 ; __free_pages 函数参数分析 : struct page *page 参数 表示 要释放的 物理页 page...的 虚拟空间地址 ; unsigned int order 参数 表示 要释放的 物理页 的 " 阶数 " , 也就是 要释放的物理页大小 ; 阶 ( Order ) : 物理页 的 数量单位 ,...n 阶页块 指的是 2^n 个 连续的 " 物理页 " ; 参考 【Linux 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 ) __free_pages 函数源码...order == 0) free_hot_cold_page(page, false); else __free_pages_ok(page, order); } } 源码路径 : linux

12.6K20

物理内存与虚拟内存

物理内存就是你的机器本身内存了(如内存条的大小)。物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。...当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件(页面文件)上,并将需要访问内存的程序的内容从页面文件中换入到物理内存。...所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。有的地方呢,也叫这个虚拟内存内存交换区。...的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。...总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。

2.1K31

高端内存映射之vmalloc分配内存中不连续的页--Linux内存管理(十九)

1 内存中不连续的页的分配 根据上文的讲述, 我们知道物理连续的映射对内核是最好的, 但并不总能成功地使用. 在分配一大块内存时, 可能竭尽全力也无法找到连续内存块....在IA-32系统中, 前16M划分给DMA区域, 后面一直到第896M作为NORMAL直接映射区, 紧随直接映射的前896MB物理内存,在插入的8MB安全隙之后, 是一个用于管理不连续内存的区域....2 用vmalloc分配内存 vmalloc是一个接口函数, 内核代码使用它来分配在虚拟内存连续但在物理内存中不一定连续内存 // http://lxr.free-electrons.com/source...实际上没有mmu支持时, vmalloc就无法实现非连续物理地址到连续内核地址空间的映射, vmalloc退化为kmalloc实现. 2.2.1 vmlist全局链表 在创建一个新的虚拟内存区之前, 必须找到一个适当的位置...接下来从物理内存分配各个页 最后将这些页连续地映射到vmalloc区域中, 分配虚拟内存的工作就完成了.

2.9K10

郭健: Linux内存模型——平坦、非连续与稀疏

所谓memory model,其实就是从cpu的角度看,其物理内存的分布情况,在linux kernel中,使用什么的方式来管理这些物理内存。...在linux操作系统中,物理内存是按照page size来管理的,具体page size是多少是和硬件以及linux系统配置相关的,4k是最经典的设定。...如果从系统中任意一个processor的角度来看,当它访问物理内存的时候,物理地址空间是一个连续的,没有空洞的地址空间,那么这种计算机系统的内存模型就是Flat memory。...如果cpu在访问物理内存的时候,其地址空间有一些空洞,是不连续的,那么这种计算机系统的内存模型就是Discontiguous memory。...Memory model也是一个演进过程,刚开始的时候,使用flat memory去抽象一个连续内存地址空间(mem_maps[]),出现NUMA之后,整个不连续内存空间被分成若干个node,每个node

3.8K32

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

前文回顾 在上篇文章 《深入理解 Linux 物理内存管理》中,笔者详细的为大家介绍了 Linux 内核如何对物理内存进行管理以及相关的一些内核数据结构。...在介绍物理内存管理之前,笔者先从 CPU 的角度开始,介绍了三种 Linux 物理内存模型:FLATMEM 平坦内存模型,DISCONTIGMEM 非连续内存模型,SPARSEMEM 稀疏内存模型。...alloc_pages 函数用于分配多个连续物理内存页,在内核的某些内存分配场景中有时候并不需要分配这么多的连续内存页,而是只需要分配一个物理内存页即可,于是内核又提供了 alloc_page 宏,用于这种单内存页分配的场景...以上介绍的物理内存分配函数,分配的均是在物理连续内存页。...,从而腾出大块连续物理页面供内核分配。

47610

Linux内核最新的连续内存分配器(CMA)——避免预留大块内存【转】

在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着。...申请连续内存 申请连续内存仍然使用标准的arch/arm/mm/dma-mapping.c中定义的dma_alloc_coherent()和dma_alloc_writecombine(),这二者会间接调用...接下来要回收page,回收page的作用是,不至于因为拿了连续内存后,系统变得内存饥饿: -> /* * Reclaim enough pages to make sure that...释放连续内存 内存释放的时候也比较简单,直接就是: arch/arm/mm/dma-mapping.c: void dma_free_coherent(struct device *dev, size_t.../module.h> #include #include #include #include <linux

3.5K20

物理内存管理之zone详解

上一次说过了物理内存由node,zone,page三级结构来描述。而node是根据当前的系统是NUMA还是UMA系统。假设我们当前是UMA系统架构,则只有一个node。 ?...WMARK_LOW:低水位,代表内存已经开始吃紧,需要启动回收页内核线性kswapped去回收内存 WMARK_HIGH:高水位,代表内存还是足够的。...,当系统内存出现不足的时候,系统就会使用这些保留的内存来做一些操作,比如使用保留的内存进程用来可以释放更多的内存 free_area:用于维护空闲的页,其中数组的下标对应页的order数。...,就可以移动此页,腾出更多连续的空间 MIGRATE_RECLAIMABLE:可以回收的页 MIGRATE_CMA:用于专门CMA申请的页 MIGRATE_PCPTYPES:per-cpu的使用的 MIGRATE_HIGHATOMIC...这时候当申请一个连续的大page都没有的时候,就会做碎片整理操作 当然了我们的zone,也可以通过cat /proc/zoneinfo去查看zone的详细信息的 root:/ # cat /proc/zoneinfo

3.2K10
领券