文件系统的核心问题是存储。这里面隐含2个问题:1)存储什么?2)存储到哪里?文件系统中的各种技术手段都是如何高效的解决这2个问题。ubifs用node标准化每一个存储对象,用lprops描述每一个逻辑块空间,用TNC组织管理所有的node对象,用LPT组织管理所有的lprops对象。
 
node
          ubifs中除了存储用户数据,还要存储索引节点、目录项、超级块等数据。这些数据结构各异,差异很大,为了统一数据视图,便于管理,ubifs标准化了所有数据的表现形式,所有数据以node表示呈现。并根据不同用途对node进行分类、存储和组织。ubifs的node汇总介绍如下。
          黑色部分为通用的文件系统数据,红色部分为ubifs专有的文件系统数据。

TNC
          因为 UBIFS_INO_NODE,UBIFS_DATA_NODE,UBIFS_DENT_NODE,UBIFS_XENT_NODE,UBIFS_TRUN_NODE节点数量巨大,ubifs采用 B+树用于管理这些节点。各节点在树中的index为(inode, key2),如上图所示,不同的node有不同的key2。其目的就是能根据index快速找到叶节点数据所在的位置,但是B+树的index节点数量多,更新很慢,如果这个过程中被打断,叶节点文件就丢失了。所以在commit tnc前,先把叶节点文件的数据信息commit到log区,这样既提高了速度,也保证在tnc commit失败的情况下,叶节点文件也能通过log区找到,并replay到tnc。
 
journal replay

          从数据的角度看,recovery的过程就是将(leb, offs) list进过加工处理,映射成{key: [leb, offs, len]} B+tree的过程。
          日志回放的详细过程如下:
          从log区中获取ref node((leb, offs) ),从ref node获取bud所在位置信息(leb:offs),构造内存对象bud,并根据此信息 scan这一段leb,筛选出无效的node,将有效的node加入sleb->nodes,以备后面replay,如果是最后一个bud并需要recovery,将leb:0-offs这段异地备份到另一个peb上。
把sleb->nodes上的node处理成replay_entry,并加入到c->replay_list,然后根据replay_list,构造成ubifs_zbranch({key: [leb, offs, len]})对象更新到TNC B+树上,然后将已replay的buds leb块的free和dirty空间、dirty标记等lprop属性信息
 
sync
          如果在unclean reboot前,没有调用sync,buf中的数据由于没有同步到flash,将可能破坏ubifs文件系统。
          sync会调用ubifs_run_commit进行所有的数据提交。
          如果调用sync过程中断电,
          如果在wbuf commit前或者过程中断电,文件将丢失,这需要应用层主动调用sync来保证。但wbuf commit很快,这是小概率事件;
          如果在log commit前断电,文件将丢失,这需要应用层主动调用sync来保证。
          如果在log commit过程中断电,文件还是会丢失。但log commit很快,这是小概率事件;
          其他情况下,比如gc commit前、或者tnc commit前或者过程中断电,文件不会丢失,因为可以从log区replay。
 
lprops
          ubifs用node对象解决存储对象的问题,用lprops对象解决存储位置问题。要决定新的对象存储到哪里,就需要获取整个存储空间的使用视图数据以辅助决策。
          lprops对象用(lnum,free,dirty)元组信息完成对一个逻辑块的使用视图的描述。通过把所有的lprops对象组织成LPT B+tree,可以快速查询更新某个lnum逻辑块的使用视图信息。因为LPT的key是lnum,所有无法快速查询到most free或most dirty的逻辑块,在这种需求基础上,ubifs对lprops进行分类组织,满足对free lnum(空间分配)或dirtry lnum(垃圾回收)的快速查询需求。
 
 
LPT
          lpt B+tree用于管理ubifs逻辑块属性对象 lprops,B+tree的index为lnum。其目的就是根据lnum,快速查询、更新逻辑块的信息(主要是free、dirty等信息)。
 
--EOF--
 

