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;

struct list_head lru;

#if defined(WneANT_PAGE_VIRTUAL)

void *virtual;

#endif /* WANT_PAGE_VIRTUAL */

};

阅读(940) | 评论(0) | 转发(0) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux的堆内存管理原理涉及到动态内存分配和释放。在Linux系统中,堆是进程地址空间中的一部分,用于存储动态分配的内存。 堆的管理是由C库函数(例如malloc()和free())和操作系统内核共同实现的。下面是Linux内存管理的主要原理: 1. 首先,进程在运行时会被分配一个虚拟地址空间,其中包括代码段、数据段、堆和栈。堆位于数据段和栈之间,它的大小可以在运行时动态地增长或缩小。 2. 当进程需要动态分配内存时,它可以调用C库函数malloc()来申请一块指定大小的内存。malloc()会在堆中找到一块足够大的连续空闲内存块,并将其分配给进程。 3. 分配的内存块会被记录在堆的数据结构中,以便在释放时能够被追踪和管理。通常,堆使用一个链表或树来维护空闲和已分配的内存块。 4. 当进程不再需要某块动态分配的内存时,它可以调用C库函数free()将其释放回堆中。free()会将该内存块标记为空闲,并将其加入空闲内存块的链表或树中,以供后续的内存分配使用。 5. 当堆中没有足够的连续空闲内存块来满足进程的内存分配请求时,系统会执行堆扩展操作,通常是通过向操作系统内核请求更多的虚拟内存来实现。 6. 堆内存管理还涉及到一些高级的概念,例如内存对齐、碎片整理、分配策略和内存泄漏检测等。这些方面可以通过特定的工具和技术进行优化和调试。 总之,Linux内存管理的原理主要包括动态内存分配和释放、空闲内存块的维护、堆扩展和高级优化等。这些原理在C语言编程中非常重要,开发者需要了解它们以确保高效和可靠的内存管理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值