文件被进程关闭时,文件系统的操作流程

当进程P关闭文件F时,文件系统会执行以下操作流程:

  1. 写入缓存数据:如果进程P有对文件F的未写入磁盘的缓存数据,文件系统会触发写回操作,将这些数据写入磁盘,以确保数据的持久性。

  2. 更新文件状态信息:文件系统会更新文件F的元数据,如最后访问时间、最后修改时间等。

  3. 释放资源:文件系统会释放进程P在内存中用于管理文件的索引结点的资源,这包括释放内存中的文件描述符、文件表项等(注意这并不影响文件在外存即磁盘上的索引结点或数据)。这有助于减少系统资源的占用。

  4. 同步操作:如果进程P在关闭文件F时使用了同步关闭(例如在Linux中使用close()系统调用时指定了FD_CLOEXEC标志),文件系统会执行同步操作,确保所有对文件F的修改都已经实际写入磁盘。

  5. 安全检查:文件系统可能会进行安全检查,以确保进程P有权限执行关闭操作。

  6. 更新索引节点信息:文件系统会更新文件F的索引节点(inode)信息,但这通常不涉及释放索引节点所占的外存空间,除非文件F被删除。

  7. 处理引用计数:如果文件F有多个打开的引用(例如多个进程打开了同一个文件),文件系统会减少文件F的引用计数。如果引用计数降到零,文件系统可能会执行额外的清理操作。

  8. 日志记录:如果文件系统支持日志功能,文件系统可能会记录关闭文件的操作,以便在系统崩溃时进行恢复。

  9. 返回状态:文件系统会向进程P返回关闭文件的操作结果,通常是成功或错误代码。


当文件被删除时,文件系统会执行以下操作流程:

  1. 查找文件:文件系统首先需要查找要删除的文件的目录项,以确定文件的位置和状态。

  2. 权限检查:文件系统会检查请求删除操作的进程或用户是否有足够的权限来删除该文件。

  3. 减少引用计数:如果文件有多个硬链接,文件系统的引用计数会减1。如果引用计数变为零,表示这是文件的最后一个链接(文件磁盘索引结点中的链接计数减1),链接计数(link cout)是指硬链接的数量,当硬链接的计数降到0时文件就会被真正地删除

  4. 释放文件表项:文件系统会释放该文件在内存中的文件表项,这通常包括关闭所有打开该文件的进程的文件描述符。

  5. 删除目录中文件的目录项:文件系统会从其父目录中移除该文件的目录项,使得文件不再出现在文件系统的目录结构中。

  6. 释放磁盘空间:如果引用计数为零,文件系统会释放文件占用的磁盘空间,包括数据块和索引节点(inode)。这通常涉及到更新磁盘上的空闲空间映射。(释放文件的索引节点所占的外村空间

  7. 日志记录:如果文件系统支持日志功能,文件系统可能会将删除操作记录到日志中,以便在系统崩溃时能够恢复状态。

  8. 更新文件系统的元数据:文件系统可能会更新其内部元数据,例如更新空闲inode列表和空闲数据块列表。

  9. 同步操作:文件系统可能会执行同步操作,确保上述所有更改都已实际写入磁盘,以防止数据丢失。

  10. 返回状态:文件系统会向请求删除操作的进程返回操作结果,通常是成功或错误代码。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值