ubifs核心对象 -- TNC和LPT的更多相关文章

  1. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  2. ASP.NET Core的路由[2]:路由系统的核心对象——Router

    ASP.NET Core应用中的路由机制实现在RouterMiddleware中间件中,它的目的在于通过路由解析为请求找到一个匹配的处理器,同时将请求携带的数据以路由参数的形式解析出来供后续请求处理流 ...

  3. Asp.Net WebApi核心对象解析(上篇)

    生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...

  4. Three.js 入门指南(核心对象)

    推荐大家可以看看这个:http://wenku.baidu.com/link?url=RQU2exzV_EF3GATc3bzQU2o9LGMuCmiN5nUJth5SLG3E2TrxtBLQodJU_ ...

  5. Ajax的核心对象创建步骤

    * Ajax具有核心对象 * XMLHttpRequest对象 * 如何创建XMLHttpRequest对象 function getXhr(){ // 声明XMLHttpRequest对象 var ...

  6. 我心目中的Asp.net核心对象

    转:http://www.cnblogs.com/fish-li/archive/2011/08/21/2148640.html 阅读目录 开始 HttpRuntime HttpServerUtili ...

  7. 路由系统的核心对象——Router

    路由系统的核心对象--Router ASP.NET Core应用中的路由机制实现在RouterMiddleware中间件中,它的目的在于通过路由解析为请求找到一个匹配的处理器,同时将请求携带的数据以路 ...

  8. ASP.NET Ajax核心对象

    本章学习目标 主要掌握AJAX的基本概念和实现机制,学习并创建XMLHttpRequest对象,使用XMLHttpRequestObject对象获取服务器端的数据 主要内容如下,请点击ASP.NET ...

  9. ASP.NET Web API的核心对象:HttpController

    ASP.NET Web API的核心对象:HttpController 对于ASP.NET Web API来说,所谓的Web API定义在继承自ApiController的类中,可能ApiContro ...

随机推荐

  1. Visual Studio 推荐插件--高量,变量高量,语法高亮

    1  WordLight for 2008 下载网址:http://visualstudiogallery.msdn.microsoft.com/ad686131-47d4-4c13-ada2-5b1 ...

  2. CNN初步-1

    Convolution:   个特征,则这时候把输入层的所有点都与隐含层节点连接,则需要学习10^6个参数,这样的话在使用BP算法时速度就明显慢了很多. 所以后面就发展到了局部连接网络,也就是说每个隐 ...

  3. Overview and Evaluation of Bluetooth Low Energy: An Emerging Low-Power Wireless Technology

    转自:http://www.mdpi.com/1424-8220/12/9/11734/htm Sensors 2012, 12(9), 11734-11753; doi:10.3390/s12091 ...

  4. HTML5学习之WebSocket通讯(六)

    WebSocket是下一代客户端-服务器的异步通信方法. WebSocket最伟大之处在于服务器和客户端可以在任意时刻相互推送信息 WebSocket允许跨域通信 Ajax技术需要客户端发起请求,We ...

  5. OCJP(1Z0-851) 模拟题分析(四)over

    Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有 ...

  6. poj 2236:Wireless Network(并查集,提高题)

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 16065   Accepted: 677 ...

  7. AngularJS 之 Factory、Service、Provider

    当你初试 Angular 时,很自然地就会往 controller 和 scope 里堆满不必要的逻辑.一定要早点意识到,controller 这一层应该很薄:也就是说,应用里大部分的业务逻辑和持久化 ...

  8. oracle删除用户下所有的表

    需要创建这些删除语句,通过oracle的数据字典找到该用户下的所有表.视图等对象,拼接成语句.如下select 'drop table '||table_name|| ' cascade constr ...

  9. 基于PHP+Ajax实现表单验证的详解

    一,利用键盘响应,在不刷新本页面的情况下验证表单输入是否合法 用户通过onkeydown和onkeyup事件来触发响应事件.使用方法和onclick事件类似.onkeydown表示当键盘上的键被按下时 ...

  10. WCF学习笔记之WCF初识

    这篇博客将介绍WCF的最基础内容,让我们对WCF有一个基本的认识.后续的博客中将会介绍WCF其他方面内容.本篇博客将通过一个简单的例子,介绍如何创建WCF服务,并承载这个服务,让客户端来访问它.下面请 ...