2015年1月26日
摘要: slab着色原理slab着的原理,cpu cache一,slab着色原理slab分配器中用到很多的缓存,每个缓存中又包含了很多slab,每个slab中有很多对象,每个slab的头部用于管理该slab中的对象(比如哪些对象已经使用,哪些对象还没有使用等),在slab的每个对象的开始和结束处都有一个特定... 阅读全文
posted @ 2015-01-26 20:07 知了112 阅读(1322) 评论(0) 推荐(0) 编辑
摘要: linux内核相关1,linux内核内存分配函数总结单位接口算法动态大小kmalloc/kfree/krealloc/kcalloc按大小组织的缓存数组固定大小kmem_cache_create/kmem_cache_destroykmem_cache_alloc/kmem_cache_freeSl... 阅读全文
posted @ 2015-01-26 20:07 知了112 阅读(2176) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/vanbreaker/article/details/76642961,为什么需要slab分配器:利用伙伴系统进行分配内存只能按照页的单位进行分配,这样会造成很多的内存浪费,多了很多内存碎片,比如只需要申请10字节的,结果分配了一个页。2,slab分配器和伙... 阅读全文
posted @ 2015-01-26 20:06 知了112 阅读(673) 评论(0) 推荐(0) 编辑
摘要: 一:kmap()和kunmap()函数永久内核映射允许内核建立高端页框到内核地址空间的长期映射。他使用主内核页表中一个专门的页表,其页表地址存放在pkmap_page_table中,页表包含512项或1024项,因此,内核一次最多访问2M或4M的高端内存(地址范围是 4G-8M 到 4G-4M 之间... 阅读全文
posted @ 2015-01-26 20:05 知了112 阅读(1379) 评论(0) 推荐(0) 编辑
摘要: Linux Slab分配器(一)--概述Linux Slab分配器(二)--初始化Linux Slab分配器(三)--创建缓存Linux Slab分配器(四)--分配对象Linux Slab分配器(五)--释放对象Linux Slab分配器(七)--销毁缓存 阅读全文
posted @ 2015-01-26 20:05 知了112 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 一:vmallochttp://www.360doc.com/content/14/0614/13/18127083_386524093.shtml1,vmalloc()的内核入口函数是kernel/mm/Vmalloc.c里的void *vmalloc(unsigned long size),si... 阅读全文
posted @ 2015-01-26 20:04 知了112 阅读(793) 评论(0) 推荐(0) 编辑
摘要: 1,查看内存的基本情况通过/proc/meminfo可以看到2,查看vmalloc分配的情况通过/proc/vmallocinfo可以看到3,查看伙伴系统使用的内存情况通过/proc/buddyinfo可以查看~4,查看slab分配器的使用情况通过查看/proc/slabinfo来查看 阅读全文
posted @ 2015-01-26 20:03 知了112 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 1,分配器APIhttp://blog.csdn.net/kickxxx/article/details/9287003伙伴系统只能分配2的整数幂个页。因此申请时,需要指定请求分配的阶。2,分配页,所有分配伙伴系统的函数分配页最终都会调用到alloc_pages_nodemask()函数static... 阅读全文
posted @ 2015-01-26 20:02 知了112 阅读(467) 评论(0) 推荐(1) 编辑
摘要: 1,本文大部分来自:http://blog.csdn.net/vanbreaker/article/details/76115852,在start_kernel()-->paging_init()-->zone_sizes_init()-->free_area_init_nodes()-->free... 阅读全文
posted @ 2015-01-26 20:01 知了112 阅读(697) 评论(0) 推荐(0) 编辑
摘要: 1,伙伴系统的作用:伙伴系统主要是为了高效使用物理内存,尽量减少内存碎片的产生2,伙伴系统的概念:系统中的内存总是两两分组,每组中的两个内存块称为伙伴3,伙伴系统的原理: 伙伴系统是相对于struct zone而言,将每个zone的空闲内存分为最多11个数组,比如第一个数组里管理着2^0页的内存,所... 阅读全文
posted @ 2015-01-26 20:00 知了112 阅读(758) 评论(0) 推荐(0) 编辑
摘要: 内核启动过程的内存管理1,memblock机制kernel/arm/mm/memblock.carm_memblock_init()函数系统刚启动的时候不是所有的内存都是可以作为分配使用的,比如有些内存是默认给rootfs或者kernel使用的,memblock机制作用就是决定哪些内存是可以分配的,... 阅读全文
posted @ 2015-01-26 19:59 知了112 阅读(613) 评论(0) 推荐(0) 编辑
摘要: 1,kmalloc()函数和vmalloc()函数的区别:kmalloc()函数分配的内存是物理上连续的,而Vmalloc()函数分配的内存仅仅是虚拟地址连续的,正常内核编程通常使用kmalloc(),这主要是处于性能的考虑,因为vmalloc()将物理不连续的页转换为虚拟地址空间上连续的页,必须专... 阅读全文
posted @ 2015-01-26 19:58 知了112 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 一,为什么需要高端内存答:对于32位机器,linux虚拟内存最大为4G,其中3-4G空间是用作内核空间,考虑到如果物理内存大于1G,那么物理内存不能得到完全的映射,因此,Linux 规定“内核直接映射空间” 最多映射 896M 物理内存,ARM体系架构上有高端内存的概念,不过不是固定在896M以上的... 阅读全文
posted @ 2015-01-26 19:57 知了112 阅读(1306) 评论(0) 推荐(0) 编辑
摘要: Linux伙伴系统(一)--伙伴系统的概述Linux伙伴系统(二)--伙伴系统的初始化Linux伙伴系统(三)--分配页Linux伙伴系统(四)--释放页Linux伙伴系统(五)--通过迁移类型分组来实现反碎片 阅读全文
posted @ 2015-01-26 19:55 知了112 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 1,ARM MMUARM体系结构与编程第五章MMU的基本概念:MMU基本原理系统通过MMU将物理地址映射成虚拟地址,最小单位为页,虚拟地址空间一个页对应物理地址的一个页框ARM MMU原理 阅读全文
posted @ 2015-01-26 19:54 知了112 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 1,linux内核内存管理arm体系结构的内存建立是在kernel/arch/arm/kernel/setup.c文件里~linux内核设计与实现——内存管理linux内核中,内核把物理页作为内存管理的基本单元,处理器最小的寻址单位是字节,从虚拟内存角度看,页是最小单位。内核中使用struct pa... 阅读全文
posted @ 2015-01-26 19:53 知了112 阅读(565) 评论(0) 推荐(0) 编辑
摘要: 一:内存分段和分页。点击打开链接每个用户空间的linux进程都有3G的地址空间,(虚拟地址空间3G-4G空间是linux内核使用的),用户空间看到的进程地址都是指虚拟地址空间,然后操作系统通过MMU再将虚拟地址映射到实际的物理地址。分段:就是将整个程序映射到linux内存的物理地址,假设有两个进程 ... 阅读全文
posted @ 2015-01-26 19:52 知了112 阅读(438) 评论(0) 推荐(0) 编辑
摘要: 1,内存中各个地址范围的含义按照地址范围由低到高的顺序:0-3G的地址范围:代码段:代码的可执行文件,一般为只读并且是共享的。(RO code/data)数据段:存已经被初始化的全局变量(RW data) static char *user="jiangsu"BSS段:存一些未被初始化的全局变量(... 阅读全文
posted @ 2015-01-26 19:51 知了112 阅读(430) 评论(0) 推荐(0) 编辑