一、内存管理的基本概念

1.存储空间

在32位嵌入式系统中,存储空间的地址范围从0x00000000到0xFFFFFFFF。这4GB存储范围内可以包括以下几种存储空间:

设备空间(MT_DEVICE)、内部高速SRAM空间(MT_CACHECLEAN)、内部mini cache空间(MT_MINICLEAN)、低端中断向量空间(MT_LOW_VECTORS)、高端中断向量空间(MT_HIGH_VECTORS)、RAM内存空间(MT_MEMORY)、ROM(flash)空间(MT_ROM)

2.内存空间

系统的内存空间特指上面的RAM内存空间。

3.内存页(page)

Linux是以页(page)为单位来管理物理内存的,一页大小一般等于4096(字节)。页容量越大,系统中可能存在的内存碎片就越多。对应内存页的重要数据结构有struct page。

4.内存区段(bank)

一个内存bank表示一块连续内存区域,一个bank一般对应处理器的一个RAM片选管脚上连接的RAM芯片内存空间。对应内存bank的数据结构有struct meminfo。

5.内存节点(node)

内存节点是指有一个或者多个内存bank组成的内存集合,如果一个内存节点由多个内存bank组成,这些内存bank之间可以地址连续,也可以不连续,即内存节点内可以存在内存孔洞。对应内存节点的重要数据结构有struct pglist_data(pg_data_t)。

6.内存页区(zone)

内存页区是定义在内存节点(node)内的概念,每个内存节点可分为3个内存页区,即DMA页区(ZONE_DMA=0)、Normal页区(ZONE_NORMAL=1)和HighMem页区(ZONE_HIGHMEM=2),三个页区的含义如下:

1)DMA页区:可以进行DMA操作的RAM内存区域。

2)Normal页区:不能进行DMA操作的RAM内存区域。

3)HighMem页区:属于高端内存的区域,高端内存是指系统中的物理内存容量太大,其中高于一定域值的RAM内存页区就是高端内存页区。

对应的内存页区的重要数据结构有struct zone。

7.空闲内存区域(free area)

对应内存空闲区域的重要数据结构有struct free_area。

8.NUMA(Non-Uniform Memory Access)非一致内存访问

二、内存管理相关数据结构

1.Struct page内存页描述符结构

struct page {

page_flags_t flags;页标志字

atomic_t _count;页引用计数器

atomic_t _mapcount;页映射计数器

unsigned long private;私有数据指针

struct address_space *mapping;该页所在地址空间描述结构指针,用于内容为文件的页帧

pgoff_t index;该页描述结构在地址空间radix树page_tree中的对象索引号即页号

struct list_head lru;最近最久未使用struct slab结构指针链表头变量

#if defined(WneANT_PAGE_VIRTUAL)

void *virtual;

#endif /* WANT_PAGE_VIRTUAL */

};

2.struct per_cpu_pageset每CPU高速缓存内存组结构

struct per_cpu_pageset {

struct per_cpu_pages pcp[2]; /* 0: hot.  1: cold */

#ifdef CONFIG_NUMA

unsigned long numa_hit;  /* allocated in intended node */

unsigned long numa_miss; /* allocated in non intended node */

unsigned long numa_foreign; /* was intended here, hit elsewhere */

unsigned long interleave_hit;  /* interleaver prefered this zone */

unsigned long local_node; /* allocation from local node */

unsigned long other_node; /* allocation from other node */

#endif

} ____cacheline_aligned_in_smp;

3.struct per_cpu_pages CPU高速缓存描述结构

struct per_cpu_pages {

int count;  /* number of pages in the list */

int low;  /* low watermark, refill needed */

int high;  /* high watermark, emptying needed */

int batch;  /* chunk size for buddy add/remove */

struct list_head list; /* the list of pages */

};

4.struct pagevec 页向量描述结构

struct pagevec {

unsigned long nr; 该页向量中的内存页数

unsigned long cold;冷热标志 0 热区 非0 冷区

struct page *pages[PAGEVEC_SIZE]; 该页向量中的页描述结构指针数组

};

5.struct page_address_map页地址映射描述结构

struct page_address_map {

struct page *page; 页的描述结构

void *virtual; 页的虚拟地址

struct list_head list; 通过list字段连接到页表池全局链表page_address_pool中

};

6.static struct page_address_slot页地址槽描述结构

