内核使用的数据结构有双向链表,单向链表和hash链表。另外,基树和红黑树也是内核使用的数据结构。实际上,这也是程序代码中通常使用的数据结构,一些偏僻难的数据结构并不常见。
1. container
container是linux很重要的一个概念。有了container方法,才能实现对对象的封装。
分析一下container方法。
======================================================================
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
这个方法巧妙的实现了通过结构的一个成员指针找到整个结构的地址。有了container方法,list才
成为了一个通用的数据结构,通过container方法,还可以实现内核的封装,程序之间不暴露
内部的数据。