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

相关推荐

  • okr管理软件哪个较好

    okr管理软件有:一、Worktile;二、PingCode;三、Vision;四、Zokri。Worktile 是国内较早也是非常成熟的OKR工具。Worktile 覆盖了OKR设定、展示、更新、评分的完整周期管理,并且目标还能与具体项目/任务关联,它能够追踪公司级、部门级、个人级目标的进度,帮助…

    2023年3月31日
    47800
  • c#.netcore相比javaspring区别是什么

    c#.netcore相比javaspring区别是:1、Java前景好;2、Java生态好;3、Java框架多。现在大厂不招NET,好的互联网公司不用NET。主要的原因是还是JAVA的生态好,NET CORE 在国内被互联网有接受程序还是低的,一开始就是JAVA就会一直都是JAVA,而不是招什么NE…

    2023年1月30日
    56900
  • UniApp音视频通话功能的性能优化技巧

    UniApp音视频通话功能的性能优化技巧集中在:1、实现高效音视频编解码技术、2、网络连接与传输的稳定性提升、3、优化数据包的处理流程、4、界面渲染与交互的流畅性优化、5、能耗控制与资源管理。其中,实现高效音视频编解码技术涉及选择合适的编解码器,例如使用H.264或H.265视频编码技术加上Opus…

    2023年12月22日
    17100
  • 怎么做甘特图

    做甘特图的步骤:1、准备数据;2、插入图表;3、选择数据;4、调整图表。准备数据是指,将普通的项目计划表制作成甘特图,则需要准备任务名称、开始时间、任务天数、日期的最大值、最小值、差值和主要刻度线单位等数据。 1、准备数据 使用WPS Office新建或打开Excel表格,根据需要准备好需要的数据。…

    2023年2月9日
    65100
  • 研发部门管理系统

    研发部门管理系统关键在于有效协作、技术创新、项目管控及知识管理。其中,技术创新扮演关键角色,鼓励原创思维,确保公司在市场中具备竞争优势。数码时代下,研发部门管理系统要搭建一套集项目管理、资源配置、效率分析等功能为一体的数字化平台,以保障研发过程的高效和有序。技术创新涵盖激励机制的设置、前沿技术的跟进…

    2024年1月9日
    12400
  • 计时工具有哪些

    计时工具有:1、番茄计时器;2、间隔计时器;3、倒数日;4、学习计时器;5、计时器timer;6、裕天秒表计时器;7、循环计时器;8、计时器小帮手。番茄计时器是指,时间管理软件,能够帮助用户进行时间规划,利用碎片时间。 1、番茄计时器 番茄计时器是时间管理软件,能够帮助用户进行时间规划,将碎片时间利…

    2023年2月6日
    93100
  • 如何编制项目进度计划

    编制项目进度计划的方法有:一、关键路径法;二、资源平衡法;三、进度压缩法。关键路径法是指在不考虑资源限制和时间强度的情况下,编制出理论上可行的进度计划。首先从项目起点出发,沿网络图各条路径进行顺时针推算。 一、关键路径法 关键路径法是指在不考虑资源限制和时间强度的情况下,编制出理论上可行的进度计划。…

    2023年3月30日
    48700
  • DevOps中的自动化合并请求流程

    自动化合并请求流程在DevOps实践中是提高软件开发生命周期效率的一个关键步骤。它允许开发者快速集成和部署代码更改,同时减少错误和冲突的可能性。1) 定义合并规则和检查、2) 设置自动化测试、3) 自动化部署、4) 提高反馈速度这四个方面构成了有效自动化合并请求流程的核心。在设置自动化测试上,它确保…

    2024年1月4日
    8900
  • 效能平台是什么

    效能平台是一种集成了多种工具和技术的软件系统,可以帮助企业和组织提高生产力和效率。它可以自动化和优化企业的各种业务流程,从而提高工作效率和减少人力成本。此外,它还可以提供一系列协作工具和数据分析工具,帮助企业更加高效地管理业务流程。 效能平台是一种集成了多种工具和技术的软件系统,可以帮助企业和组织提…

    2023年2月27日
    77700
  • 项目实施进度怎么写

    项目实施进度的写法:1、确定项目优先级;2、设定里程碑;3、包含重要更新;4、整理您的内容;5、添加详细说明;6、审查以使其清晰;7、更新目标;8、改进。确定项目优先级是指,在开始写作之前查看项目的主要目标,并探索进度如何与它们保持一致。 1、确定项目优先级 在开始写作之前,请查看项目的主要目标,并…

    2023年2月24日
    72500

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部