linux内核_双链表的_用户态下

双链表
1. 机制与策略分离的现状
机制与策略分离是在对具体场景来说的,比如操作系统对于硬件来说,提供了具体实现方法(策略);对于应用程序来说,提供了功能(机制)。
(1) 编写应用程序时按照库的方式进行,其中包含了很多C程序,而控制流程则使用脚本编写。
(2) 应用程序的编写实现机制与策略分离,前端实现策略,后端实现机制,这样的设计方法可以较低复杂度。
2. 双向链表的设计思想分析
在这里插入图片描述
3. 对list_add函数进行拆解,并在在用户态下应用
在这里插入图片描述对此插入函数进行拆解,其调用了一个函数,再进入__list_add中查看,
在这里插入图片描述

发现除了普通的插入时所需指针关系调整之外,还有一个WRITE_ONCE函数,再进入此函数查看,此函数不在list.h中,在compiler.h中,
在这里插入图片描述
这个宏定义了一个联合体,直接将要赋值的值读进来,再使用了__write_once_size函数,再进入此函数查看,
在这里插入图片描述

这个函数中,赋值变量的指针变成了指向volatile变量的指针,volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错。那么也就是说WRITE_ONCE宏主要用于向变量对应的内存写入值。如此再回到__list_add函数中,那么是实现了把new对应的内存写入pre->next中。

如下是在用户态下写了myDoubleList.h文件:
在这里插入图片描述
4. 双向链表的应用(学生信息的存储和遍历)
在这里插入图片描述
在这里插入图片描述
调试结果:
在这里插入图片描述

5. 启发
内核模块中的函数设计得很巧妙,他把指针和存储数据区分开来,增删查改都是如此,不只是简单的存储修改,还有一些对变量的约束和优化,往后对linux内核源码还要多多研究和体会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值