https://blog.csdn.net/zhangskd/article/details/11225301 在看ip_acct.c相关代码时看到大量使用了 hlist_nulls_for_each_entry 和 hlist_nulls_add_head,很疑惑为啥搜索nulls??原来是种特殊 ...
分类:
系统相关 时间:
2019-04-16 21:40:41
阅读次数:
199
hlist_head 和list_head在内核中常用于hashtable,分别表示表头和表头所在的双向链表中的某项。 两者的结构如下: 其内存结构如下: Hash table 为散列表数组,数组中保存着struct hlist_head.以hlist_head为链表表头的链表。 ...
分类:
系统相关 时间:
2018-08-10 21:21:15
阅读次数:
420
1、前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理完,则A要延迟 ...
分类:
系统相关 时间:
2018-02-25 13:18:51
阅读次数:
254
1、前言 最近写代码需用到链表结构,正好公共库有关于链表的。第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域。后来看代码注释发现该代码来自linux内核,在linux源代码下include/Lish.h下。这个链表具备通用性,使用非常方便。只需要在结构定义一个 ...
分类:
系统相关 时间:
2018-02-25 13:18:09
阅读次数:
222
与经典双向链表比较 经典双向链表如图。其中有一个pre指针和一个next指针,数据是在链表的节点内。 内核链表如图。每一个链表节点内只有一个pre指针和一个next指针,整个链表节点嵌入到了一个需要使用链表的结构体内。 内核链表介绍 内核链表节点结构体定义如图。其中next指针指向下一个链表节点,p ...
分类:
系统相关 时间:
2017-05-30 20:57:28
阅读次数:
261
1 #include 2 #include 3 4 #define MAX_PRIO 10000 5 #define BITS_PER_LONG 32 6 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) 7 8 #define BIT(nr) (1... ...
分类:
系统相关 时间:
2017-02-06 14:37:57
阅读次数:
626
Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到。我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为广泛的数据结构,具体你可以 查看 这里。 首先让我们看一下主要的结构体: struct list_h ...
分类:
系统相关 时间:
2016-12-16 19:23:50
阅读次数:
349
Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到。我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为广泛的数据结构,具体你可以 查看 这里。首先让我们看一下主要的结构体: struct list_he ...
分类:
系统相关 时间:
2016-12-16 19:13:38
阅读次数:
253
首先我先回顾一下二叉树
然后回顾一下二叉搜索树
下面是重头戏
自平衡二叉搜索树满足二叉搜索树的条件。即每个节点左边的节点值都要比自己小,然后满足平衡,即树(包括子树)的末尾节点深度相差小于1,这样的树称为平衡二叉搜索树
最后红黑树...
分类:
系统相关 时间:
2016-05-12 22:16:28
阅读次数:
174