Linux内核的链表数据结构

linux内核实现了自己的链表数据结构,它的设计与传统的方式不同,非常巧妙也很通用。
我们先看一下传统的定义
struct xxx{ void * p; struct xxx * next,* prev;}这种方式将数据和链表指针定义在一起,整个链表也是通过整个结构体连接起来的。 这种链表不具有通用性,换一个不同的结构体需要重新定义。
内核使用了不同的方式,它把链表的指针抽象出来,独立定义。
struct list_head{ struct list_head *next, *prev;};使用的时候嵌入到结构体中即可。
这种方式将数据和链表剥离开来,去除了链表和数据的耦合,这样就可以定义统一的接口,使得链表的管理和操作变得非常简洁。
内核在
大家发现一个问题没有,我们如何获得链表所在结构体其他数据呢?
内核使用container_of()函数实现,这个函数能够通过结构体内部成员的地址找到结构体本身的地址,这样就可以通过链表的地址得到数据结构体的地址,然后就可以获得其他数据了。 这些在链表的操作方法中都已经实现了。
链表在内核中非常重要,比如所有进程就是通过链表管理,进程的子进程、兄弟进程也是链表管理,这些在进程描述符中都可以看到。
一个结构中可以包含多个不同的链表节点,分别从属于不同的链表,构成一个错综复杂的网络结构。
小结:

韩华利用Quanergy激光雷达的实时3D数据来优化安防业务运营
一文了解电位器的常见分类与使用注意事项
元宇宙智慧景区为游客提供更加沉浸式和个性化的旅游体验
温度指示器电路图分享
OPPO Pad 2 发布:首创7:5平板黄金比例,平板好屏新标杆
Linux内核的链表数据结构
汉思化学芯片底部填充胶定制服务力挺智能家居硬件厂商研发创新
采用台式万用表实现温度测量系统的应用设计
工业物联网加速项目落地的应用途径是什么
信通院积极参与R16标准制定
美日共同研发新一代F-22战机,或将开放F-22战机技术?
光伏逆变器和储能逆变器区别
微波组件中的薄膜陶瓷电路板
英特尔cpu爆惊天漏洞_英特尔cpu漏洞检测_英特尔cpu检测工具有哪些
怎样使用FHE实现加密大语言模型?
手持万用表使用口诀
浅谈激光焊接设备
Databend v1.0 Release 正式发布
宽带GaN功率放大器AM07512042MD-3H介绍
使用UM66T旋律发​​生器构建一个简单的音乐门铃