人生像是在跑马拉松,能够完赛的都是不断地坚持向前迈进;人生就是像在跑马拉松,不断调整步伐,把握好分分秒秒;人生还是像在跑马拉松,能力决定了能跑短程、半程还是全程。人生其实就是一场马拉松,坚持不懈,珍惜时间。
发布时间:2017-06-18 15:57:06
缺页异常是很常见的现象,但是其来源有两种,一种是真实的异常,这是由于内存访问的地址未分配并未映射而产生的访问了非法地址的情况;另外一种是虚拟内存已经分配出去了,但是实际上的物理内存并未映射分配而产生的缺页异常。这里主要分析后者,这是与内存管理相关的,前者是代码逻辑的问题。根据惯例,先来了解一下.........【阅读全文】
发布时间:2017-05-14 00:26:48
前面分析了不连续页面管理的初始化以及申请的实现,最后以释放不连续页面空间vfree()收尾。【file:/mm/vmalloc.c】/** * vfree - release memory allocated by vmalloc() * @addr: memory base address * * Free t.........【阅读全文】
发布时间:2017-05-14 00:07:56
从前文分析来看,不连续页面管理的初始化较为简单,现在分析一下具体的分配实现。vmalloc内存申请函数入口为vmalloc():【file:/mm/vmalloc.c】/** * vmalloc - allocate virtually contiguous memory * @size: allocation size .........【阅读全文】
发布时间:2017-05-13 23:49:16
伙伴管理算法初衷是解决外部碎片问题,而slab算法则是用于解决内部碎片问题,但是内存使用的得不合理终究会产生碎片。碎片问题产生后,申请大块连续内存将可能持续失败,但是实际上内存的空闲空间却是足够的。这时候就引入了不连续页面管理算法,即我们常用的vmalloc申请分配的内存空间,它主要是用于将不连续的页面,通.........【阅读全文】
发布时间:2017-01-09 13:25:34
【注:往事不可追,也不知道是自己的编辑问题还是其他原因,整理博文的时候,发现有篇博文居然漏了,只好在此补上,该文延续《系统启动阶段的memblock算法(1)》的分析补充。难怪总觉得怪怪的,可愁死我这强迫症患者了,没法往回插入,只好作罢】 结束完memblock算法初始化前的准备工作,回到memblo.........【阅读全文】
发布时间:2017-01-09 08:46:38
分析完kmemleak实现后,照常实验一下,以确定功能正常。如kmemcheck一样,该功能需要在内核开启的情况下才能够使用。主要的配置项有:CONFIG_DEBUG_KERNEL、CONFIG_HAVE_DEBUG_KMEMLEAK、CONFIG_DEBUG_KMEMLEAK,以及配置信息记录条数的CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE,通常情况下配置数量的可以不必修改,但.........【阅读全文】
发布时间:2017-01-09 08:42:05
kmemleak的工作原理很简单,主要是对kmalloc()、vmalloc()、kmem_cache_alloc()等接口分配的内存地址空间进行跟踪,通过对其地址、空间大小、分配调用栈等信息添加到PRIO搜索树中进行管理。当有匹配的内存释放操作时,将会把跟踪的信息从kmemleak管理中移除。通过内存扫描(包括对保存的寄存器值),如果发现某块内存.........【阅读全文】
发布时间:2016-12-23 14:10:53
前面分析了kmemcheck的实现,那么现在就针对其功能进行试验,鉴于kmemcheck支持KMEMCHECK_SHADOW_UNALLOCATED、KMEMCHECK_SHADOW_UNINITIALIZED及KMEMCHECK_SHADOW_FREED的检测且检测上报信息大同小异,本文中的实验主要针对于未初始化的内存进行。如果需要使能kmemcheck,需要进行一系列的内核参数设置,具体的配置.........【阅读全文】
发布时间:2016-12-23 14:03:59
kmemcheck和kmemleak是linux在2.6.31版本开始对外提供的内核内存管理方面的两个检测工具,最初仅支持x86环境,时至今日已经能够支持arm环境了。其中kmemcheck主要是用于内核内存破坏检测,而kmemleak则是用于内核内存泄露检测。本文主要分析kmemcheck的实现,至于kmemleak下一篇文章再详细介绍。为什么要有kmemcheck.........【阅读全文】