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

Linux - Linux内存管理

文章目录 概念 物理内存虚拟内存 内存的监控 从内核的角度来查看内存的状态 从应用层的角度来看系统内存的使用状态 缓冲区(buffer)与缓存(cache)的异同 交换空间的使用 创建交换空间 激活使用交换空间...移除交换空间 ---- 概念 内存管理Linux系统重要的组成部分。...---- 物理内存虚拟内存 直接从物理内存读写数据要比从硬盘读写数据要快得多,因此,我们希望所有数据的读取写入都在内存中完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。...当需要用到原始内容时,这些信息会被重新从交换空间读入物理内存Linux内存管理采取的是分页存取机制。...而缓存直接用来记忆我们打开过的文件程序。 ---- 交换空间的使用 虽然现在的内存已经变得非常廉价,但是交换空间仍然有很大的使用价值,合理地规划使用交换分区,对系统稳定运行至关重要。

52.4K41

Linux内存管理

本篇介绍 本篇介绍下Linux内存管理,用系统角度看内存的寻址分配机制。 内容介绍 内存管理应该是系统中最难的模块之一了,而且历史也悠久,就先来简单回顾下。...分段分页 谈到内存管理,最先想到的就是分段分页机制。...分页把地址空间按照页框来管理,一般是4k,也有其他款式的,总之要和物理内存的页框大小匹配上。这样内存就按照页框的粒度来管理就好了。...mmap流程如下: image.png 缺页异常 linux 是在不得不使用物理内存的时候才会分配物理内存。这句话该怎么理解呢?...查看伙伴信息信息的内存节点是/proc/pagetypeinfo /proc/buddyinfo 查看内存管理区的内存节点是/proc/zoneinfo 用top vmstat也可以看到系统内存信息

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

    Linux 内存管理

    cache的存取速度最高,可以CPU匹配,因此其代价最高,容量也最小。       操作系统内存管理包括物理内存管理虚拟内存管理:       我们这篇主要介绍Linux的虚拟内存管理。...物理内存管理在另外一篇:《操作系统内存管理(思维导图详解)》       1、程序的进程在内存的数据结构  一.Linux 进程在内存数据结构 ---- 1、存储(没有调入内存)阶段:       可以看到一个可执行程序在存储...并且提供段 内分页管理机制 .   为 Linux虚拟内存管理机制提供了支持 。        ...内存管理中另外 一个 非 常重要的数 据 结 构是vmm_struct 结构体 .进程 的 task_struct中的mm成员指向 它. 当前运行进程的整个虚拟空间都 由它来管理描述 ....六.分页机制管理 ----          Linux使用分页管理机制来更加有效地利用物理内存.当创建一个进程时.仅仅把当前进程的一小部分真正装入内 存.其余部分需要访问时.处理器产生一个页故障.由缺页中断服务程序根据缺页虚拟地址出错码调用写拷贝函数

    7.7K10

    Linux内存描述之高端内存--Linux内存管理(五)

    但是,当Linux物理内存超过1G时,线性访问机制就不够用了,因为只能有1G的内存可以被映射,剩余的物理内存无法被内核管理,所以,为了解决这一问题,Linux把内核地址分为线性区非线性区两部分,线性区规定最大为...一般 128M给高端内存分配用, 因为很少, 所以不用要赶紧释放掉 64bit的时候, 就不存在低端内存高端内存的概念了, 因为空间很大都可以直接管理了. 1.5 例子 区域 大小 MemTotal...4 页框管理 4.1 页框管理 Linux采用4KB页框大小作为标准的内存分配单元。...每个管理区又有自己的描述符,描述了该管理区空闲的页框,保留页数目等。每个页描述符都有到内存节点到节点管理区的连接(被放在flag的高位字段)。...若把所有地址空间都给内存,那么用户进程怎么使用内存?怎么保证内核使用内存用户进程不起冲突? 让我们忽略Linux对段式内存映射的支持。

    12.5K23

    Linux 内存管理初探

    转自 | Linux 内核之旅 作者 | 郑剑 linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能稳定性。...本文主要介绍 linux 内存组织结构页面布局,内存碎片产生原因优化算法,linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。...从内存的原理结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制奥秘。 一、走进 linux 内存 1、内存是什么?...二、 linux 内存地址空间 1、linux 内存地址空间 Linux 内存管理全貌 ?...三、 Linux 内存分配算法 内存管理算法——对讨厌自己管理内存的人来说是天赐的礼物 1、内存碎片 1) 基本原理 产生原因:内存分配较小,并且分配的这些小的内存生存周期又较长,反复申请后将产生内存碎片的出现

    5K51

    Linux内存管理:memblock

    内存管理是操作系统内核中最复杂的部分之一, start_kernel函数在内核启动第一个init进程前初始化了所有的内核特性(包括那些依赖于不同架构的特性),你也许还记得引导时创立的临时页表,但复杂的内存管理部分还没有开始...,当start_kernel函数被调用时,我们会看到初期内存管理到更复杂的内存管理数据结构技术的转变,为了更好的理解内核的初始化过程,我们需要对这些技术有更清晰的理解,今天我们会着重讨论这个过程,主要针对初期的内存管理...首先我们知道在内核启动后,对于内存,分成好几块: 内存中的某些部分使永久分配给内核的,例如代码段和数据段、ramdiskdtb占用的空间、临时页表设备数中的保留区域等,是系统内存的一部分,不能被侵占...memblock是什么 memblock介绍 memblock即linux启动后kernel管理内存空间抽象出来的结构,此时buddy系统slab分配器等并没有初始化,当需要执行一些内存管理内存分配的任务...在mm_init中会建立内核的内存分配器,停用memblock,释放内存给伙伴系统slab分配器。

    1.9K20

    linux 内存管理初探

    导语 linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能稳定性。...本文主要介绍 linux 内存组织结构页面布局,内存碎片产生原因优化算法,linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。...从内存的原理结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制奥秘。 一、走进 linux 内存 1、内存是什么?...内存地址空间 1、linux 内存地址空间 Linux 内存管理全貌 [1502333613282_2762_1502333613646.jpg] 2、内存地址——用户态&内核态 用户态:Ring3...[1502334025496_4791_1502334025688.jpg] 三、 Linux 内存分配算法 内存管理算法——对讨厌自己管理内存的人来说是天赐的礼物 1、内存碎片 1)

    9.9K134

    Linux内存描述之概述--Linux内存管理(一)

    1 前景回顾 1.1 UMANUMA两种模型 共享存储型多处理机有两种模型 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 将可用内存以连续方式组织起来, 非均匀存储器存取...2 (N)UMA模型中linux内存的机构 Linux适用于各种不同的体系结构, 而不同体系结构在内存管理方面的差别很大. 因此linux内核需要用一种体系结构无关的方式来表示内存....比如,可能把内存的一个簇指派给每个处理器,或则某个簇设备卡很近,很适合DMA,那么就指派给该设备。...而内存管理的其他地方则认为他们就是在处理一个(伪)NUMA系统. 2.2 Linux物理内存的组织形式 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点..., 我们会在后面典型架构(x86)上内存区域划分详细讲解x86_32上的内存区域划分 因此Linux内核对不同区域的内存需要采用不同的管理方式映射方式, 为了解决这些制约条件,Linux使用了三种区:

    6.9K30

    Win32之内存管理之虚拟内存跟物理内存

    一丶虚拟内存物理内存   我们知道每个应用程序都有自己独立的4GB空间. ...而值是存储在物理内存的.如下图所示. ? 根据上图所示. 我们可以分清虚拟内存跟物理内存. 如果我们更改了物理内存的值.那么就会影响A进程或者B进程....所以说虚拟内存是假的.当用的时候才会存储在物理内存 二丶物理内存管理.   物理内存是使用4K的方式来管理的.也就是4096个字节.也成为一页.所以以后我们使用API的时候....大多数都会发现跟页相关.这也是因为管理是页方式管理的原因. 如下图所示 ? 进程A 的数值放到物理页中.  而我们进程传统意义上说是由4GB 其实分为高低2G....物理页大小根据你的物理内存.大小来设置的.也就是说你的物理内存多大就可以换算出来.我们可以通过任务管理器查看你的物理页总数. 例如下图: ?

    1.3K40

    Linux内核内存管理算法BuddySlab

    有了前两节的学习相信读者已经知道CPU所有的操作都是建立在虚拟地址上处理(这里的虚拟地址分为内核态虚拟地址用户态虚拟地址),CPU看到的内存管理都是对page的管理,接下来我们看一下用来管理page的经典算法...为了避免出现这种情况,Linux内核中引入了伙伴系统算法(Buddy system)。...Buddy算法牛逼就牛逼在运用了世界上任何正整数都可以由2^n的组成。这也是Buddy算法管理空闲页表的本质。 空闲内存的信息我们可以通过以下命令获取: ?...而当驱动需要使用时,就将进程占用的内存通过回收或者迁移的方式将之前占用的预留内存腾出来,供驱动使用。 Slab 在Linux中,伙伴系统(buddy system)是以页为单位管理分配内存。...总结 从内存DDR分为不同的ZONE,到CPU访问的Page通过页表来映射ZONE,再到通过Buddy算法Slab算法对这些Page进行管理,我们应该可以从感官的角度理解了下图: ?

    2.1K30

    Linux进程的内存管理之mallocmmap

    通过《Linxu进程的内存管理》,我们知道了进程内存的最小单位是vma,根据不同的用处又划分了不同类型的vma,比如 heap: 动态分配释放的内存 stack: 存放局部变量实现函数调用 mmap...:文件区间映射到虚拟地址空间的内存映射 text,data,bss 这篇我们就看下进程动态申请的内存,我们知道进程动态申请内存的函数是malloc,这篇讲下其涉及到的vma,即heapmmap。...malloc 在linux标准libc库种,malloc函数的实现会根据分配内存的size来决定使用哪个分配函数,当size小于等于128KB时,调用brk分配;当size大于128KB时,调用mmap...sys_brk分配过过程主要是调整brk位置 sys_mmap分配过程中主要是在堆栈中间(memory mapping segment)找一段空闲的虚拟内存 ?...mmap 私有匿名映射:通常用于内存分配,堆,栈 共享匿名映射:通常用于进程间共享内存,在内存文件系统中创建/dev/zero设备 私有文件映射:通常用于加载动态库,代码段,数据段 共享文件映射:通常用于文件读写进程间通信

    5K11

    Android内存管理(四)Linux内存管理机制

    linux内存管理卷帙浩繁,本文只能层层递进地带你领略冰山轮廓,通过本文你将了解到以下内容: 为什么需要管理内存 linux段页管理机制 内存碎片的产生机理 为什么需要管理内存 老子的著名观点是无为而治...在linux系统中如果以一种原始简单的方式管理内存是存在一些问题的,我们来看几个场景。...虚拟地址空间 为了解决上述的一些问题,linux系统引入了虚拟空间的概念,虚拟化的出现硬件有密不可分的联系,可以说是软硬件组合的结果,虚拟地址空间就是在程序物理空间所增加的中间层,这也是内存管理的重点...物理内存内存碎片 ---- 前面说的段页管理机制算是虚拟空间的部分,然而linux内存管理的另外一个重要部分就是物理内存管理了,也就是如何分配回收物理内存,这就涉及到一些内存分配算法分配器。...LinuxWindows在内存管理机制上的区别 在Linux系统使用过程中,你会发现,无论你的电脑内存配置多么优越,仍然不时的发生可用内存吃紧的现象,感觉内存不够用了,其实不然。

    2.7K10

    Linux内核内存管理算法BuddySlab

    有了前两节的学习相信读者已经知道CPU所有的操作都是建立在虚拟地址上处理(这里的虚拟地址分为内核态虚拟地址用户态虚拟地址),CPU看到的内存管理都是对page的管理,接下来我们看一下用来管理page的经典算法...为了避免出现这种情况,Linux内核中引入了伙伴系统算法(Buddy system)。...Buddy算法牛逼就牛逼在运用了世界上任何正整数都可以由2^n的组成。这也是Buddy算法管理空闲页表的本质。 空闲内存的信息我们可以通过以下命令获取: ?...而当驱动需要使用时,就将进程占用的内存通过回收或者迁移的方式将之前占用的预留内存腾出来,供驱动使用。 Slab 在Linux中,伙伴系统(buddy system)是以页为单位管理分配内存。...总结 从内存DDR分为不同的ZONE,到CPU访问的Page通过页表来映射ZONE,再到通过Buddy算法Slab算法对这些Page进行管理,我们应该可以从感官的角度理解了下图: ?

    3.7K73

    Linux进程内存管理(二)

    简单记录一下内存管理器的基本原理。这里就不深入代码内部了。 内存管理器的初始化 进程启动后,在 jemalloc 载入的时候会调用 jemalloc_constructor 执行一些初始化操作。...分配内存 层级结构 jemalloc 的内存管理采用层级结构,分别是 tcache(线程缓存),arena(分配区)系统内存(system memory)。...arena : 将内存切分成多个类别的固定大小,采用内存池的方式对内存区域进行管理,降低内存碎片。 system memory : 其实就是内核管理内存区域。...64位进程内存布局 上图是一个 Linux 64位进程的地址空间布局的简图,jemalloc 能管理的就是 Heap Memory map 两块的内存。 Text,存储程序的二进制代码。...参考文档 jemalloc Linux manpage jemalloc源码解析-内存管理

    2.9K40

    Linux 内存管理之vmalloc

    走进vmalloc 根据前面的系列文章,我们知道了buddy system是基于页框分配器,kmalloc是基于slab分配器,而且这些分配的地址都是物理内存连续的。...但是随着碎片化的积累,连续物理内存的分配就会变得困难,对于那些非DMA访问,不一定非要连续物理内存的话完全可以像malloc那样,将不连续的物理内存页框映射到连续的虚拟地址空间中,这就是vmap的来源)...purge_list; /* "lazy purge" list */ //如果当前VA处于使用状态(即在vmap_area_root为根的红黑树中和vmap_area_list链表中),vm有效,指向用于管理虚拟地址物理页之间的映射关系的描述符...struct vm_struct *vm; struct rcu_head rcu_head; }; vm_struct 管理虚拟地址物理页之间的映射关系 struct vm_struct {...vmalloc区域的虚拟地址的大小 unsigned long flags; //vamlloc分配获取的各个物理页面并是不连续的,每个物理页面用struct page描述,一个vm_struct对用到的管理所有物理页面的

    2.2K20

    Linux 内存管理之CMA

    当设备驱动不用时,内存管理系统将该区域用于分配管理可移动类型页面;当设备驱动使用时,此时已经分配的页面需要进行迁移,又用于连续内存分配;其用法与DMA子系统结合在一起充当DMA的后端,具体可参考《没有...char *name; }; extern struct cma cma_areas[MAX_CMA_AREAS]; extern unsigned cma_area_count; bitmap来管理内存的分配...count说明该cma_areas内存有多少个page。它order_per_bit一起决定了bitmap指针指向内存的大小。...base_pfn定义了该cma_areas的起始page frame number,base_pfncount一起定义了该cma_areas在内存中的范围。 ?...将CMA区域添加到Buddy System 为了避免这块reserved的内存在不用时候的浪费,内存管理模块会将CMA区域添加到Buddy System中,用于可移动页面的分配管理

    3.1K30

    Linux内存描述之内存节点node--Linux内存管理(二)

    CPU访问本地内存的速度比访问远程内存的速度要快 Linux适用于各种不同的体系结构, 而不同体系结构在内存管理方面的差别很大...., 内核页需要使用内存(另外,还需要保留部分内存用于初始化内存管理子系统) 为解决这个问题,内核使用了自举内存分配器 此结构用于这个阶段的内存管理 */...N_CPU用于CPU内存的热插拔....对内存管理有必要的标志是N_HIGH_MEMORYN_NORMAL_MEMORY, 如果结点有普通或高端内存则使用N_HIGH_MEMORY, 仅当结点没有高端内存时才设置N_NORMAL_MEMORY...系统中的NUMA结点都是从0开始编号的 3.1 linux-2.4中的实现 pgdat_next指针域pgdat_list内存结点链表 而对于NUMA结构的系统中, 在linux-2.4.x之前的内核中所有的节点

    7.9K21
    领券