30、深入解析操作系统文件系统的间接调用机制

深入解析操作系统文件系统的间接调用机制

1. 从函数参数到参数指针

在读取包含ISO - 9660文件系统的CD时,通过指针进行的调用实际上会调用 cd9660_read 函数,即 rc = cd9660_read(a)

大多数与Unix相关的操作系统,如FreeBSD、Linux和Solaris,使用函数指针将文件系统的实现与访问其内容的代码隔离开来。FreeBSD还采用间接调用的方式来抽象读取函数的参数。

当遇到 vop->vop_read(a) 调用时,会好奇参数 a 是什么,以及之前假设的 VOP_READ 函数的四个原始参数发生了什么。经过研究发现,内核使用了另一层间接调用,允许文件系统相互层叠到任意深度。这种层叠使得一个文件系统可以基于另一个底层文件系统的服务提供一些额外的服务,如透明视图、压缩和加密。

有两种机制巧妙地协同工作来支持这一特性:
- 一种机制允许单个旁路函数修改任何 vop_vector 函数的参数。
- 另一种机制允许将所有未定义的 vop_vector 函数重定向到底层文件系统层。

例如,在图中展示了三个相互层叠的文件系统。最顶层是 umapfs 文件系统,系统管理员挂载它是为了映射用户凭证。下面是Berkeley Fast Filesystem (ffs),它在大多数操作上依赖于原始4.2 BSD文件系统实现 ufs

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值