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, ZLW的头像Z, ZLW
上一篇 2023年1月3日 下午3:33
下一篇 2023年1月3日 下午4:17

相关推荐

  • 开源文档协作工具:2024年10款评测

    国内外主流的10款开源文档协作平台对比:PingCode、Worktile、蚂蚁笔记(Leanote)、Wizard、Kooteam、ShowDoc、MrDoc、DooTask、语雀、WookTeam 。 在今天的数字化时代,寻找一个能够提高团队合作效率并确保信息共享流畅的解决方案,成了许多企业和个…

    2024年8月5日
    700
  • 企业如何智选知识管理工具?2024年8大精选

    本文将分享2024年8大优质企业知识管理工具:PingCode、Worktile、飞书文档、语雀、石墨文档、有道云笔记、Confluence、Document360。 很多公司都面临信息过载,难以将散落各处的知识有效整合和应用。这不仅影响决策效率,还可能导致重要信息的丢失。为了解决这一痛点,企业知识…

    2024年8月5日
    300
  • 产品经理秘籍:2024年9大主流需求管理工具

    本文将分享9款产品经理使用的主流需求管理工具:PingCode、Worktile、Tapd、禅道、Teambition、Testin、JIRA、Jama Connect、Wrike。 挑选一个能够高效精准地捕捉和管理需求的工具,对于推动项目成功至关重要,很多产品经理都面临着如何从众多选项中选择最适合…

    2024年8月5日
    400
  • 选择客户管理crm系统必看:全球15家顶级供应商综合比较

    对比的客户管理CRM系统包括:纷享销客、Zoho CRM、销售易、用友CRM、Salesforce、Microsoft Dynamics 365、销帮帮CRM、HubSpot、Oracle CRM、悟空CRM、神州云动CRM、红圈CRM、SAP CRM、Odoo、OroCRM。 一个合适的CRM系统…

    2024年8月5日
    800
  • 项目竣工资料管理软件有哪些

    项目竣工资料管理软件有许多,其中最为出色的要数PingCode和Worktile。这两款软件以其优秀的性能和功能,赢得了用户的青睐。简单来说,PingCode是一款专门为开发者设计的协作平台,强调代码质量、团队协作和敏捷开发。而Worktile则是一款面向企业的项目和任务管理工具,帮助团队更好地协作…

    2024年8月5日
    300

发表回复

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

400-800-1024

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

分享本页
返回顶部