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 ...
随机推荐
- mysql 只导数据不含表结构
mysqldump -t 数据库名 -uroot -p > xxx.sql
- python多进程程序之间交换数据的两种办法--Queue和Pipe
合在一起作的测试. #!/usr/bin/env python # -*- coding: utf-8 -*- import multiprocessing import random import ...
- 无废话ExtJs 入门教程十六[页面布局:Layout]
无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distributi ...
- 如何实现Outlook 2010 下载邮件后自动删除服务器上的邮件
outlook2010---文件---信息---账户设置---选中要设置的帐号---双击点选要设置的邮箱---其他设置---高级---在服务器上保留邮件的副本---14天后删除服务器上的邮件副本,修改 ...
- 深入分析JavaWeb 技术内幕
1,通过浏览器请求一个资源,会发生以下几种过程 1) http的解析过程,包括对于http请求头和响应头中指令(控制用户浏览器的渲染行为和 服务器的执行逻辑)的解析 2)DNS的解析过程(根据域名获取 ...
- 无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上
程序运行提示错误"无法定位程序输入点 _glutCreateWindowWithExit于动态链接库glut32.dll上",网上查了说是opengl的.lib和.dll版本过低, ...
- linux中的基础正则表达式
基础的正则表达式如下 RE字符 意义与范例 ^word 待查找的字符串(word)在行首 word$ 待查找的字符串(word)在行尾 . 代表一定有一个任意字符的字符 \ 转义字符,将特殊字符的特殊 ...
- for循环嵌套
今天复习了分支语句以及for循环,新内容主要讲解了for循环的嵌套: 外循环控制行,内循环控制列 下面几个实例: 五行五列的矩阵 左下角是直角的三角形: 左上角是直角的三角形: 右上角为直角的三角形: ...
- ajax调用WebServices服务方法和传参调用WebServices注意事项
先演示下ajax是如何调用WebServices中的方法 1.新建一个页面default.aspx,一个Web服务 在页面中引用jQuery文件. <script src=" ...
- CSS里的pointer-events属性
现代浏览器里CSS的职责范围和JavaScript的越来越模糊分不清.比如CSS里-webkit-touch-callout属性在iOS里能禁止当用户点击时弹出气泡框.而本文要说的pointer-ev ...