`
tomhibolu
  • 浏览: 1431457 次
文章分类
社区版块
存档分类
最新评论

kernel hacker修炼之道之内存管理-SLAB(撤销SLAB块slab_destroy())

 
阅读更多

撤销SLAB高速缓存slab_destroy() 作者:李万鹏 于北京 borqs


static void slab_destroy (kmem_cache_t *cachep, struct slab *slabp)
{
/*获得第一个对象的地址*/
void *addr = slabp->s_mem - slabp->colouroff;
#if DEBUG
int i;
for (i = 0; i < cachep->num; i++) {
void *objp = slabp->s_mem + cachep->objsize * i;

if (cachep->flags & SLAB_POISON) {
#ifdef CONFIG_DEBUG_PAGEALLOC
if ((cachep->objsize%PAGE_SIZE)==0 && OFF_SLAB(cachep))
kernel_map_pages(virt_to_page(objp), cachep->objsize/PAGE_SIZE,1);
else
check_poison_obj(cachep, objp);
#else
check_poison_obj(cachep, objp);
#endif
}
if (cachep->flags & SLAB_RED_ZONE) {
if (*dbg_redzone1(cachep, objp) != RED_INACTIVE)
slab_error(cachep, "start of a freed object "
"was overwritten");
if (*dbg_redzone2(cachep, objp) != RED_INACTIVE)
slab_error(cachep, "end of a freed object "
"was overwritten");
}
if (cachep->dtor && !(cachep->flags & SLAB_POISON))
(cachep->dtor)(objp+obj_dbghead(cachep), cachep, 0);
}
#else
/*在撤销slab块的时候调用析构函数,析构每一个对象,在新版本的kernel中,已经没有了析构函数,只有构造函数*/
if (cachep->dtor) {
int i;
for (i = 0; i < cachep->num; i++) {
void* objp = slabp->s_mem+cachep->objsize*i;
(cachep->dtor)(objp, cachep, 0);
}
}
#endif

if (unlikely(cachep->flags & SLAB_DESTROY_BY_RCU)) {
struct slab_rcu *slab_rcu;

slab_rcu = (struct slab_rcu *) slabp;
slab_rcu->cachep = cachep;
slab_rcu->addr = addr;
call_rcu(&slab_rcu->head, kmem_rcu_free);
} else {
/*释放给buddy system*/
kmem_freepages(cachep, addr);
/*如果是外置slab管理对象,则在那个cache中进行销毁*/
if (OFF_SLAB(cachep))
kmem_cache_free(cachep->slabp_cache, slabp);
}
}

分享到:
评论

相关推荐

    Linux常见驱动源码分析(kernel hacker修炼之道全集)--李万鹏

    Linux常见驱动源码分析(kernel hacker修炼之道)--李万鹏 李万鹏 IBM Linux Technology Center kernel team 驱动资料清单内容如下: Linux设备模型(中)之上层容器.pdf Linux设备模型(上)之底层模型.pdf Linux...

    常见驱动源码分析(kernel hacker修炼之道)-李万鹏

    这本书是“Linux kernel hacker修炼之道”的一部分,通过深入剖析各种常见的驱动源码,帮助读者提升在Linux系统中的驱动开发能力。 在Linux操作系统中,驱动程序是连接硬件与内核的桥梁,它们负责管理和控制硬件...

    常见驱动源码分析(kernel hacker修炼之道)

    《常见驱动源码分析(kernel hacker修炼之道)》这本书或课程很可能深入探讨了如何理解和编写这些驱动,旨在帮助开发者提升对Linux内核和驱动编程的理解。在这个过程中,我们将会涉及到几个关键的知识点: 1. **Linux...

    网鼎杯-第三场-杂项-track_hacker

    【网鼎杯-第三场-杂项-track_hacker】是一个典型的网络安全竞赛中的挑战,涉及到的是CTF(Capture The Flag)比赛中的杂项类别。在CTF比赛中,参赛者需要运用各种安全技能解决难题,获取“旗标”(代表分数或解题...

    linux kernel修炼之道

    如果刚刚对linux的kernel有兴趣,想了解点什么的话,请先看看此书吧,她风趣幽默的介绍了linux的发展趣事,让你开心快乐之余慢慢领会linux的魅力,让你了解学习掌握kernel的方法。其中的很多建议经过我的实践和摸索...

    Resource_Hacker_v5.1.6绿色版.zip

    资源 Hacker 是一款强大的Windows应用程序资源编辑工具,主要用于查看、修改、添加、删除以及替换应用程序中的资源,如图标、对话框、菜单、字符串表等。在本文中,我们将深入探讨Resource Hacker的功能、使用方法...

    Linux内核驱动笔记

    内存管理负责分配、回收内存资源,管理虚拟内存和物理内存的映射关系,并实现内存保护机制。 Linux内核支持多种文件系统,例如ext2、fat、isofs等。虚拟文件系统(VFS)是Linux内核中的一个重要概念,它为不同文件...

    BotnetWebSocket-master_chancexvw_hacker_websocket_botnet_sangerp

    【标题解析】:“BotnetWebSocket-master_chancexvw_hacker_websocket_botnet_sangerp”这个标题中的关键词“BotnetWebSocket-master”暗示了一个与僵尸网络(Botnet)相关的项目,特别是利用WebSocket协议的。...

    x64_processhacker_源码

    Process Hacker是一款开源、免费且功能强大的系统信息工具,它允许用户查看并管理正在运行的进程、服务、线程以及内存等系统资源。 【描述】"Process Hacker 1.1 PH1" 提示我们这是Process Hacker的早期版本,版本...

    leetcode和oj-Leet_Code-Hacker_Rank:Leet_Code-Hacker_Rank

    《LeetCode与Hacker Rank:在线编程挑战的宝库》 LeetCode和Hacker Rank是两个备受程序员喜爱的在线编程挑战平台,它们为提升技能、准备面试和了解最新技术趋势提供了丰富的资源。这两个平台不仅有助于巩固基础,还...

    HackerRank_2019-2018_Developer-Skills-Report.pdf

    这份标题为"HackerRank_2019-2018_Developer-Skills-Report.pdf"的报告,即HackerRank发布的2019-2018开发者技能报告,详细地探讨了开发者社区中的技术趋势和技能发展情况。根据描述,报告提出了React、物联网(IOT)...

    Resource_Hacker内存修改_v5.1.5.zip

    Resource Hacker是一款免费查看,修改,添加,删除和重命名,提取Windows可执行文件和资源文件的资源替换工具,Resource Hacker反编译工具是相当于eXeScope的反编译工具,并且有很多方面比eXeScope反编译还强的软件.

    1000_Hacker_Tutorials_2008.rar

    1000_Hacker_Tutorials_2008.rar

    Resource_Hacker_v4.7.34_Stable_Chs_WangSu

    Resource_Hacker_v4.7.34_Stable_Chs_WangSuResource_Hacker_v4.7.34_Stable_Chs_WangSu

    ResourceHacker_V3.5.2_XiaZaiBa.exe

    ResourceHacker_V3.5.2_XiaZaiBa.exe

    hacker成长之道

    有关hacker 的文章和资料分享给大家

    Hacker_Defender_ROOKIT.rar_hacker_木马_木马 扫描_木马扫描

    黑客,通常指的是那些利用技术手段非法入侵他人系统的人,而木马则是他们常用的工具之一。本文将围绕"黑客防御"这一主题,深入探讨木马的概念、特征以及如何进行有效的木马扫描。 木马(Trojan)是一种恶意软件,它...

    processhacker-2.39-bin

    4. **内存查看**:ProcessHacker提供了内存查看器,可以查看进程的内存映射、内存块信息,对于调试和分析程序运行状态非常有用。 5. **文件和注册表查找**:ProcessHacker能快速查找正在使用特定文件或注册表项的...

    exe图标修改器Resource_Hacker_v5.1.5

    《使用Resource Hacker修改EXE图标详解》 在计算机软件开发中,图标是用户界面的重要组成部分,它能够直观地展示程序的性质和功能。有时,我们可能会遇到一些已编译的.exe可执行文件,其默认图标可能不符合我们的...

Global site tag (gtag.js) - Google Analytics