Linux支持多种硬件体系结构,因此Linux必须采用通用的方法来描述内存,以方便对内存进行管理。为此,Linux有了内存节点、内存区、页框的概念,这些概念也是一目了然的。

内存节点:主要依据CPU访问代价的不同而划分。多CPU下环境下,本地内存和远端内存就是不同的节点。即使在单CPU环境下,访问所有内存的代价都是一样的,Linux内核依然存在内存节点的概念,只不过只有一个内存节点而已。内核以struct  pg_data_t来描述内存分区。

内存分区:Linux对内存节点再进行划分,分为不同的分区。内核以struct zone来描述内存分区。通常一个节点分为DMA、Normal和High Memory内存区,具体下面再介绍。

页框:Linux采用页式内存管理,页是物理内存管理的基本单位,每个内存分区又由大量的页框组成。内核以struct page来描述页框。页框有很多属性,这些属性描述了这个页框的状态、用途等,例如是否被分配。





上图中的zone_mem_map是一个页框的数组,它记录了一个内存分区的所有页框的使用情况。



DMA内存区:即直接内存访问分区,通常为物理内存的起始16M。主要是供一些外设使用,外设和内存直接访问数据访问,而无需系统CPU的参与。

Normal内存区:从16M到896M内存区。

HighMemory内存区:896M以后的内存区。



为什么高端内存的边界是896M?这是因为,32位Linux虚拟内存空间为0-4G,其中0-3G用于用户态,3G-4G用于内核态。这意味着内核只有1G的虚拟地址空间,如果物理内存超过1G,内核就无法映射了。Linux采取的策略是,内核地址空间的前896M采用固定映射,映射方法是:虚拟地址-3G = 物理地址,只能映射到物理地址的前896M。也就是说内核虚拟地址空间的3G到3G+896M这部分,页表的映射是固定的,系统初始化时就建立起来。而虚拟地址空间的最后128M,也就是3G+896M到4G部分采用动态映射,也就是说页表映射的物理地址可变的。在系统运行过程中,通过更新页表,就可以映射到不同的物理地址,当然也包括高端物理内存。



这主要解决了两个问题:第一,这可以使内核地址空间映射到高端物理内存;第二,虚拟地址空间的3G+896M到4G部分,连续的虚拟地址空间可以映射到非连续的物理内存,只要通过更新页表就可以做到,这和用户态的虚拟内存映射采用了同样这种方法。这在没有大段连续的空闲物理地址时,是非常重要的。



备用内存区:

在一个内存区分配页时,如果这个内存区没有满足条件的内存页,则需要从其它内存区或从其它内存节点分配。Linux为每个内存区都建立了备用内存区列表,当前内存区没有满足条件的内存时,就从备用内存区分配。比如,系统中有4个内存节点A,B,C,D,每个内存节点又分为DMA、Normal、HighMemory内存区。对节点B来说,内存区分配列表可能是B(HighMemory)、B(Normal)、B(DMA)、

A(HighMemory)、A(Normal)、A(DMA)、
C(HighMemory)、C(Normal)、C(DMA)、
D(HighMemory)、D(Normal)、D(DMA)。

分配内存时,优先从本地内存节点分配,再从其它内存节点分配。对一个内存节点,优先从HighMemory分配,再从Normal或DMA分配。

