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

Linux - Linux内存管理

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

52.4K41

Linux 内存管理

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

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

    Linux内存管理

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

    13.8K51

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

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

    12.6K23

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

    5K51

    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内存描述之内存节点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

    Linux内存描述之内存页面page--Linux内存管理(四)

    1 Linux如何描述物理内存 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个...CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 管理区(Zone) 每个物理内存节点node被划分为多个内存管理区域, 用于表示不同范围的内存, 内核可以使用不同的映射方式映射物理内存...简单来说, 页是一个数据块, 可以存放在任何页框(内存中)或者磁盘(被交换至交换分区)中 我们今天就来详细讲解一下linux下物理页帧的描述 2 页帧 内核把物理页作为内存管理的基本单位....*/ 这些标识是独立于体系结构的, 因而无法通过特定于CPU或计算机的信息(该信息保存在页表中) 3.1 页面到管理节点的映射 在早期的linux-2.4.18的内核中, struct page...因此在后来linux-2.4.x的更新中, 删除了这个字段, 取而代之的是page->flags的最高ZONE_SHIFT位NODE_SHIFT位, 存储了其所在zonenode在内存区域表zone_table

    8.4K11

    Linux虚拟内存管理

    摘要--本文旨在深入探讨Linux操作系统的虚拟内存管理机制。我们将从基本概念开始,逐步深入到内核级别的实现细节。为了达到这个目标,本文将结合理论讨论实际的代码分析。...我们希望通过这种方式,使读者对Linux虚拟内存管理有更深入的理解。一、虚拟内存的基本概念在现代操作系统中,虚拟内存是一个非常重要的概念。...二、Linux虚拟内存管理的实现在Linux内核中,虚拟内存管理主要涉及以下几个部分:页表管理、页面分配与回收、页面置换算法以及内存映射。1....内存映射在Linux中,进程可以通过系统调用(如mmap)来创建新的内存映射。这些映射可以是文件的映射,也可以是匿名映射(即没有对应文件的映射)。映射的创建和管理涉及到虚拟地址空间的分配页表的更新。...这个过程的代码实现非常复杂,因为它涉及到很多底层的细节边界条件。但是,通过仔细阅读代码注释,我们可以对Linux虚拟内存管理的实现有一个更深入的理解。

    48500

    Linux内存描述之内存区域zone--Linux内存管理(三)

    但是Linux内核又把各个物理内存节点分成个不同的管理区域zone, 这是为什么呢? 因为实际的计算机体系结构有硬件的诸多限制, 这限制了页框可以使用的方式...., 我们会在后面典型架构(x86)上内存区域划分详细讲解x86_32上的内存区域划分 因此Linux内核对不同区域的内存需要采用不同的管理方式映射方式, 因此内核将物理地址或者成用zone_t表示的不同地址区域...因此内核将内存的节点node分成了不同的内存区域方便管理映射....位系统中, Linux内核虚拟地址空间只有1G, 而0~895M这个986MB被用于DMA直接映射, 剩余的物理内存被成为高端内存....linux把系统的内存结点划分区, 一个区包含了若干个内存页面, 形成不同的内存池,这样就可以根据用途进行分配了 需要说明的是,区的划分没有任何物理意义, 只不过是内核为了管理页而采取的一种逻辑上的分组

    9.5K31

    Linux内存分页管理

    内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。我将从内存的物理特性出发,深入到内存管理的细节,特别是了解虚拟内存内存分页的概念。 内存 简单地说,内存就是一个数据货架。...有趣的是,尽管进程内存的关系如此紧密,但进程并不能直接访问内存。在Linux下,进程不能直接读写内存中地址为0x1位置的数据。...因此,Linux采用了分页(paging)的方式来记录对应关系。所谓的分页,就是以更大尺寸的单位页(page)来管理内存。在Linux中,通常每页大小为4KB。...这种对应关系让上层的抽象内存下层的物理内存分离,从而让Linux能灵活地进行内存管理。由于每个进程会有一套虚拟内存地址,那么每个进程都会有一个分页表。为了保证查询速度,分页表也会保存在内存中。...最新Linux系统中的分页表多达3层,管理内存地址也比本章介绍的长很多。不过,多层分页表的基本原理都是相同。 综上,我们了解了内存以页为单位的管理方式。

    1.1K30
    领券