共 22 篇文章 |
|
kmemleak kmemleak 分析 1:检测内核内存泄漏的功能2:Documentation/kmemleak.txt3:内核demo:mm/kmemleak-test.c对于kmemleak,需要理解下面三点就可以了1:我们需要知道它能检测哪几种内存泄漏(即用什么方法分配的内存可以检测)2:内核存在特殊情况,即分配内存但没有引用。关注点2kmemleak_not_leak、kmemleak_ignore、kmemleak_no_sca... 阅8 转自waston 公众公开 13-05-11 23:38 |
get_cpu_slab负责取得CPU的私有kmem缓冲get_cpu_slab在mm/slub.c中,代码如下。还是来到slab_alloc中,这个时候c->freelist为NULL,进入到__slab_alloc中由于这个时候CPU的私有kmem缓冲中的页面并不为空,但是页面的freelist指针为空,所以会执行if (unlikely(!object))//为空则使用别的goto another_slab;跳转到标号another_slab处执行标号anoth... 阅3 转自waston 公众公开 13-05-11 23:37 |
Page cache和buffer cache的区别与联系。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存... 阅156 转0 评0 公众公开 13-05-09 10:01 |
嵌入式系统中内存管理方法。内存管理在嵌入式系统中是一个比较重要的问题,如果处理不好内存资源的管理,那么系统的鲁棒性将会大大降低,更严重的话系统将会无法正常运行。目前,最有效的内存管理方法是虚拟内存技术,通过虚拟内存技术可以将逻辑内存和物理内存分开,程序运行在逻辑内存空间,对于每个任务而言都能看到一个很大的内存空间,逻... 阅506 转2 评0 公众公开 13-05-09 09:55 |
Linux内存管理之页面回收。函数 try_to_unmap() 分别调用了两个函数 try_to_unmap_anon() 和 try_to_unmap_file(),其目的都是检查并确定都有哪些页表项引用了同一个物理页面,但是,由于匿名页面和文件映射页面分别采用了不同的数据结构,所以二者采用了不同的方法。函数 try_to_unmap_anon() 用于匿名页面,该函数扫描相应的 anon_vma 表中包... 阅364 转3 评0 公众公开 13-04-15 12:39 |
关于slab管理对象的整体框架以及slab管理对象与对象、页面之间的联系在前面的slab创建一文中已经总结的很清楚了。Slab cache中存放的是相同大小的对象,如果没有着色区,那么同一个cache内,不同slab中具有相同slab内部偏移的对象,其低地址的若干位是相同的,映射到同一个cache line。着色貌似很好的解决了问题,实质不然,当slab数目不多时,... 阅551 转1 评0 公众公开 13-04-15 12:38 |
#endif /*起始页面帧号,指出该节点在全局mem_map中 的偏移*/ unsigned long node_start_pfn; unsigned long node_present_pages; /* total number of physical pages */ unsigned long node_spanned_pages; /* total size of physical page range, including holes */ /*节点编号*/ ... 阅375 转3 评0 公众公开 13-04-15 09:51 |
linux内存管理概述。linux内存管理建立在基本的分页机制基础上,在linux内核中RAM的某些部分将会永久的分配给内核,并用来存放内核代码以及静态内核数据结构。linux中采用了很多有效的管理方法,包括页表管理、高端内存(临时映射区、固定映射区、永久映射区、非连续内存区)管理、为减小外部碎片的伙伴系统、为减小内部碎片的slab机制、伙伴系... 阅130 转5 评0 公众公开 13-04-15 09:31 |
(vma && vma->vm_end > addr && vma->vm_start <= addr)) { //Starts at the root of the tree./*创建并初始化一个新的线性地址区间, 不过,分配成功之后,可以把这个新的先行区间 与已有的其他线性区进行合并; file和offset:如果新的线性区将把一个文件映射到内存 则使用文件描述符指针file和文件偏移量offset ... 阅309 转4 评0 公众公开 13-04-15 00:11 |
Linux进程在内核中是由task_struct进程描述符实现的,task_struct的mm字段指向内存描述符mm_struct,他是进程的一个内存执行摘要。每个虚拟内存区域(VMA)是一个虚拟地址空间上连续的区域;虚拟内存没有存储任何东西,他只是简单的映射一个程序的地址空间到相关的物理内存,这一大块物理内存叫做物理地址空间。当找到一个VMA,内核必须查看PTE... 阅532 转5 评0 公众公开 13-04-14 23:24 |