UBIFS文件系统(四)

UBIFS文件系统采用异地更新策略,当空间不足时触发GC。GC过程包括检查commit状态、回收脏LEB。脏LEB根据状态分为dirty、freeable和index,分别进行不同处理,确保数据完整性和系统效率。GC过程中,通过对c->gc_lnum的判断来决定LEB的保留或释放。此外,journal LEB在commit时被回收,避免数据破坏。

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

UBIFS文件系统(四)

ubifs为异地更新,flash中的数据在变为脏之后并不会立即被清除,而是当文件系统通过make reservation已索引不到足够的存储空间时,才会触发GC(Garbage Collect)对空间进行整理和清除,该过程由ubifs_garbage_collect函数实现:检查文件系统的commit状态,若正处在后台commit则修改状态为立即commit状态,并返回错误,使其执行ubifs_run_commit过程。如果commit完成之后仍然索引不到足够的空间,则按如下顺序对脏LEB进行GC:

empty_list->freeable_list->dirty_heap->dirty_idx_heap->free heap->uncat->flash

其中,从empty_list和freeable_list中索引空间的前提是index leb预留充足,否则将直接从dirty_heap中开始索引空间。对于索引到的LEB,将置LPT标志为为taken,该LEB存在以下几种情况:

  1. dirty
    当该LEB为非index LEB,且dirty + free < leb_size时,需借助jhead[GCHD]的中转完成脏数据空间的回收,过程描述如下:
    LEB回收
  • 将LEB中有效node数据转移到jhead[GCHD]中,该过程会导致TNC、LPT的更新ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值