




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深入理解yaffs2文件系统(一)1、Flash文件系统1.1、背景已经有多种flash文件系统(FFSs)或flash块驱动(在之上运行一个常规的FS),同时都有优点或缺点。Flash存储器有非常多的限制,这里就不一一列举了。已经有各种方法解决这些限制, 以提供一个文件系统。必须认识到,“flash”,包括NOR和NAND,各自有不同的限制。很容易被专业术语“flash”误导,误以为用于NorFlash的方法也立即适用于NandFlash。Nand块驱动一般采用FAT16作为文件系统,但不够健壮,也不够贴近Flash的特性。这些块驱动通过一个“本地-物理”的映射层来仿真可写的、类似于磁盘扇区的块。当使用FAT16时,这些文件系统工作的相当好,它们内存消耗小,代码尺寸也很小。但就像所有基于FAT的系统一样,它们很容易损坏(如,丢失簇)。其他的途径则是设计整个文件系统,不是基于块驱动,而且是flash友好的,这允许更多的余地来解决上述所提到的问题。当前有两个linux文件系统能非常好的支持NorFLash,那就是JFFS以及它的升级版本JFFS2。这两者都提供日志机制,大大的提升了健壮性,这也是嵌入式系统特别重要的一个特性。不幸的是,它们在RAM消耗和启动时间方面都不是很好。JFFS在flash中的每一个journalling日志节点,需要一个基于RAM的jffs_node结构,每一个节点为48字节。JFFS2做了一个大改进,通过剪裁相关的结构体(jffs2_raw_node_ref)而减少到16字节。即使如此,在512字节页大小128M的NandFlash,按平均节点大小来算,也需要250000字节约4M大小。JFFS和JFFS2在启动时,需要扫描整个flash阵列来查找journaling节点,并决定文件结构。由于NAND容量大、慢、连续访问、需要ECC校验,这些特性将导致不可接受的、很长的启动时间。随便掐指一算,扫描128M字节的Nand阵列大小需要25秒钟。设计yaffs2的目的就是:NandFlash友好的、通过提供日志机制达到健壮的、大大减少JFFSx所具有的RAM消耗和启动时间。Yaffs主要是用于内部Nand而不是可移动的Nand(SM卡)。在可移动的SM智能卡,兼容性显得更重要,一般使用FAT文件系统。当然,yaffs也做了深思熟虑,认为稳定性比兼容性更重要。1.2、Yaffs文件系统特性YAFFS是一个专为NandFlash特性设计的文件系统。它已经被证实的好特性有:(1)fast 快速,比其他Flash文件系统要快很多。(2)Easily ported 易于移植, 已经移植到GNU/Linux, WinCE,eCOS,pSOS, VxWorks,以及其他各种系统。(3)Log structured 日志结构,提供均衡负载,使得它非常健壮。(4)支持多种类型的NandFlash芯片,如页大小为512B、1KB、2KB的NnadFlash等等。(5)Very fast mount 非常快速的文件系统挂载速度,几乎是立即启动的。(6)非常少的RAM消耗。 (7)灵活的Licensing授权机制,适合许多情况。YAFFS当前版本为v2,yaffs2除了支持512字节页大小的flash,还支持2K字节页大小的flash(YAFFS1仅仅支持原先的512字节页大小的flash)。YAFFS 1 和 2已经被众多的商业产品所采用。2、 关于yaffs1文件系统2.1、yaffs1概述Yaffs使用一个类似于SmartMedia的flash物理格式,这是由于以下原因所致:(1)一些格式,如坏块标识位置是由芯片厂家决定的,并且不能更改的。(2)潜在的重用编码。有一些域是明显不同的,以反映不同的通途。尽管有这些相似性,yaffs跟SM/FAT还是不兼容的。SM卡需要被重新格式化,才能用于yaffs,反之亦然。文件数据存储在固定大小的跟页大小相同的“chunks”里面,每一页都被文件ID和chunk号所标识。标签则存储在“spare data”区域,通过文件位置除以chunk大小来决定chunk号。当一个文件的数据被重写时,相关的chunks被新的pages替换,新的pages包含了新的数据,但标签为改变,旧的页则被标识为丢失的(discarded)。文件头“File headers”存储在一个单独的页里面,具有标识,以便和数据页区分开来。页还有一个2bit的短序列号,如果此页被修改过则加1,之所以这样做,是因为:“如果被替换的页被标识为丢弃(discarded)之前,这时发生了意外掉电/意外情况,可能会有两个页具有一摸一样的标签”,这时序列号就可用于仲裁哪一页是被丢弃了的。一个仅仅包含被丢弃页的块(脏块)将被当垃圾回收,另外,也可以把块内的有效页拷贝出来,放到其他块,这样的话,这个块包含全部废弃页,将作为脏块被垃圾回收。理论上,你不需要在RAM里面维护文件结构,当需要查找页的时候,你可以扫描整个flash芯片。但实际上,相比内存消耗,你更想要的是快速的文件访问时间。yaffs所用的机制是给每一个文件提供一列u16型的页地址。在128MB的NAND芯片共有218页,一个u16型的整数不能独一的标识每一页,但可以标识一组(4页为一组),也就是一个足够小的区域以供查找。这个机制可以适应更大的NAND器件。用这种方法,RAM消耗大约为2字节每页,整个128MB的NAND器件需要512KB。在启动扫描时建立文件结构,仅仅读取一遍NAND即可。由于只需读取spare data,所以速度相当快(128MB大概3秒)。通过NAND分区,这个速度还可以更快,也就是,先挂载关键分区,后面再挂载数据分区。通过改变“chunk”大小为1024字节或更大,还可以获得其他各种运行时的改进。然而,这将会降低flash的效率,因为生活总是没有十全十美的。2.2、yaffs1的spare area分析下面表格描述了每一页spare区域的编排:第X字节SmartMedia 用途YAFFS 用途0.511数据数据,可以是文件数据或者文件头,取决于标签。512.515保留标签516数据状态字节,在三星SM编码里未使用数据状态字节,如果超过4bits为0,那么这页为删除页517块状态字节块状态字节518.519块地址标签520.522第二份256字节数据的ECC第二份256字节数据的ECC523.524块地址标签525.527第一份256字节数据的ECC第一份256字节数据的ECC块状态是一个保留值,标识块是否为坏块。数据状态标识页是否有效。如果少于4bits为0,则页有效,否则为删除页。有8字节64bits用作yaffs标签。分割如下:Bit数目用途1818-bit文件id,即最多218(260000)个文件。文件id为0是无效的,表示一个删除页。文件id为0x3FFFF也无效。22-bit 序列号2020-bit文件的页id。限制了一个文件最多有220页。即超过500MB文件最大大小。页id为0表示该页为文件头。1010-bit计数器指明该页有多少字节被使用。1212-bit标签的ECC校验2未使用64总共这里对这些域做一下解析:文件id与inode是同义的。在一个具有相同的file_id:page_id页被重写(数据修改或垃圾回收的拷贝操作)时,序列号加一。当一个页被替换时,有一个简短的时期,有两个页具有相同的id,序列号就是用来解决此问题的,2bit计数器足以区分哪一个为当前页。当页被重写时,文件id、数据状态字节、以及12-bit ECC全写为0。字节计数器指明这个页有多少字节有效。由于不存在字节个数为0的页,除了文件的最后一页,其他页的这个域值应该为512。这个计数器的使用表明文件被打开后,不需要经常的更新文件头里面的文件长度变量,文件长度的完整性也能得到保证。文件头只在文件关闭的时候需要更新。这个域足够宽,允许用于1024字节的页。文件头包括两方面的信息:(1)文件信息(文件mode、所有者id、组id、长度)。(2)与本文件相关的硬链接。一个目录也表现为一个文件(有一个inode和硬链接),但没有数据。12-bit ECC只用于标签数据,使用一个类似于22-bit ECC(用于文件系统数据)的算法。它们是相互独立的。2.3、页分配和垃圾回收在当前被选中用于页分配的块中,页被顺序的分配。当块的所有页分配完,则选择另一个干净块用作页分配。至少有两个或三个干净块是保留的,以用于垃圾回收的目的。如果没有足够的干净块,那么一个脏块(块内全部页被删除)将被擦除,以释放它作为一个干净块。如果没有脏块,则选择最脏的块作垃圾回收。垃圾回收时,拷贝一个块的有效数据页到新的数据页,从而可以让这个块成为脏块,这时可以释放并擦除它。跟NOR相比,NAND的写和擦除速度非常快,因此垃圾回收可以按需进行(如,在写的时候),且不会导致性能下降。也可以将垃圾回收指派给某个内核任务。相比JFFSx,这里所述的垃圾回收简单到不可置信,主要得益于用固定大小的页代替日志节点。2.4 写flash芯片就像这里所描述的,在擦除块之前,yaffs只写页的数据区一次,spare区两次(一次是写新页,一次是删除页),这在大多数有限制的NandFlash的限制之内。2.5、均衡负载这里没有明确的去达到均衡负载,但具有均衡负载效果,主要依赖于:为错误保留一些块、随机选择。均衡负载的主要目的是:“防止某些块被过度的写,而有些块却很少被写,导致每个块的写次数不平均”。3、关于yaffs2文件系统3.1、概括Yaffs2最原始的动机是增加支持新的页大小为2K字节的NandFlash器件,以及实现严格的连续页写顺序。为了实现这个,使用了新的设计,并具有下列好处:零页重写,操作更快(yaffs1对spare区域重写一次来删除页);可以利用一些器件并行页编程特性;相比yaffs1的速度,提高了性能(写:1.5至5倍,删除:4倍,垃圾回收:2倍);更低的RAM消耗(大约为yaffs1的25%至50%);可以支持Toshiba和Sandisk MLC厂商;大部分yaffs1和yaffs2的代码是共用的,因此yaffs1和yaffs2的运行时代码也是差不多的。3.2、方法yaffs1和yaffs2最主要的差别就是如何处理“删除状态”,由于我们不能重写,因此在yaffs2里我们不能使用“删除状态”标志。Yaffs2使用了两个机制解决数据状态。Yaffs2的chunks有更多的标签信息,包括一个块序列号。由于在一个块里面页是顺序分配的,因此根据块序列号,我们可以决定chunk的序列号。由此,我们总是可以知道系统里所有chunks的路径顺序。 上面这些帮助我们区分陈旧-VS-新鲜的数据,但不能决定一个文件/对象是否被删除。删除是通过移动该对象到“unlinked”目录实现。我们也跟踪系统中每个对象的chunk数目(包括陈旧和新鲜的)。这个数目指明了对象是否还有关联chunk,以便我们保持删除记录。如果对象的所有chunk被删除,这时我们可以忽略该删除记录了。由于没有删除操作,一个文件的resize(调节大小)操作将会导致文件结束后面仍有有效的数据。我们在resize文件大小的时候写一个新的对象头,则可以指明缩短后的文件大小。这将导致擦除操作小小的改变:在垃圾回收时,不能只看chunk状态标志,还要读取每一页的标签来决定哪一个对象的chunk数目必须减少。当一个块被擦除时,也必须做这一步(作为删除的部分)。这增加了擦除和垃圾回收的代价(增加了读操作),但请记得,yaffs2不需要代价更高的页删除操作,综合起来,yaffs2更有效。3.3、标签结构Yaffs2中的每一个chunk都有下列信息:域注释字节(1K字节页)字节(2K字节页)blockState块状态,非0xFF表示坏块1 byte1 bytechunkId32-bit页序列号4 bytes4 bytesobjectId32-bit对象Id4 bytes4 bytesnBytes本页中有效数据数目2 bytes2 bytesblockSequence本块的序列号4 bytes4 bytestagsEcc标签ECC3 bytes3 bytesecc数据ECC,3字节/256字节12
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 完整儿童教学活动课件
- 教学设计和课件的区别
- 课件如何与学科教学整合
- 银矿选矿设备改造工考核试卷及答案
- 问诊技能考试题库及答案
- 法医资质考试题库及答案
- 起重机绿色认证标准考核试卷及答案
- 电影机械加工工艺流程图考核试卷及答案
- 电缆拉拔机工艺考核试卷及答案
- 冷凝器安全检查指南考核试卷及答案
- 2025至2030中国课外辅导行业发展研究与产业战略规划分析评估报告
- 小朋友个人卫生课件
- 校园食堂安全知识培训课件
- 抗洪抢险课件讲稿
- 2025年视觉传达设计师职业能力考试试题及答案解析
- 2025年公务员考试时事政治试卷(考点梳理)附答案详解
- 2025年法检系统书记员招聘考试(书记员知识+综合知识+行测+申论)历年参考题库含答案详解(5套)
- 饮料厂合作合同协议书模板
- 抵押贷款评估方案(3篇)
- 甘肃教辅管理办法
- 【课件】新学期新征程 课件-2025-2026学年高一上学期开学第一课主题班会
评论
0/150
提交评论