Linux内核中的队列链表代表什么意思

Linux内核中的队列链表代表什么意思,第1张

*** 作系统内核, 如同其他程序, 常常需要维护数据结构列表. 有时, Linux 内核已经同时有几个列表实现. 为减少复制代码的数量, 内核开发者已经创建了一个标准环形的, 双链表鼓励需要 *** 作列表的人使用这个设施.

当使用链表接口时, 你应当一直记住列表函数不做加锁. 如果你的驱动可能试图对同一个列表并发 *** 作, 你有责任实现一个加锁方案. 可选项( 破坏的列表结构, 数据丢失, 内核崩溃) 肯定是难以诊断的.

为使用列表机制, 你的驱动必须包含文件 <linux/list.h>. 这个文件定义了一个简单的类型 list_head 结构:

struct list_head { struct list_head *next, *prev}

真实代码中使用的链表几乎是不变地由几个结构类型组成, 每一个描述一个链表中的入口项. 为在你的代码中使用 Linux 列表, 你只需要嵌入一个 list_head 在构成这个链表的结构里面. 假设, 如果你的驱动维护一个列表, 它的声明可能看起来象这样:

list_del

只是简单的调用__list_del函数。然后将prev、next指针分别被设为LIST_POSITION2和LIST_POSITION1两个特殊值,对LIST_POSITION1和LIST_POSITION2的访问都将引起页故障,它属于不安全的删除。

list_del_init属于安全删除

单链表

双链表

循环链表

详细请看 深入分析 Linux 内核链表

http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7255178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存