linux mount函数,linux文件系统调用(1)---mount

do_mount()->do_new_mount()->do_add_mount()->lock_mount()的功能是递归的查找终于的挂载文件夹。这里的代码比較难懂,所以以下将具体描写叙述。

linux同意挂载文件夹上挂载多个文件系统,后面挂载的文件系统将“覆盖”之前挂载的文件系统。比如,minix文件系统挂载到ext3文件系统的tmp挂载文件夹下,nfs文件系统挂载到minix文件系统的/挂载文件夹下,终于使用ls命令将仅仅能看见nfs文件系统,而minix被nfs“覆盖”了。

当中。tmp文件夹指向minix挂载点的红色虚线仅仅表示逻辑关系,实际并不存在这种指向关系,linux使用二元组作为哈希因子构成哈希表mount_hashtable的表项。用来查找已经挂载的文件系统。比如。minix挂载到ext3的tmp文件夹,那么linux就依据二元组构成哈希表项。而且将minix记录到哈希表项的链表中。当须要查找ext3的tmp文件夹下挂载了哪个文件系统时,能够依据二元组找到相应的哈希表项,然后找到相应的已挂载文件系统minix。

af9c2500879a15eebcfbb07f2cd0fc29.png

有了以上基础后,我们再回过头来看lock_mount()的功能。lock_mount()首先依据当前的二元组找到已挂载的minix文件系统,然后依据二元组找到已挂载的nfs文件系统。当找到最后一个文件系统时,依据nfs的根文件夹调用new_mountpoint()创建挂载节点(由于minix和nfs挂载到同一个挂载文件夹tmp下。所以在挂载minxi时已经创建了挂载节点。所以实际上nfs共用了minix的挂载节点,仅仅是将挂载节点的挂载次数统计加1)。

以下回到第四节描写叙述的情形继续讲述,由于当前文件系统中仅仅存在ext2文件系统。因此lock_mount()将依据ext2的挂载文件夹tmp调用new_mountpoint()创建挂载节点,而且将挂载节点指向挂载文件夹tmp,挂载次数统计加1。最后将挂载节点增加到mountpoint_hashtable哈希表中(该哈希表使用挂载文件夹tmp作为哈希因子)。

c732f00dab7e2fec065c217a966db7c7.png

六、挂载源文件系统

do_mount()->do_new_mount()->do_add_mount()->graft_tree()负责把新建的源文件系统ext3挂载到挂载节点上。mnt_set_mountpoint()负责将源文件系统指向挂载节点。commit_tree()负责将源文件系统ext3增加到mount_hashtable哈希表中。(注:图中省略了目的文件系统和源文件系统之间的父子关系)

b7fff20717eb6d3f2be265a06985aa6b.png

七、总结

linux挂载文件系统主要分为三个阶段:创建源文件系统,查找目的文件系统的终于挂载文件夹并创建挂载节点。最后将源文件系统关联到挂载节点上。

版权声明:

原创作品,如非商业性转载,请注明出处。如商业性转载出版,请与作者联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值