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上分配内存的好处在于减少数据锁定,

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Linux 内存管理 1 页的概念 linux 内核中把物理页作为内存分配的最小单位,32位CPU 页的大小通常为...
    赤兔欢阅读 8,587评论 0 5
  • 1. 用户空间 通常 32 位 Linux 虚拟地址空间划分, 0-3GB为用户空间,3GB-4GB为内核空间。每...
    Fly_Li阅读 5,852评论 0 5
  • 在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值...
    黑黝黝的搬砖王阅读 3,544评论 0 0
  • 忆往昔 何少波 多少往事就在昨天;多少朋友还在身边;心...
    南塬牛阅读 1,059评论 0 0
  • 今天一大早就在爸妈的催促声中起床了,老哥今天要办婚礼。 看来今天是个黄道吉日,一大早就在路上看到几个结婚的车队。 ...
    他说他的不说阅读 1,768评论 0 0