24 内核开发- Linux 内核各种设计模式

24 内核开发- Linux 内核各种设计模式

Linux 内核中使用了各种设计模式来组织和结构其庞大的代码库。以下是 Linux 内核中的一些常见设计模式:

1. 单例模式:

 模块: init 模块
 目的: 初始化内核并创建第一个进程 (init_task)
 实现: init_task 是一个单例对象,通过 &init_task 全局变量访问

2. 工厂模式:

 模块: slab 模块
 目的: 分配和管理内核内存
 实现: kmalloc() 函数是一个工厂方法,根据请求的大小和类型创建适当的内存对象

3. 观察者模式:

 模块: inotify 模块
 目的: 监视文件系统更改
 实现: 文件系统使用观察者模式来通知 inotify 模块文件系统更改

4. 策略模式:

 模块: mm 模块
 目的: 管理内核内存
 实现: 内核使用策略模式来选择不同的内存管理算法,如 Buddy 系统和 SLOB

5. 桥接模式:

 模块: vfs 模块
 目的: 提供文件系统抽象
 实现: 内核使用桥接模式将文件系统抽象与具体的文件系统实现分离开来,如 ext4 和 XFS

6. 装饰器模式:

 模块: fscrypt 模块
 目的: 加密文件系统内容
 实现: 内核使用装饰器模式为现有文件系统添加加密功能

7. 代理模式:

 模块: security 模块
 目的: 控制对受保护资源的访问
 实现: 内核使用代理模式来限制对系统调用和文件操作的访问

8. 模板方法模式:

 模块: fs 模块
 目的: 提供文件系统操作的通用框架
 实现: 内核使用模板方法模式来实现文件系统操作,如读写文件

9. 责任链模式:

 模块: syscalls 模块
 目的: 处理系统调用
 实现: 内核使用责任链模式将系统调用请求传递给一系列内核函数

10. 状态模式:

 模块: task 模块
 目的: 管理进程的状态
 实现: 内核使用状态模式来管理进程的状态,如运行、等待和停止

这些实例展示了如何将设计模式应用于 Linux 内核模块开发,以提高模块的模块化、可扩展性和可维护性。

lwn 上有关内核模式的汇总文章,对于学习内核中涉及模式有很大帮组启发


内核设计模式 Patterns   https://lwn.net/Kernel/Index/#Development_model-Patterns 

Linux kernel design patterns - part 1 (June 8, 2009)

Linux kernel design patterns - part 2 (June 12, 2009)

Linux kernel design patterns - part 3 (June 22, 2009)

Ghosts of Unix Past: a historical search for design patterns (October 27, 2010)

Ghosts of Unix past, part 2: Conflated designs (November 4, 2010)

Ghosts of Unix past, part 3: Unfixable designs (November 16, 2010)

Ghosts of Unix past, part 4: High-maintenance designs (November 23, 2010)

Object-oriented design patterns in the kernel, part 1 (June 1, 2011)

Object-oriented design patterns in the kernel, part 2 (June 7, 2011)

Flags as a system call API design pattern (February 12, 2014)

Proper handling of unknown flags in system calls (February 26, 2014)

Losing the magic (December 5, 2022)

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值