static struct page_address_slot {

struct list_head lh;   /* List of page_address_maps */

spinlock_t lock;   /* Protect this bucket's list */

} ____cacheline_aligned_in_smp page_address_htable[1<

linux系统内存管理含义,Linux内存管理--基本概念及相关数据结构相关推荐

  1. linux分区变为空闲,分析linux系统中磁盘空闲空间的管理方法

    分析linux系统中磁盘空闲空间的管理方法 汪建国 摘要:要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块.如何实现存储空间的分配和收回,取决于对空闲块的管理方法,主要有两种对磁盘存 ...

  2. 组群的基本概念linux,linux课件-Linux系统中组群与用户管理.ppt

    <linux课件-Linux系统中组群与用户管理.ppt>由会员分享,可在线阅读,更多相关<linux课件-Linux系统中组群与用户管理.ppt(66页珍藏版)>请在装配图网 ...

  3. linux系统用户,组和权限的管理

    PS: {最近一直在做毕业设计,前面博客也记录过我的一些过程.其中需要在Ubuntu上搭建一个FTP服务器,此处我选择Vsftpd,但是在我对vsftpd的配置文件vsftpd.conf设置正确后(对 ...

  4. Linux系统之高级用户组和权限管理

    Linux系统之高级用户组和权限管理 一.用户的密码策略设置 1.用户的密码文件 2.用户的密码期限配置 ①查看用户密码期限 ②修改密码期限 ③强制用户下一次修改密码 ④用户到期时间设置 3.查看当前 ...

  5. git 的安装以及使用:是一个开源的分布式版本控制系统,可以对项目进行版本管理。 早期是linux之父用来管理linux系统源代码的(linux是和windows一样操作系统 开源免费的操作...

    ## 总结 - 学会使用基本的git命令 管理源代码 - 学会去github创建仓库 并将代码上传到github的仓库 (有待完成 回家有网再push) - 了解本地的.git和服务器github的. ...

  6. Linux系统快速查看CPU和内存使用情况,附各参数详解

    Linux系统中查看CPU和内存使用情况,是一个运维工程师常见的事情,下面分享一下. 目 录 1.top命令 2.ps命令 3.free命令 1.top命令 top命令是Linux下常用的性能分析工具 ...

  7. linux中查看cpu和内存的命令,Linux系统如何查看cpu和内存信息

    Linux系统,其实并不是很多人都在使用,所以很多人第一次接触这个系统,很多操作都不会,下面就让学习啦小编教大家Linux系统如何查看cpu和内存信息吧. Linux系统查看cpu和内存信息的方法 右 ...

  8. linux系统charp命令,操作系统 Linux系统

    Linux操作系统 预备知识(Operating System): 1.GNU项目,GNU项目是一个自由软件项目,旨在建立一个完全自由开放通用的UNIX软件平台. 2.操作系统:管理计算机硬件和软件资 ...

  9. Linux系统磁状态检测,检测Linux硬件状态

    计算机系统是由软件系统和硬件系统共同组成的.检测硬件状态对于保障整个系统的稳定是非常重要的.不论操作系统是使用Linux.还是Windows,一旦硬件出现故障,那么整个系统的安全就严重了.这里我们主要 ...

  10. linux系统查看串口占用,Linux 系统串口信息查看

    先确认系统启动的时候串口的信息. ECM_5412@chenfl:~$ dmesg | grep tty [ 0.000000] console [tty0] enabled [ 2.511678] ...

最新文章

  1. 聊城中考计算机试题及答案,初中微机模拟考试试题(word版).doc
  2. linux系统被***后处理经历
  3. 《iOS应用软件设计之道》—— 2.11 小结
  4. 无法停止‘通用卷’设备的解决方法
  5. [译] Node.js, Express.js 搭建 HTTP/2 服务器
  6. 和ufs_宏旺半导体告诉你手机eMMC和UFS到底是什么意思?有什么区别?
  7. 浅谈浏览器的编码与解码过程
  8. MapGIS名词解释
  9. mysql 等距随机_随机起点对称等距抽样公式的简便运用
  10. 涨知识!中国天眼一秒钟要用多少度电?
  11. python实训日志_最新Python实训周总结
  12. 论文:Discriminative Triad Matching and Reconstruction for Weakly Referring Expression Grounding
  13. SQL Server 空间管理——表空间
  14. 电脑鼠标右击刷新一直转圈
  15. 如何解决ARP欺骗攻击
  16. matlab 相关性分析 相关系数地图生成
  17. [AGC048D]Pocky Game
  18. Python:图像处理中img[:,:,::-1]是什么意思?
  19. Microsoft Excel 教程:如何在 Excel 单元格中设置文本格式?
  20. 【愚公系列】2022年11月 uniapp专题-优购电商-商品详情页面

热门文章

  1. Xendesktop配置高可用DDC
  2. Cocos Creator皮毛功能之拖动多选扑克麻将
  3. T检验,方差分析,非参数检验,卡方检验,方差分析总结
  4. js 当天24小时倒计时
  5. 【财务管理 I】价值观念
  6. 滴滴青桔单车跨端技术方案和业务技术架构,及框架设计和性能提升实践
  7. 项目6 创建与使用存储过程
  8. wkhtmltopdf 字体无效问题
  9. html5怎么实现雨滴效果,雨滴效果——HTML5之特效
  10. Nervos 社区伙伴成功破解最新海报谜题