
linux数据结构
taiyuanwuyin
这个作者很懒,什么都没留下…
展开
-
Linux利用list_head结构实现双向链表
通常实现双向链表的数据结构:struct list_node1{ struct list_node1 *next,*prev; type1 m1; type2 m2;};struct list_node2{ struct list_node2 *next,*prev; type1 m1; type2 m2;};……对于转载 2016-12-15 08:57:04 · 330 阅读 · 0 评论 -
linux内核部件分析(二)——原子性操作atomic_t
在任何处理器平台下,都会有一些原子性操作,供操作系统使用,我们这里只讲x86下面的。在单处理器情况下,每条指令的执行都是原子性的,但在多处理器情况下,只有那些单独的读操作或写操作才是原子性的。为了弥补这一缺点,x86提供了附加的lock前缀,使带lock前缀的读修改写指令也能原子性执行。带lock前缀的指令在操作时会锁住总线,使自身的执行即使在多处理器间也是原子性执行的。xchg指令不带lock前转载 2016-12-15 09:09:30 · 513 阅读 · 0 评论 -
linux内核部件分析(三)——记录生命周期的kref
kref是一个引用计数器,它被嵌套进其它的结构中,记录所嵌套结构的引用计数,并在计数清零时调用相应的清理函数。kref的原理和实现都非常简单,但要想用好却不容易,或者说kref被创建就是为了跟踪复杂情况下地结构引用销毁情况。所以这里先介绍kref的实现,再介绍其使用规则。 kref的头文件在include/Linux/kref.h,实现在lib/kref.c。闲话少说,上代码。转载 2016-12-15 09:17:53 · 362 阅读 · 0 评论 -
linux内核部件分析(四)——更强的链表klist
前面我们说到过list_head,这是Linux中通用的链表形式,双向循环链表,功能强大,实现简单优雅。可如果您认为list_head就是链表的极致,应该在linux链表界一统天下,那可就错了。据我所知,linux内核代码中至少还有两种链表能占有一席之地。一种就是hlist,一种就是本节要介绍的klist。虽然三者不同,但hlist和klist都可以看成是从list_head中发展出来的,用于特殊转载 2016-12-15 09:58:04 · 287 阅读 · 0 评论 -
C语言分层模式实现
今天给大家带来单片机、嵌入式中比较常用的一种程序设计方法--分层设计模式,内核中就大量采用这种设计方式,一般对于某种硬件体系分为几层,以一个核心层来管理,它会抽象出硬件或者个体的共性操作来进行管理,很像在用C语言实现面向对象的设计。下面就以实际代码来简单说明。假设我们有这么一种需求,需要从某些设备读取一些数据,但是这些设备可能有51体系的,也可能有arm体系的。那么我们应该抽象一个数据转载 2017-01-03 14:55:49 · 874 阅读 · 0 评论 -
linux内核中等待队列 (函数wait_event与wake_up)
根据内核3.1.6版本源码、书籍和网上资料,对几个函数进行分析 介绍这几个函数,不得不先介绍等待队列wait_queue_head_t与完成量completion。 等待队列用于使得进程等待某一特定事件的发生,无需频繁的轮询,进程在等待周期中睡眠,当时间发生后由内核自动唤醒。 完成量机制是基于等待队列的,内核利用该机制等待某一操作的结束。这两种经常被转载 2017-02-25 08:50:37 · 404 阅读 · 0 评论 -
linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析
http://blog.youkuaiyun.com/hepeng597/article/details/7721885一、_IO, _IOR, _IOW, _IOWR 宏的用法与解析在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4转载 2017-04-07 08:56:57 · 2670 阅读 · 0 评论 -
Linux内核中的等待队列--init_waitqueue_head等
http://blog.163.com/seven_7_one/blog/static/1626064122011311104741436/Linux内核中的等待队列 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这转载 2017-04-11 16:18:13 · 1672 阅读 · 0 评论 -
Linux中数组与结构体的快捷初始化
http://riverdream.blog.51cto.com/1559152/879043 Linux中数组与结构体的快捷初始化 最近看了linux内核的一点代码,感受颇深,现在就把数组和结构体初始化的部分简单的记录一下。那么怎么快捷方便的对数组和结构体进行初始化呢?一、数组快捷初始化 我们使用的方法有这么几种:转载 2017-08-31 08:43:42 · 343 阅读 · 0 评论