把你的心、我的心、串一串串一株幸运草、串一个同心圆 - Love
2016,又是新的一年,新的起点。嗯嗯,最近文章产量不多,因为在公司帮助同事在调试某某驱动。刚开始三天的时候用他们给的代码,进展不大。后三天我一怒之下,重新把代码梳理并且修改了一遍,然后问题解决了。这里有一个心得(其实好几次想说),与其步履维艰的去按照他们的代码风格去调试,不如彻底打破,按照解决问题的流程重新写一遍(你懂的)。
下面我继续Go … Kernel. 总结完此处内核进程的一些基本用法和概念可以告一段落了,之后就去研究具体的进程调度。嗯嗯,就这。
一、双向链表在内核中的运用
传统的双向链表即表示链表有双头,双连表的好处在于不管是插入亦或是查找,其算法复杂度明显比单链表要优化很多,但是双连表由于其本身的复杂性,故而很多程序员都是避而不见,或者视而不见!
但是在这里我们必须将此重新掌握!
还记得链表的定义吗? 有指针域,数据域。
双连表有两个指针域,即直接前驱,直接后继!
1、list_head 结构
struct list_head {
struct list_head *next, *prev;
};
字段next 和 prev 分别表示通用双向链表向前和向后的指针元素!list_head字段的指针中存放的是另一个list_head字段的元素,而不是本身的数据结构地址。如图