13.4.17 链接/解链的实现(文件共享)



13.4.17  链接/解链的实现

参见图13-24(和图13-7一样)有助于理解内核为了实现链接这个系统调用要做的工作。假定要链接和共享的文件是目录C1中的F1,在目录A1中该文件被称作A12。

 
(点击查看大图)图13-24  链接

然后,内核按照如下步骤实现该系统调用:

(1) 如果用户不是超级用户,输出错误消息并退出(只有超级用户可以执行该系统调用)。

(2) 解析现有路径名/A/A1/A12从而得到要链接的文件的索引节点。存储该索引节点以备将来使用。

(3) 访问该索引节点记录。

(4) 将索引节点中"链接数"字段递增1。

(5) 为了保持一致性,将该索引节点写回到磁盘上。

(6) 解析路径名/C/C1,从而得到该目录的索引节点,并读取该目录的内容。

(7) 在确保名字为F1的文件已经不在该目录中后,找出该目录中的一个空闲条目。如果没有空闲条目,就输出错误消息并退出。

(8) 在目录/C/C1中为被链接的名字为F1的文件以及在步骤(2)中存储的索引节点号生成一个条目。

(9) 写回所有的目录。这就完成了整个链接过程。

解链用的算法与此相似,容易构造,但要注意的是:这些算法看上去让人觉得很简单,但实际上由于在运行期间可能会出现死锁和竞争条件而导致它们非常复杂。关于死锁和竞争条件的完整讨论超出了本书研究范围,不再介绍。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值