linux内存
文章平均质量分 75
知了112
记录自己成长每一步。加油!
展开
-
[Linux内存]linux内存学习(五)——伙伴系统
Linux伙伴系统(一)--伙伴系统的概述转载 2014-04-19 10:26:01 · 599 阅读 · 0 评论 -
[linux内存]伙伴系统学习笔记(一)——概念
1,伙伴系统的作用: 伙伴系统主要是为了高效使用物理内存,尽量减少内存碎片的产生 2,伙伴系统的概念: 系统中的内存总是两两分组,每组中的两个内存块称为伙伴 3,伙伴系统的原理: 伙伴系统是相对于struct zone而言,将每个zone的空闲内存分为最多11个数组,比如第一个数组里管理着2^0页的内存,所有 这些2^0的页以struct page的lru域的双向原创 2014-06-06 16:21:43 · 774 阅读 · 0 评论 -
[Linux内存]linux内存学习(四)——MMU
1,ARM MMUARM体系结构与编程第五章MMU的基本概念:系统通过MMU将物理地址映射成虚拟地址,最小单位为页,虚拟地址空间一个页对应物理地址的一个页框http://blog.csdn.net/gameit/article/details/13169515转载 2014-04-09 19:54:37 · 624 阅读 · 0 评论 -
[Linux内存]slab分配器学习笔记(一)--概念
http://blog.csdn.net/vanbreaker/article/details/76642961,为什么需要slab分配器: 利用伙伴系统进行分配内存只能按照页的单位进行分配,这样会造成很多的内存浪费,多了很多内存碎片,比如只需要申请10字节的,结果分配了一个页。 2,slab分配器和伙伴系统分配的差别 slab分配器是基于对象进行管理的,相同类型的对象归为一类转载 2014-06-16 17:39:23 · 1765 阅读 · 0 评论 -
[Linux内存]slub分配器学习笔记(一)--基本概念
slub分频器学习笔记slub分配器(一)---概述1,基本原理以及重要的数据结构struct kmem_cacheslub把内存分组管理,每个组分别包含2^3、2^4、...2^11个字节,在4K页大小的默认情况下,另外还有两个特殊的组,分别是96B和192B,共11组。每一个组都是用一个kmalloc_cache[]数组表示的。每个数组元素对应一种大小的内存,可以把一个km转载 2015-05-10 10:22:16 · 678 阅读 · 0 评论 -
[Linux内存]slab分配器学习笔记(三)--实现
1,分配对象cache_grow用于缓存的增长,它会从伙伴系统获取内存。其流程如图所示:2,释放对象:转载 2015-04-19 16:09:43 · 679 阅读 · 0 评论 -
[linux内存]系统启动过程中的内存管理
内核启动过程的内存管理1,memblock机制 kernel/arm/mm/memblock.c arm_memblock_init()函数 系统刚启动的时候不是所有的内存都是可以作为分配使用的,比如有些内存是默认给rootfs或者kernel使用的,memblock机制 作用就是决定哪些内存是可以分配的,哪些是默认已经被使用的。 涉及的三个主要API是memblock_ini原创 2014-06-04 19:53:05 · 1280 阅读 · 0 评论 -
linux页表pgd的含义
pgdPGD: Page Global DirectoryLinux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的。当创建一个新的进程时,都要为新进程创建一个新的页面目录PGD,并从内核的页面目录swapper_pg_dir中复制内核区间页面目录项至新建进程页面目录PGD的相应位置,具体过程如下:do_fork() --> cop原创 2015-07-18 15:23:40 · 8991 阅读 · 0 评论 -
linux android memory相关问题的一些debug方法
1,android的procrank命令 点击打开链接 procrank -h 命令2, linux的proc文件系统, 查看某个进程占用的内存时候用到的一些节点,· /proc//statm· /proc//maps· /proc//smaps查看系统的一些内存/proc/meminfo点击原创 2015-03-20 21:42:40 · 1451 阅读 · 0 评论 -
匿名内存
1,匿名内存的概念匿名内存是指那些在文件系统里没有相对应的”储备文件“的那些内存,堆和栈空间的内存都属于匿名内存。匿名内存的用途:当一个程序很久没有运行的时候,需要要将程序占用的堆 栈交换到swap分区,而程序打开的文件则不需要放到swap分区,因为打开的文件直接可以放到其文件系统,swap分区还包括堆栈中的一些状态和变量数据等2,A转载 2015-07-18 15:19:46 · 2922 阅读 · 0 评论 -
Linux Zram的概念
linux zram技术 zram就是在发生swap事件的时候,不要把置换的页面置换到外部存储中,直接置换到一块内存中压缩起来,这样发生swap事件的时候所花费的时间就是压缩和解压的时间,这样可以大大提高性能。ZRAM是以块设备的形式注册进内核的,在高通平台其文件路径是:LINUX/android/kernel/drivers/staging/zram/zram_drv.c转载 2015-07-18 15:08:19 · 2213 阅读 · 0 评论 -
[Linux内存]linux内存学习(三)——内存管理基础
1,linux内核内存管理linux内核设计与实现——内存管理linux内核中,内核把物理页作为内存管理的基本单元,处理器最小的寻址单位是字节,从虚拟内存角度看,页是最小单位。内核中使用struct page结构来表示每个物理页,系统中每个物理页都有这样的一个结构体。typedef struct page { struct list_head list; struct ad转载 2014-04-03 19:55:20 · 1393 阅读 · 0 评论 -
[linux内存]linux内存学习——常见问题
1,kmalloc()函数和vmalloc()函数的区别:kmalloc()函数分配的内存是物理上连续的,而Vmalloc()函数分配的内存仅仅是虚拟地址连续的,正常内核编程通常使用kmalloc(),这主要是处于性能的考虑,因为vmalloc()将物理不连续的页转换为虚拟地址空间上连续的页,必须专门建立页表项,vmalloc()仅仅在当需要使用大块的内存的时候才会使用,典型的如模块被动态插入原创 2014-06-03 16:07:49 · 808 阅读 · 0 评论 -
[Linux内存]linux内存学习(二)——分段和分页
一:内存分段和分页。点击打开链接每个用户空间的linux进程都有3G的地址空间,(虚拟地址空间3G-4G空间是linux内核使用的),用户空间看到的进程地址都是指虚拟地址空间,然后操作系统通过MMU再将虚拟地址映射到实际的物理地址。分段:就是将整个程序映射到linux内存的物理地址,假设有两个进程 A 和 B ,进程 A 所需内存大小为 10M ,其虚拟地址空间分布在 0x00原创 2014-04-02 20:08:34 · 681 阅读 · 0 评论 -
[linux内存]伙伴系统学习笔记(二)--内存系统初始化
1,本文大部分来自:http://blog.csdn.net/vanbreaker/article/details/76115852,在start_kernel()-->paging_init()-->zone_sizes_init()-->free_area_init_nodes()-->free_area_init_node()-->free_area_init_core()-->init原创 2014-06-06 17:40:38 · 899 阅读 · 0 评论 -
[linux内存]linux内存学习(一)
1,内存中各个地址范围的含义0-3G的地址范围:BSS段:存一些未被初始化的全局变量数据段:存已经被初始化的全局变量代码段:代码的可执行文件,一般为只读堆:maoolc()或者new()申请的段,给程序员使用,地址向高地址范围增长栈:函数参数等,由系统自动分配释放,地址向低地址范围增长mmap区间:3-4G的空间是内核空间,用户空间的代码不能访问到。原创 2014-02-25 09:51:38 · 765 阅读 · 0 评论 -
[linux内存]伙伴系统学习笔记(三)--分配器API
1,分配器APIhttp://blog.csdn.net/kickxxx/article/details/9287003原创 2014-06-09 20:33:11 · 536 阅读 · 0 评论 -
[Linux内存]vmalloc学习笔记
一:vmallochttp://www.360doc.com/content/14/0614/13/18127083_386524093.shtml1,vmalloc()的内核入口函数是kernel/mm/Vmalloc.c里的void *vmalloc(unsigned long size),size表示的是请求内核分配的字节数目。从以上代码可知,vmalloc()主要是从高端内原创 2014-06-14 14:05:31 · 805 阅读 · 0 评论 -
[Linux内存]永久内存映射kmap
一:kmap()和kunmap()函数永久内核映射允许内核建立高端页框到内核地址空间的长期映射。他使用主内核页表中一个专门的页表,其页表地址存放在pkmap_page_table中,页表包含512项或1024项,因此,内核一次最多访问2M或4M的高端内存(地址范围是 4G-8M 到 4G-4M 之间,这个地址空间起叫“内核永久映射空间”或者“永久内核映射空间”)。kmap()和kunm原创 2014-06-15 17:05:36 · 3490 阅读 · 0 评论 -
[Linux内存]内核内存debug相关
1,查看内存的基本情况通过/proc/meminfo可以看到2,原创 2014-06-14 11:56:54 · 459 阅读 · 0 评论 -
[Linux内存]linux内存学习(六)——slab分配器
Linux Slab分配器(一)--概述原创 2014-06-16 16:51:51 · 478 阅读 · 0 评论 -
[Linux内存]slab分配器学习笔记(二)--slab着色
slab着色原理原创 2014-06-16 19:46:31 · 1389 阅读 · 0 评论 -
[Linux内存]linux内存分配函数总结
1,linux内核内存分配函数总结单位接口算法动态大小kmalloc/kfree/krealloc/kcalloc 按大小组织的缓存数组固定大小kmem_cache_create/kmem_cache_destroykmem_cache_alloc/kmem_cache_freeSlab[2]2^n页alloc原创 2014-08-12 14:00:02 · 1301 阅读 · 0 评论 -
[Linux内存]——内核地址空间
1,为什么需要高端内存 答:对于32位机器,linux虚拟内存最大为4G,其中3-4G空间是用作内核空间,考虑到如果物理内存大于1G,那么物理内存不能得到完全的映射, 因此,Linux 规定“内核直接映射空间” 最多映射 896M 物理内存 ARM体系架构上没有高端内存的概念原创 2014-05-27 17:45:50 · 637 阅读 · 0 评论 -
[Linux内存]页缓存和块缓存
1, 内核为设备提供了两种通用的缓存方案:a, 页缓存(page cache)b, 块缓存2,内核管理页缓存所用的数据结构内核通过基数树(radix tree)来管理页缓存的,3,内核如何回写内存中修改的数据到物理设备a, 内核的守护进程在后台运行,为pdflush,这些守护进程周期性激活,b, pdflush的第二种运作模式是:如果缓存中修改的数据项目原创 2015-08-01 17:42:25 · 3534 阅读 · 0 评论