
linux-struct
wh8_2011
这个作者很懒,什么都没留下…
展开
-
基数树(radix tree)
基数(radix)树Linux基数树(radix tree)是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询,用于指针与整数值的映射(如:IDR机制)、内存管理等。IDR(ID Radix)机制是将对象的身份鉴别号整数值ID与对象指针建立关联表,完成从ID与指针之间的相互转换。IDR机制使用radix树状结构作为由id进行索引获取指针的稀疏数组,通过使用位图转载 2016-06-06 10:01:47 · 2714 阅读 · 0 评论 -
Linux内核部件分析 连通世界的list
在linux内核中,有一种通用的双向循环链表,构成了各种队列的基础。链表的结构定义和相关函数均在include/linux/list.h中,下面就来全面的介绍这一链表的各种API。struct list_head { struct list_head *next, *prev; }; 这是链表的元素结构。因为是循环链表,表头和表中节点都是这一结构。有prev和转载 2016-06-19 10:47:25 · 429 阅读 · 0 评论 -
Linux内核部件分析 记录生命周期的kref
kref是一个引用计数器,它被嵌套进其它的结构中,记录所嵌套结构的引用计数,并在计数清零时调用相应的清理函数。kref的原理和实现都非常简单,但要想用好却不容易,或者说kref被创建就是为了跟踪复杂情况下地结构引用销毁情况。所以这里先介绍kref的实现,再介绍其使用规则。kref的头文件在include/linux/kref.h,实现在lib/kref.c。闲话少说,上代码。s转载 2016-06-19 10:49:05 · 495 阅读 · 0 评论 -
Linux内核部件分析 更强的链表klist
前面我们说到过list_head,这是linux中通用的链表形式,双向循环链表,功能强大,实现简单优雅。可如果您认为list_head就是链表的极致,应该在linux链表界一统天下,那可就错了。据我所知,linux内核代码中至少还有两种链表能占有一席之地。一种就是hlist,一种就是本节要介绍的klist。虽然三者不同,但hlist和klist都可以看成是从list_head中发展出来的,用于特殊转载 2016-06-19 10:49:52 · 452 阅读 · 0 评论 -
Linux内核部件分析 设备驱动模型的基石kobject
之前我们分析了引用计数kref,总结了sysfs提供的API,并翻译了介绍kobject原理及用法的文档。应该说准备工作做得足够多,kobject的实现怎么都可以看懂了,甚至只需要总结下API就行了。可我还是决定把kobject的实现代码从头分析一遍。一是因为kobject的代码很重要,会在设备驱动模型代码中无数次被用到,如果不熟悉的话可以说是举步维艰。二是为了熟悉linux的编码风格,为以后分析转载 2016-06-19 10:50:51 · 1270 阅读 · 0 评论 -
linux内核中等待队列(wait_event,wake_up...)
根据内核3.1.6版本源码、书籍和网上资料,对几个函数进行分析 介绍这几个函数,不得不先介绍等待队列wait_queue_head_t 等待队列用于使得进程等待某一特定事件的发生,无需频繁的轮询,进程在等待周期中睡眠,当时间发生后由内核自动唤醒。等待队列 (一)数据结构 等待队列结构如下,因为每个等待队列都可以转载 2016-12-15 11:46:50 · 595 阅读 · 0 评论