ubifs总体设计分析
1. 设计需求
- 存在坏块
- 使用寿命较短
- 存储介质不稳定
- 读写速度慢
- 不支持随机访问(nand)
- 只能通过擦除将0改成1
- 最小读写单位为page or sub-page
- 便宜
ubifs文件系统是为flash存储设备设计的文件系统。在存储设备上高效地管理文件是存储设备文件系统的主要目标,这个目标可以从可用性、可靠性、可扩展性、性能等多个维度进行度量。
2. 需求分析
其中坏块管理、磨损均衡、错误预测等功能由UBI子系统实现,UBIFS不予关心。后面会就这4个维度展开专题详细介绍。


3. 对象模型设计
我们不妨通过分析ubifs的关键路径--写操作,来分析ubifs的设计决策。ubifs层位于通用块层和ubi层之间,通用块层的核心对象是inode和super_block,ubi层的核心对象是LEB。写操作就是要根据inode,进过ubifs层的处理,找到ubi层的LEB,并把数据写入到存储介质上。首先构造ubifs的核心对象ubifs_node,ubifs_node一诞生,就面临如下几个问题:
1) 如何构建ubifs_node组织结构;
2) 如何根据inode创建ubifs_node;
3) 如何通过inode找到ubifs_node;
4) 如何通过ubifs_node找到LEB;
5) 如何给ubifs_node分配LEB;
前3个问题,ubifs通过构造TNC B+树来解决,后2个问题通过LPT B+树来解决。这也是ubifs的另外2个核心对象。B+树的优点是查找快速,但是B+树的更新往往会导致从根节点到目标叶节点路径上所有节点的更新。如何管理TNC和LPT树又有几个问题需要解决:
1) 构造问题:树根节点如何找到;树中间节点和叶节点如何存储到介质上;
2) 读问题:树节点如何根据各种目的进行快速索引;
3) 写问题:树节点如何安全快速地进行添加、更新、删除等操作;
由于TNC和LPT树的规模、目的差异都很大,以上的几个问题的解决方法也不尽相同,后面再分专题进行介绍。其核心对象模型和对象关系设计如下。其中细线条代表关联关系,粗线条代表组合关系,黑色代表内存对象,红色代表flash对象,即需要写入flash的数据。

a) vfs层核心对象file;
b) 页缓存层核心对象address_space;
c) 通用块层核心数据对象super_block,inode;
d) ubifs层核心数据对象ubifs_info。
其中ubifs_info主要维护三个对象:LPT、TNC和journal,其主要字段解释如下:
- nroot: LPT的对象树;
- lpt_cnext:用于提交LPT更新的对象链表;
- lpt_heap:用于分配LEB的对象优先队列;
- buds:node位置信息对象;
- jheads:日志对象;
- zroot:node的对象树(TNC);
- cnext:用于提交node更新的对象链表;
4. 对象持久化设计
ubifs文件系统对设备空间的划分如下,其中log、LPT、orphan、main区的具体大小取决于flash的物理大小:

4.1 super block area
4.2 master node area
4.3 log area
4.4 lpt area
4.5 orphan area
4. 6 main area

5. 参考资料
linux kernel 2.6.32
—— 完 ——
ubifs总体设计分析的更多相关文章
- UBIFS文件系统介绍
1. 引言 UBIFS,Unsorted Block Image File System,无排序区块图像文件系统.它是用于固态硬盘存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件系统之一 ...
- UBIFS介绍 - MTD网站
转:http://blog.csdn.net/kickxxx/article/details/6583463 目录(?)[-] Big red note Overview Scalabity Writ ...
- ubifs & mtd
前天晚上在写完另一篇总结之时,赵XX向我咨询了关于mtd 和ubifs的相关内容.而我在这方面只是略懂皮毛,所以向他许愿共同调查这个方面的知识.经过昨天一天的调查,最后感觉是有了一定的经验和基础了,所 ...
- ubifs笔记
第1章 UBIFS UBIFS不是工作在块在设备之上,所以UBIFS不能用于MMC之类的设备. 与传统的flash文件不同,UBIFS不是工作是块设备之上.传统的flash文件系统(如Jffs2)工作 ...
- ABP开发框架前后端开发系列---(1)框架的总体介绍
ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架.ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型.学习使用ABP ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- ABP(现代ASP.NET样板开发框架)系列之1、ABP总体介绍
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之1.ABP总体介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- MVC5网站开发之一 总体概述
由于前几次都没能写完,这次年底总算有自由时间了,又想继续捣鼓一下.于是下载了VS 2015专业版(不知为什么我特别钟爱专业版,而不喜欢企业版).由于以前的教训,我这次决定写一个极简的Deom,简到什么 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 8.总体控制器的设计
目 录 第八章 总体控制器的设计... 2 8.1 总控制器的职能... 2 8.2 组装和释放部件... 3 8.3 ...
随机推荐
- php 租房子练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 菜鸟学Linux命令:lsof命令 查找指定用户、进程、端口打开的文件
lsof,list open files, 是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件. 命令格式:ls ...
- PHP获取远程图片并调整图像大小(转)
<?php /** * *函数:调整图片尺寸或生成缩略图 *修改:2013-2-15 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw=450 调整 ...
- Delphi的文件操作
参考自:http://www.cnblogs.com/railgunman/articles/1800318.html Delphi 中默认有input 和 output 两个文件变量,使用可以不用定 ...
- Java Socket编程示例
一.Socket简介: 1.什么是Socket 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket ...
- 团队作业-第一周-NABCD竞争性需求分析
1. Need 需求 随着科技信息的发展,传统的课堂点名亟待步入信息处理的轨道,移动校园课堂点名软件恰好的切入了这个需求点,市场中词类软件也为数不多,因此需求也是比较强烈. 2. Approac ...
- Oracle 11g新特性 -- 延迟段
11gR2之前的版本中,当创建一张表时,会自动分配段空间,这样做有几个弊端: 1. 初始创建表时就需要分配空间,自然会占用一些时间,如果初始化多张表,这种影响就被放大. 2. 如果很多表开始的一段时间 ...
- Win10 AppBar
<Page.BottomAppBar> <CommandBar x:Name="cmdBar" Background="Transparent" ...
- phpcms 完美实现 导航栏当前栏目高亮
我们在用phpcms做网站的时候,经常碰到导航栏高亮功能,或者侧栏高亮,这个会涉及到几个问题: .栏目列表页子栏目高亮判断,如果当前页面为子栏目,他的顶级栏目如果在导航栏也要高亮. .内容页高亮,这个 ...
- bzoj 1415 期望+记忆化搜索 ****
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdkAAAIfCAIAAACzfDFhAAAgAElEQVR4nOy9bVwTW57vm5fnhed+Pn