Linux kernel 分析之十八:设计模式-文件系统与抽象工厂

本文探讨了如何在Linux内核的文件系统设计中应用抽象工厂模式,以实现虚拟文件系统(VFS)与具体文件系统间的分离。通过file_system_type结构体和get_sb函数,VFS能够根据文件系统名称动态创建所需的dentry, inode, 和 super_block对象,从而隐藏具体文件系统的实现细节。这种设计使得添加新的文件系统变得简单,只需添加相应源文件并编译为模块即可。" 120600321,11491370,虚拟化与云计算初探:VMware vSphere与企业实践,"['虚拟化', '云计算', 'VMware', '服务器管理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     抽象工厂的典型应用是在gui设计中。为了在运行时方便地替换不同风格的gui设计,我们需要在上层把每种不同风格的gui的实现细节隐藏起来。我们不再显式地调用gui中的某个组件的构造函数,因为这样暴露了组件的实现。相反,我们为每一个风格提供一个“工厂”来生产该风格的“产品”。
抽象工厂可以看作是面向对象设计中常用的多态思想的扩展。普通的多态只是针对一个“产品”,如shape抽象类。而抽象工厂是针对一组“产品”。所以显得整齐划一。
在设计文件系统时,我们希望抽象的文件系统VFS和具体的文件系统分离。即在VFS中不涉及任何具体的文件系统。如果要添加一个新的文件系统,则只要添加几个源文件,然后编译成模块,就万事大吉了。为了达到这一目标,VFS的代码本身不应该涉及具体的文件系统 。VFS里需要构造dentry,inode,super block对象时,也应该想方设法地避免显式地调用构造函数。但是由于文件系统可以抽象出一些共同的要素和接口,如dentry,inode,super_block,这时我们想到了抽象工厂的设计模式。
每一类文件系统可以看作是“工厂”,而dentry,inode, super block可以看作是“产品”。那么,工厂在哪里呢?我们是在哪里创建”工厂”本身的呢?
我们知道文件访问的大概流程:
1.首先,我们得知道是哪个文件系统。然后,通过mount把文件系统安装到某个目录下。这个结构体就是:file_system_type。我们可以看一下ext2的 file_system_type1167 static struct file_system_type ext2_fs_type = {1168         .owner          = THIS_MODULE,1169       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值