[内存管理]linux内存管理 之 内存节点和内存分区的更多相关文章

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

    1 内存节点node 1.1 为什么要用node来描述内存 这点前面是说的很明白了, NUMA结构下, 每个处理器CPU与一个本地内存直接相连, 而不同处理器之前则通过总线进行进一步的连接, 因此相对 ...

  2. Linux 磁盘管理,Linux vi/vim

    一.Linux 磁盘管理 Linux磁盘管理好坏直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 ...

  3. 九、Linux 磁盘管理

    Linux 磁盘管理 Linux磁盘管理好坏直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fd ...

  4. Linux软件包管理

    Linux软件包管理 Linux软件包管理主要有2类:是二进制包管理.源码包管理 二进制包管理 主要有RPM和YUM两种 RPM包管理 安装 --ivh:-v ,-vv,-vvv显示的安装信息依次详细 ...

  5. Linux磁盘管理,vi编辑器以及包管理器

    一.Linux磁盘管理 Linux磁盘管理常用的三个命令为df,du,fdisk df:列出文件系统的整体磁盘使用量,利用这个命令来获取磁盘被占用了多少空间,,目前还剩下多少空间用法:df [-ahi ...

  6. Linux 文件与目录管理,Linux系统用户组的管理

      一.Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什 ...

  7. Linux 磁盘管理(df fu fdisk mkfs mount)

    Linux 磁盘管理 Linux磁盘管理好坏直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df : 列出文件系统的整体磁盘使用量 du : 检查磁盘空间使用 ...

  8. alloc_page分配内存空间--Linux内存管理(十七)

    1 前景回顾 在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. Linux内核使用二进制伙伴算法来管理和分配物理内存页面, 该算法由Know ...

  9. 启动期间的内存管理之bootmem_init初始化内存管理–Linux内存管理(十二)

    1. 启动过程中的内存初始化 首先我们来看看start_kernel是如何初始化系统的, start_kerne定义在init/main.c?v=4.7, line 479 其代码很复杂, 我们只截取 ...

随机推荐

  1. 文件File

    前面的话 不能直接访问用户计算机中的文件,一直都是Web应用开发中的一大障碍.2000年以前,处理文件的唯一方式就是在表单中加入<input type="file">字 ...

  2. php基础语法(20161021)

    上午: 数据库总结: 1.创建数据库 create database 数据库名称 删除数据库 drop database 数据库名称 2.创建表 create table 表名 ( 列名 类型(长度) ...

  3. JavaSE之认识java

    本来很早之前就应该总结自己在JavaSE中系统学到的知识了,马上就要出去工作了,想想自己还是非常菜的菜鸟,自己就夜不能寐呀.现在从zero基础开始带大家一起回顾学习的基础知识. 现在已经是凌晨了,但是 ...

  4. python自学基础1week

    一.python老师介绍 二.为什么要学习python? 三.学习python有前途吗? 疗程1:语言基础 疗程2:网络编程 疗程3:web基础开发 疗程4:算法&设计模式 疗程5:pytho ...

  5. 使用Nginx+CppCMS构建高效Web应用服务器(之二)

    使用Nginx+CppCMS构建高效Web应用服务器(之二) 上一篇 使用Nginx+CppCMS构建高效Web应用服务器(之一) 大致介绍了网站的整体架构,实际上通过调用REST获取数据并没有实现. ...

  6. 关于npm安装全局模块,require时报Error: Cannot find module 'XXX'的解决办法

    系统环境:centos 下午使用npm安装"cheerio",想搞爬虫玩玩. npm安装有两种模式: 本地 # npm install cheerio 全局 # npm insta ...

  7. Java:从面试题“i++和++i哪个效率高?"开始学习java字节码

    今天看到一道面试题,i++和++i的效率谁高谁低. 面试题的答案是++i要高一点. 我在网上搜了一圈儿,发现很多回答也都是同一个结论. 如果早个几年,我也会认同这个看法,但现在我负责任的说,这个结论是 ...

  8. vueJS 获取后台数据 绑定data

    //vue 环境安装http://blog.csdn.net/u013182762/article/details/53021374 一开始使用安装环境配置一些东西 ,后来发现太麻烦了 .  直接CD ...

  9. 微信web开发者工具使用

    1.首先启动微信web开发者工具, 2.启动之后,点击移动端调试, 3.选择普通调试,然后,将手机和电脑置于同一个网段之中,可以通过电脑发出一个wifi,让手机连入就行 4.如果,电脑室台式机的话,没 ...

  10. 树莓派Raspberry实践笔记-简单方法安装minicom

    [原创链接]:http://www.cnblogs.com/atsats/p/6665566.html 本文结合最新的Raspbain jessie,使用图形化的方式安装一款软件:串口调试工具mini ...