百色金融新闻网
您的位置:百色金融新闻网 > 经济新闻 > 深入理解linux内核架构_深入分析linux内核源代码

深入理解linux内核架构_深入分析linux内核源代码

作者:百色金融新闻网日期:

返回目录:经济新闻

前戏

本文我们来讲讲内核链表,很久之前当我第一次看到内核通用链表的时候,我被精简的代码,巧妙的思路惊呆了。人世间还有此等巧妙之物(原谅我的夸张),只有前驱和后继指针,而没有数据域(当时觉得很奇怪)。内核通用链表,在linux源代码下include/Lish.h下,具备通用性,使用非常方便。只需要在结构定义一个链表结构就可以使用。好了,我们好好的了解下吧。

常用链表介绍

我们都知道链表是最基础的数据结构,通常可以分为,单链表,双链表;还可以分为单向链表和循环链表。通常我们的链表定义是这样子的:

深入浅出分析Linux内核链表(图解)

链表节点中包含数据域(data)和指针域(next)。链表通常包含一个头结点,不存放数据,方便链表操作。单向的链表结构如下图:

深入浅出分析Linux内核链表(图解)

双向循环链表结构如下图所示:

深入浅出分析Linux内核链表(图解)

这样数据域和指针域在一起的结构为什么不好?其实这样结构降低了链表的通用性了,扩展性太差,按照上图例子,只能存储的是特定的数据类型。

内核通用链表

那我们看看内核链表是怎么做的。首先我们看下结构定义如下图:

深入浅出分析Linux内核链表(图解)

看个直观的图:

深入浅出分析Linux内核链表(图解)

那怎么使用这个链表呢?

只需要在结构体中定义一个链表类型(一定要放在最下方)的数据即可。例如定义一个data_info链表:

深入浅出分析Linux内核链表(图解)

定义一个data_info链表,data_info data_info_list;

通过data_info_head进行链表操作。通过container_of和offsetof,可以根据data_info_head的地址找出data_info的起始地址。为了方便大家理解,下图展示了链表的整体结构图

深入浅出分析Linux内核链表(图解)

好了,本文就到这里,感谢大家的支持,我们下期见!

喜欢我的文章的话,就关注我吧!在本头条号的置顶文章中有【文章分类】包含:

[C++进阶篇系列]

[高级网络编程篇系列]

[Linux系统篇系列]

[C++基础知识篇]

[协议篇系列]

[数据结构和算法系列]

[设计模式系列]

不要只收藏和转发哦,都是本人的血汗制作。

相关阅读

  • 给爱情上保险,靠谱吗?-爱情保险

  • 百色金融新闻网理财保险
  • 爱情保险,光棍节来临,“爱情保险”受追捧,这靠谱吗?所谓的“爱情保险”大多是以“主险(不测险)+多种附加险(婚礼上赠予玫瑰花/钻石/礼金等)”保单设计模式推出,在互联
  • 电子商务是干什么的?-什么是电子商务

  • 百色金融新闻网金融新闻
  • 什么是电子商务,说起电子商务的兴起,或多或少跟“马爸爸”马云有关系,他发家致富的传奇可谓推进了电子商务行业的发展。但很多人单纯地认为电子商务就是淘宝,就是天猫,或者
关键词不能为空

经济新闻_金融新闻_财经要闻_理财投资_理财保险_百色金融新闻网