UFFS文件系统简介
2015-08-30 14:09
225 查看
UFFS基础思想
1.采用独特的 父类(Parent)和序列号(Serial)实现 —块的识别 —建立关系
2.当加载UFFS时,会在内存中建立关系树。
—擦除块
—坏块
—Hash tables(哈希表)
•目录表
•文件表
•文件数据表
树节点的大小:16 bytes
存储所花费的内存: 16*总块数
3.分录
—向一块新的内存或者内存页写入新的数据 代替 去修改一个旧的内存页
—使用循环时间标记:00->01->11->00>…
—当加载UFFS时,检查并纠正错误
—使用“迷你-头”,消除部分页的规划要求
4.UFFS节点树
5.UFFS准备
步骤1:
—扫描叶备份空间,归类 目录/文件/数据节点
—检查坏块
—检查中断写操作
步骤2:
—随机擦除块
步骤3:
—检查DATA节点,关注孤立节点
6.UFFS附加标记
页备用/UFFS标记
7.UFFS块消息缓存
内存:每个缓存信息有40字节
8.UFFS页缓存
uffs_config.h: MAX_PAGE_BUFFERS (10 ~ 40) Memory: (40 + page_size) each buffer
struct uffs_BufSt{ struct uffs_BufSt *next; struct uffs_BufSt *prev; struct uffs_BufSt *nextDirty; struct uffs_BufSt *prevDirty; u8 type; u8 ext_mark; u16 parent; u16 serial; u16 pageID; u16 mark; u16 refCount; u16 dataLen; u8 * data; u8 * header; };
9.UFFS页状态
•空闲页:没有分配到页ID,空闲页总在底部
•有效页:拥有页ID,并且最大偏移量
•丢弃页:存在一个或者多个页,与当前页拥有一样的
页ID,并且偏移量比当前页高
•未知状态:当向一个页进行写操作时发生了中断
10.UFFS块状态
•坏块
•空闲/擦除 块
•非满载 块(有一个或者多个空闲页)
•满载块(没有空闲也,并且页ID=物理页偏移)
11.UFFS块恢复
•块恢复时发生:
—在块内,没空闲页可用
—数据进行修改
—刷新缓存
•块恢复步骤:
—(1)从擦除块列表中,获取一个空闲/擦除块。
—(2)从旧块中复制数据并写入新块,并更新时间标示
—(3)删除旧块
—(4)把旧块添加入擦除块列表中
注释:(1)和(4)的操作在内存中。
(2)和(3)是通过时间标记来辨别的。所有步骤在任何时候都可被中断。
•如果有足够的空闲页,是不会进行块恢复的
•恢复非满载块
•恢复一个满载块
12.UFFS页分布
•“mini-header”和“DATA”存储在页的数据区域, “Tag”,“ECC”和“Seal byte”存储在备份区
•在某些情况下,可以把NAND当成一个整体处理,模糊了 页数据 和 备份区的概念。
•“Status byte”:是mini-header的第一个字节,如果Status byte不是0xFF ——则这一叶是损坏的,
页的程序已经启动。
•“Seal byte”:是备份区的最后一字节,如果Seal byte不是0xFF
——当前页被保护,则所有数据和 tag/ECC 已经被编程成功
13.UFFS坏块管理
•当加载UFFS时会查找坏块
•当进行读/写/擦除操作时会发现坏块
—进行ECC校验
—如果ECC失败,无法回去有效数据
—不会立即处理坏块,而是等待读/写操作完成
—只会在进行读/写操作期间,进行处理坏块
•在格式化时会检查坏块
相关文章推荐
- 文件系统变为raw 无法访问的解决方法
- PHP 文件系统详解
- Powershell实现克隆NTFS文件系统权限
- php中的filesystem文件系统函数介绍及使用示例
- 用Python编写一个简单的FUSE文件系统的教程
- 【转自中科蓝鲸】集群NAS与集群文件系统的区别
- HBase 系统架构
- 修改内核 内存分配 root、文件系统和内核镜像的位置
- LINUX的EXT2文件系统
- 文件系统的简单操作
- Linux2.6X内核中文件相关结构体总结
- Cisco 3750文件系统学习总结
- 使用ext3grep恢复ext3文件系统中误删除文件(使用rm命令误删的)
- 因文件系统错误而无法开机
- Ubuntu 分区和文件系统的选择
- FAT文件系统原理(三)
- 硬链接与符号链接的区别.
- linux文件与目录
- Hadoop分布式文件系统:架构和设计要点
- Linxu目录结构说明