linux系统内存管理含义,Linux内存管理--基本概念及相关数据结构
一、内存管理的基本概念
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内存管理--基本概念及相关数据结构相关推荐
- linux分区变为空闲,分析linux系统中磁盘空闲空间的管理方法
分析linux系统中磁盘空闲空间的管理方法 汪建国 摘要:要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块.如何实现存储空间的分配和收回,取决于对空闲块的管理方法,主要有两种对磁盘存 ...
- 组群的基本概念linux,linux课件-Linux系统中组群与用户管理.ppt
<linux课件-Linux系统中组群与用户管理.ppt>由会员分享,可在线阅读,更多相关<linux课件-Linux系统中组群与用户管理.ppt(66页珍藏版)>请在装配图网 ...
- linux系统用户,组和权限的管理
PS: {最近一直在做毕业设计,前面博客也记录过我的一些过程.其中需要在Ubuntu上搭建一个FTP服务器,此处我选择Vsftpd,但是在我对vsftpd的配置文件vsftpd.conf设置正确后(对 ...
- Linux系统之高级用户组和权限管理
Linux系统之高级用户组和权限管理 一.用户的密码策略设置 1.用户的密码文件 2.用户的密码期限配置 ①查看用户密码期限 ②修改密码期限 ③强制用户下一次修改密码 ④用户到期时间设置 3.查看当前 ...
- git 的安装以及使用:是一个开源的分布式版本控制系统,可以对项目进行版本管理。 早期是linux之父用来管理linux系统源代码的(linux是和windows一样操作系统 开源免费的操作...
## 总结 - 学会使用基本的git命令 管理源代码 - 学会去github创建仓库 并将代码上传到github的仓库 (有待完成 回家有网再push) - 了解本地的.git和服务器github的. ...
- Linux系统快速查看CPU和内存使用情况,附各参数详解
Linux系统中查看CPU和内存使用情况,是一个运维工程师常见的事情,下面分享一下. 目 录 1.top命令 2.ps命令 3.free命令 1.top命令 top命令是Linux下常用的性能分析工具 ...
- linux中查看cpu和内存的命令,Linux系统如何查看cpu和内存信息
Linux系统,其实并不是很多人都在使用,所以很多人第一次接触这个系统,很多操作都不会,下面就让学习啦小编教大家Linux系统如何查看cpu和内存信息吧. Linux系统查看cpu和内存信息的方法 右 ...
- linux系统charp命令,操作系统 Linux系统
Linux操作系统 预备知识(Operating System): 1.GNU项目,GNU项目是一个自由软件项目,旨在建立一个完全自由开放通用的UNIX软件平台. 2.操作系统:管理计算机硬件和软件资 ...
- Linux系统磁状态检测,检测Linux硬件状态
计算机系统是由软件系统和硬件系统共同组成的.检测硬件状态对于保障整个系统的稳定是非常重要的.不论操作系统是使用Linux.还是Windows,一旦硬件出现故障,那么整个系统的安全就严重了.这里我们主要 ...
- linux系统查看串口占用,Linux 系统串口信息查看
先确认系统启动的时候串口的信息. ECM_5412@chenfl:~$ dmesg | grep tty [ 0.000000] console [tty0] enabled [ 2.511678] ...
最新文章
- 聊城中考计算机试题及答案,初中微机模拟考试试题(word版).doc
- linux系统被***后处理经历
- 《iOS应用软件设计之道》—— 2.11 小结
- 无法停止‘通用卷’设备的解决方法
- [译] Node.js, Express.js 搭建 HTTP/2 服务器
- 和ufs_宏旺半导体告诉你手机eMMC和UFS到底是什么意思?有什么区别?
- 浅谈浏览器的编码与解码过程
- MapGIS名词解释
- mysql 等距随机_随机起点对称等距抽样公式的简便运用
- 涨知识!中国天眼一秒钟要用多少度电?
- python实训日志_最新Python实训周总结
- 论文:Discriminative Triad Matching and Reconstruction for Weakly Referring Expression Grounding
- SQL Server 空间管理——表空间
- 电脑鼠标右击刷新一直转圈
- 如何解决ARP欺骗攻击
- matlab 相关性分析 相关系数地图生成
- [AGC048D]Pocky Game
- Python:图像处理中img[:,:,::-1]是什么意思?
- Microsoft Excel 教程:如何在 Excel 单元格中设置文本格式?
- 【愚公系列】2022年11月 uniapp专题-优购电商-商品详情页面