Linux 内存管理

1、字节,页 (page 32位4KB 64位 8KB),区(ZONE) 为单位进行管理

*内存由页结构(page)来进行管理

*区 (一些硬件只能用某些特定的内存地址来执行DMA,所以对内存进行一些的划分) 

ZONE_DMA             DMA 使用的页         <16MB

ZONE_NORMAL      正常可寻址的页        16M~896M

ZONE_HIGHMEM     动态映射的页           >896M

2、内存非配方式

页获取方式: alloc_pages()   free_pages()

kmalloc(size,GFP_KERNEL)   可以睡眠    对应   kfree()    对应虚拟地址连续,物理地址连续

kmalloc(size,GFP_KERNEL)   不睡眠    对应  kfree()       对应虚拟地址连续,物理地址连续

vmalloc(size)                            可以睡眠                                  对应虚拟地址连续,物理地址不连续

3、slab内存分配(空闲链表)

当遇到频繁的数据分配和释放,应当缓存,频繁的内存分配和回收必然会导致内存碎片。

kmem_cache_create

kmem_cache_alloc

kmem_cache_free

4、栈上静态内存分配

内核中每个栈的大小是很小且是固定的,32位4KB,64位8KB

5、单cpu内存分配

SMP全称是"对称多处理"(Symmetrical Multi-Processing)技术,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。

单个cpu上分配内存的好处在于减少数据锁定,

你可能感兴趣的:(Linux 内存管理)