linux 驱动 哪些链表

linux 驱动的链表:1、双向循环链表 list_head;2、哈希链表 hlist;3、无锁链表llist;4、降序优先排序的双向链表 plist。其中,双向循环链表 list_head存在于include/linux/list.h文件中,双向循环链表是将双向链表的头结点和尾结点链接起来的链表。

linux 驱动 哪些链表-Worktile社区

1、双向循环链表 list_head

双向链表指的是构成链表的每个结点中设立两个指针域:一个指向其直接前驱的指针域prev,一个指向其直接后继的指针域next。这样形成的链表中有两个方向不同的链,故称为双向链表。双向循环链表将双向链表的头结点和尾结点链接起来也能构成循环链表,其称为双向循环链表。

相关文件:include/linux/list.h

数据结构:

struct list_head {
	struct list_head *next, *prev;
};

接口:

static inline void INIT_LIST_HEAD(struct list_head *list);
static inline void list_add(struct list_head *new, struct list_head *head);
static inline void list_del(struct list_head *entry);

2、哈希链表 hlist

Linux链表设计者认为双指针表头双循环链表对于HASH表来说过于浪费,因而另行设计了一套用于HASH表的hlist数据结构,即单指针表头双循环链表。hlist表头仅有一个指向首节点的指针,而没有指向尾节点的指针,这样在海量的HASH表中存储的表头就能减少一半的空间消耗。

相关文件:include/linux/list.h;include/linux/hashtable.h

数据结构:

struct hlist_head {
	struct hlist_node *first;
};
 
struct hlist_node {
	struct hlist_node *next, **pprev;
};

接口:

static inline void hlist_del(struct hlist_node *n);
static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h);
hlist_for_each_entry(pos, head, member)

3、无锁链表llist

无锁链表是一种单向链表。单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点。

相关文件:lib/llist.c

定义:

struct llist_head {
	struct llist_node *first;
};
 
struct llist_node {
	struct llist_node *next;
};

4、降序优先排序的双向链表 plist

plist是由两个双向循环链表形成的具备优先级的双向链表。其中每个节点的plist_node按prio值重小(优先级较高)到大(优先级最小)以node_list排序形成链表,prio值相同的节点按先插入在前的顺序;不同prio值的节点又按小到大的顺序以prio_list排序形成链表。其中prio值相同的节点,仅较早插入链表的节点被链接到prio_list中,其余节点prio_list为空。

相关文件:include/linux/plist.h;lib/plist.c

数据结构:

struct plist_head {
	struct list_head node_list;
};
 
struct plist_node {
	int			prio;
	struct list_head	prio_list;
	struct list_head	node_list;
};

接口:

static inline void plist_head_init(struct plist_head *head);
static inline void plist_node_init(struct plist_node *node, int prio);
void plist_add(struct plist_node *node, struct plist_head *head);
void plist_del(struct plist_node *node, struct plist_head *head);

延伸阅读

linux 组成

  1. 进程管理(process management)
  2. 定时器(timer)
  3. 中断管理(interrupt management)
  4. 内存管理(memory management)
  5. 模块管理(module management)
  6. 虚拟文件系统接口(VFS layer)
  7. 文件系统(file system)
  8. 设备驱动程序(device driver)
  9. 进程间通信(inter-process communication)
  10. 网络管理(network management)
  11. 系统启动(system init)等操作系统功能的实现

文章标题:linux 驱动 哪些链表,发布者:Z, ZLW,转载请注明出处:https://worktile.com/kb/p/34109

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Z, ZLWZ, ZLW认证作者
上一篇 2023年1月3日 下午3:33
下一篇 2023年1月3日 下午4:17

相关推荐

  • 大学编程需要考什么证书

    大学在编程学习方面的认证主要涉及1、计算机语言能力证书;2、专业技术认证。特别是计算机语言能力证书,这个认证证明了学生对某一种或多种编程语言的掌握程度,对于求职或进一步深造都具有相当的重要性。这类证书既可以是由权威机构颁发的,如Java、Python认证,也可以是通过完成特定的项目或课程获得的。它为…

    2024年4月27日
    2900
  • 编程员要报什么专业

    计算机科学与技术、软件工程、信息技术、计算机工程 是编程员理应考虑报考的几个主要专业。 在计算机科学与技术方面,它为学生提供了深入了解编程语言、数据结构、算法设计等核心课程的机会。这一专业注重理论与实践相结合,帮助学生建立坚实的编程基础,并能够应对各类复杂的计算问题。 一、COMPUTER SCIE…

    2024年4月27日
    4000
  • 编程人员都是什么学历的

    在当今的技术行业中,编程人员拥有多样的学历背景。一些程序员具备计算机科学或相关领域如软件工程的学士、硕士乃至博士学位。这些正规学历为他们提供了深厚的理论知识和系统性的编程训练。然而,随着编程技能需求的广泛化,许多人通过自学、在线课程、编程训练营和专业证书来掌握编程技能。通过这些途径获得的实践技能同样…

    2024年4月27日
    3700
  • 十一岁学什么编程

    对于11岁的孩子来说,学习编程的最佳选择包括:1、Python;2、Scratch;3、JavaScript。在这些选项中, Python 因其简单的语法和广泛的应用领域而显得尤为重要。Python不仅是初学者入门编程的绝佳选择,也是目前世界上最受欢迎的编程语言之一。它拥有清晰、易读的代码风格,使得…

    2024年4月27日
    5000
  • 什么是数据挖掘

    数据挖掘非常类似于采矿者筛选泥土以寻找金块的方法,这是筛选大量数据以查找可用于特定用途的相关信息的过程。作为计算机科学的一个分支学科,数据挖掘在本质上完全与模式相关。

    2022年11月6日
    41600
  • 编程电缆是什么

    编程电缆是一种用于将计算机和电子设备连接起来进行通信和数据传输的接口电缆。该电缆的核心作用是实现设备间的程序下载、参数配置和数据交换。特别是在嵌入式系统或工业自动化领域中,编程电缆不仅提供了物理连接,还往往包含了转换电路,用于适配不同设备间的信号电平,确保数据能够正确无误地传输。 一个典型的例子是U…

    2024年4月26日
    3800
  • 编程猫少儿编程学什么

    少儿编程通过编程猫学习可以获得多方面的技能,主要包括1、逻辑思维能力 2、编程基础 3、项目构建 4、创新实践。具体来说,逻辑思维能力是所有编程学习中最为核心的部分。通过解决编程问题,孩子们能够学会如何分析问题、拆解问题,并逐步构思出解决方案。这种思维训练对于孩子未来无论是学习还是生活中的问题解决都…

    2024年5月1日
    2900
  • 手机什么网站可以编程软件

    手机上可以使用的编程软件主要有CodeAnywhere、AIDE、DCoder、Termux和Pythonista。它们各自拥有不同的特点和功能,例如CodeAnywhere提供了云端代码编辑器的功能,支持跨平台同步;而AIDE和DCoder则更适合Android设备上的Java和C++编程;Ter…

    2024年4月27日
    5400
  • 编程键盘用什么

    编程键盘的选择对程序员来说至关重要,通常依据 1、键盘类型 、2、键盘布局 、3、键盘材质 、4、附加功能。针对键盘类型,可谓是挑选编程键盘的首要考虑因素。机械键盘因其出色的敲击手感和响应速度成为了许多程序员的首选。其独特的机械轴设计,不仅能够提供稳定的敲击反馈,还能大幅减少打字疲劳,极大地提高编程…

    2024年5月2日
    3200
  • 服务管理是什么

    服务管理是面临服务竞争社会而产生的一种新的管理模式。它虽然已经历长达30多年的研究过程,虽然在产生的必要性及其概念,特征和一些理论探讨方面取得了众多研究成果,但是至今尚未形成完整的学科体系。

    2022年11月6日
    73200

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部