Flash文件系统

2024-09-22

Flash文件系统(精选8篇)

Flash文件系统 篇1

1 引言

近几年来,随着人们对嵌入式设备越来越高的应用需求,32位嵌入式系统应用逐渐深入到各个应用领域。Flash存储器制造成本低廉、存储容量大、数据非易失、无机械故障,在嵌入式系统中被广泛应用,尤其以NAND Flash做为大容量数据存储。根据NAND Flash的物理结构特点设计有效管理NAND Flash的文件系统可解决嵌入式系统中的大容量存储管理问题。而对设计文件系统而言,算法设计是文件系统的核心部分。

2 闪存的物理结构

NAND闪存阵列分为一系列的区块(block),这些区块是NAND器件中最小的可擦除实体,每个区块包含一定数量的页。擦除一个区块就是把所有的位(bit)设置为“1”(而所有字节(byte)设置为FFh)。写操作就是通过编程,将已擦除的位从“1”变为“0”。读写以页为单位,页包含数据区和空闲区(OOB,out-of-band),OOB区用于纠错码(ECC)等软件开销。NAND闪存复用指令、地址和数据总线、串行地址存取数据和发指令,节省芯片引脚数,这种结构不用改变硬件设计就可支持更大容量的芯片。

对NAND的操作有页读方式:读数据区页和读OOB区,页写入、块擦除,将块全部字节编程为0xFF来回收空间。目前市场上NAND Flash可分小页闪存:主数据区512字节,OOB区16字节;大页闪存每块有64页,每页有2048字节的主数据存储区和64字节的OOB区。

3 文件系统中的算法

根据闪存的物理结构,NAND Flash上的每页都有额外的空间(OOB区)用来存储附加信息,文件系统正是利用了这部分来存储文件系统相关的内容。

3.1 基本思想

文件系统上的所有内容(比如正常文件,目录,链接,设备文件等等)都统一当作文件来处理,每个文件都有一个页面专门存放文件头,文件头保存了文件的模式、长度、文件名、父对象标示等信息。NAND Flash的基本写入单位是页,文件系统在分配存储空间的时候也是以页为单位的,不过在文件系统中被称做chunk,其大小同NAND Flash中的Page一样大,但实际上它们意义不同,Page所指的是NAND Flash Memory上的实际数据储存区,而Chunk所表示的是文件系统所配置到的逻辑数据储存区对象,chunk的大小可以和Page不同。

以512+16Byte为一个PAGE的NAND Flash芯片为例,文件系统数据的存储布局如表1所示。

在这里一共使用8个Byte用来存放文件系统相关的信息(jkffs_Tags),这8个Byte的具体使用情况按顺序见表2。

在加载过程中需要将文件系统的目录结构在内存中建立起来。扫描每一个chunk。因为chunk通过OOB数据区来存放文件的信息,所以在扫描时不需要扫描整个chunk,而只需读取00B中的内容,这样可以大大加快系统的加载速度。根据从OOB中读取出的jkffs_tags信息来判断是文件头chunk还是数据chunk。然后根据文件头chunk中的内容以及数据chunk中的objectID、chunkID等信息在内存中为每个文件建立一个对应的对象。在扫描完所有的Block后,会把Flash内的所有File、Directory、SoftLink或HardLink建立成对应的jkffs_Object,并建立jkffs_Object之间的关系,这样就在RAM中形成一种架构,文件系统在RAM中加载成功。

3.2 文件系统的寻址

系统想要存取设备上的数据时是以Logical Address(相对于该文件所产生的偏移位址)的方式到所指定的地址进行存取,若想要到物理设备上取数据,则需要再经过转换,将Logical Address转换为Physical Address,才可从物理设备上读出数据至RAM中。

如何根据文件内偏移地址确定Flash存储地址呢?通过创建节点树可实现高效的寻址。我们先看结构定义:

这是一个长度为8的指针数组。据此结构创建的节点树最底层的节点成为叶子节点,中间的就是非叶子节点。不管是叶子节点还是非叶节点,都是这个结构。当节点为非叶节点时,数组中的每个元素都指向下一层子节点;当节点为叶子节点时,该数组拆分为16个N位(位宽,TnodeWidth)长的短整数,该短整数就是文件内容在flash上的存储位置。

最底层节点即叶节点中一个Tnode的位宽决定了文件系统所能寻址的最大空间,假设为TnodeWidth=16,也就是可以表示216=65536个chunk。对于时下的大容量NAND Flash,chunk的大小为2KB,因此这种情况下所能寻址的最大Flash空间就是128MB。为了能使文件系统用于更大容量Flash上,可以通过两种手段解决这个问题。第一种手段就是这里的TnodeWidth,通过增加单个Tnode的位宽,就可以增加其所能表示的最大chunk ID;另一种手段是采用chunk组,通过将若干个chunk合成一组用同一个ID来表示,也可以增加系统所能寻址的chunk范围。

文件系统通过节点树来查找文件是非常简单和方便的。中间节点使用的Tnode每组有8个指针,所以需要3位二进制代码对其进行索引,因此树每长高一层,chunkID就会多出3位。反过来,每3位非零chunkID就代表一层非叶节点。同时。叶节点使用的Tnode每组有16个指针,所以需要4位二进制代码对其进行索引。

根据上面所述可以得到下面的方法:对将要查找的文件的chunkID按照每三位分为一组,LEVELO的用四位表示。比如要查找chunkID为0x235的文件,须先将其划分为000,000,100,011,0101。通过表3可以看出所要找的这个page应该是在第二层的节点到1层的第4节点到。层的第三节点这颗子树上,也就是O层该节点的第5个与所指向的那个chunk。

当节点树结构TNode Structure刚开始建立时,仅建立最底层Lowest-LevelTnode,当File所配置的chunk数超过16个时,则此Tree会建立一个中间节点internal Tnode,并将其第0个Pointer指向原本的Lowest-Level Tnode。当读取到的chunk数愈來愈多时,会一直新增Tnode,且节点树也会越来越高。

假定有一个大小为128KB的文件,Flash的page大小为2KB,那么就需要64个page(或者说chunk)来存储该文件。一组Tnode的size是8个指针,或者16个16位整数,所以需要64/16=4组Tnode来存储物理chunk序号。这4组Tnode就是映射树的叶节点,也就是Level0节点。由于这4组Tnode在内存中不一定连续,所以需要另外一组Tnode,将其作为指针数组使用,这个指针数组的前4个元素分别指向4组Level0节点。随着文件长度的增大,所需的叶节点越多,非叶节点也越多,树也就越长越高。

3.3 节点树底层节点动态位宽

节点树底层节点位宽决定了文件系统所能寻址的最大空间,chunk的大小为512byte,那么32M NAND Flash需要65536个chunk,也就是需要大小为16bit的index来检索chunk。则64M NAND Flash至少需要17bit的index来检索所有chunk;128M NAND Flash至少需要18bit的index来检索所有chunk。实际上,为了便于处理规定Tnode的大小tnodeSize必须为32bit的倍数,tnodeSize=(tnodeWidth*16)/8,单位为Byte。其中tnodeWidth表示位宽,因为level 0的Tnode为16个physical chunk index。由上可知tnodeWidth为physical chunk index的大小,单位为bit。要使tnodeSize为4Byte的倍数,那么64MB flash的chunk_index_bits最小取18bit。这样tnodeWidth=18就能直接寻址128MB。

为了管理目前市场上各种主流的大容量NAND Flash,考虑增大位宽,比如tnodeWidth=20,以大页NAND Flash例,这样文件系统能寻址的最大空间:220*2KB=2GB,基本上能管理目前市场上主流闪存存储器芯片。但是这样建立的节点树占用了嵌入式系统中RAM的更多的空间,对系统性能有影响,而且对设计千变万化的嵌入式系统显得不够灵活。

在系统初始化过程中先读取NAND Flash信息,用闪存的总块数(nBlocks)乘以每块含有的页数计算出闪存所含有的总页数,也就是说文件系统需要管理这些页,然后计算出节点树底层节点位宽(tnodeWidth),具体算法如下:

(1)计算出总页数x=nChunksPerBlock*nBlocks。

(2)保证x大于1的情况下,对x右移1位,同时bits加1。

(3)重复(2),直到不满足x大于1。

(4)若bits为奇数,bits加1。

流程图如图1。

Bits值即为位宽,赋值给位宽(tnodeWidth)。这种方式解决了设定固定位宽占用系统RAM多的问题,能够做到管理市场上各种主流NAND闪存存储器。

在实际系统设计过程中,如果bits过大,可考虑使用chunk数组,采用一个chunk对应多个page方式,减少tnodeWidth值而达到同样的管理NAND闪存的目的。即使用chunk数组来增大文件系统的寻址范围,即通过将若干个chunk合成一组用同一个ID来表示,也可以增加系统所能寻址的chunk范围,这时,chunk的大小Page不同,假设一个chunk对应二个Page,把两个连续的页称为d_Chunk,包含1024字节数据(小页),这时d_Chunk[0]、d_Chunk[1]分别对应相应的页。

4 结语

NAND Flash凭借速度快、容量大、价格低等很多优点,成为嵌入式系统首选存储介质,尤其广泛应用于各种工业控制领域。目前最合理的管理NAND闪存的文件系统大多采用日志结构的设计思想,如jffs、yaffs等。本文件系统是在YAFFS2的基础上开发完成的,提出并应用了动态位宽、页数组等概念,实验证明能够灵活管理主流大容量Flash存储介质。

参考文献

[1]Samsung Corp.Flash Memory K9XXG08UXM DataSheet[S],Nov.2005.

[2]胡勇其,侯紫峰.嵌入式Linux下NAND存储系统的设计与实现[J].计算机工程,2006,(2).

[3]http://www.aleph1.co.uk/.

Flash文件系统 篇2

关键词:车载MP3 Flash存储管理系统 FAT 文件系统

引言

目前车载播放器基本上采用的是CD播放器、MD播放器以及磁带播放器等。由于这类播放器内部具有一些机械式传动部件,再加上装在汽车这个特定的环境中,经常会由于机械传动或者光头、磁头受震动发生跳音或绞带现象,从而影响音质。

Flash存储器由于具有存储容量大、掉电数据不丢失、何种小以及可多次擦写等许多优点,正逐步取代其它半导体存储器件而广泛应用于移动电话、PDA以及数码相机等移动电子产品中。其作为存储数据和应用程序的存储体,可以将大量数据方便、快捷地移动和交换。

基于上述两点设计了一个车载MP3系统。该系统采用Flash作为外存储器,并且由全固态器件组成,播放时不会出现跳音或绞带现象,音质也很好。由于Flash存储器在应用过程中可能会出现坏损单元,影响车载MP3播放器的性能,因此本文针对Flash存储器自身的物理特性,设计了一个文件系统,对Flash存储器中的数据内容进行基于文件名或者文件号的存储管理以及应用透明的坏损管理。该系统优化了存储速度和存储空间,提高了车载MP3播放系统的可靠性。

1 Flash存储器特点

Flash内部分为多个存储单元块(block),每个存储单元块又由多个页(page)组成。存储单元块是可擦除的最小单位,页是写入数据的最小单位。

Flash存储器读取数据与一般的存储器类似,可以实现随机读取,读出的速度也很快。而Flash存储器的写操作则和一般的存储器有所不同,Flash的写操作必须先按存储块擦除(写入0xff到要擦除的存储单元块中),再按页顺序写入。由于Flash存储器擦除耗时较长,所以Flash存储器写入的时间主要在于Flash存储器内部的擦除操作等。

Flash存储器第一块一定是有效块,而其它块可能会在使用前就是坏块或者在使用过程中变成坏块(invalid block)。Flash存储器对内部坏块的判定是,根据其每一个单元存储块中的第3区中的第6 Cloumn内容是否为0xff来定。虽然Flash存储器内容会有坏块,但是由于每一块的内部结构都是相互独立的,所以只要对其状态加以识别,坏块并不影响系统对有效块的操作。

Flash文件系统 篇3

关键词:航空电子系统,大容量存储,NAND flash,文件系统

1 概述

NAND Flash是一种具有高存储密度、低功耗、非易失、大容量、优异的稳定性的存储介质, 非常适用于体积小、功耗低、环境恶劣、可靠性要求高的系统, 当前已被航空电子系统的大容量存储设备广泛采用。[1]随着技术的发展, 航空电子系统中普遍需要通过文件系统来管理大容量存储设备。机载环境的特殊性对文件系统提出了诸多可用性和可靠性方面的需求, 例如崩溃恢复、快速启动、损耗均衡、垃圾回收和高实时性等。

现有很多Flash文件系统, 例如Reliance、JFFS2、YAFFS2等, 都具有上述功能。该文基于机载嵌入式文件系统的需求, 对现有的部分文件系统的工作原理和特点进行对比分析, 对机载嵌入式Flash文件系统进行评估并给出相关选用建议。[2]

2 机载嵌入式文件系统需求

航电系统对大容量存储设备提出了抗恶劣环境、高可用、高可靠和高安全的要求。其中抗恶劣环境、高安全主要采取硬件手段实现, 而高可用、高可靠需软硬件结合保证。因此, 对于机载嵌入式文件系统来说, 具体需求包括:

1) 可用性:可用性是指在机载领域嵌入式系统中系统资源受限的应用情景下, 文件系统能够充分考虑系统资源, 保证实时性, 并能够高效的完成擦除、读写等操作。同时, 文件系统能够根据基于NAND Flash的大容量存储器的操作特点, 做相应针对性设计, 具有NAND Flash的基本管理功能, 如根据NANF Flash的异地更新 (out-of-place) 、有限的擦写次数等特征, 提供垃圾回收、损耗均衡等。

2) 可靠性:机载大容量存储设备的工作环境恶劣, 工作电源不稳定和突发性断电等状况极易导致存储设备中数据的灾难性损坏。因此, 机载嵌入式文件系统的可靠性包含两方面的内容:一是Flash文件系统能够在程序崩溃或系统掉电时, 保证文件系统的一致性和完整性不受影响, 即具备崩溃恢复能力;二是能够通过灵活的校验机制与坏损管理, 维护数据正确性, 确保现存储单元的可靠管理, 以保证数据的一致性和延长物理存储硬件的使用寿命。

3 典型Flash文件系统的实现方法

典型的Flash文件系统的实现方法有两种:

一是基于转译层 (Flash Translation Layer, FTL) 的文件系统。从系统层看来, 转译层将Flash设备被转变为一个可覆写的块设备, 从而可应用传统的磁盘文件系统。FTL把块设备上的文件系统直接应用到闪存上, 直观而方便的隐藏Flash的诸多限制。但转译层往往涉及产权保护, 从而阻碍了Flash文件系统的发展和推广, 同时, 影响了工作效率。

另一类是Flash专用文件系统。针对传统文件系统的问题, 从实施掉电保护, 确保数据可靠性、完整性的角度, 针对Flash的特点设计了一些专用文件系统。Flash专用文件系统可分为两大类, 一类是通用Flash文件系统, 既可用于NOR Flash, 也可在NAND Flash上运行;二是专门针对NAND Flash设计的Flash文件系统。

此外, 用于Flash大容量存储器的具有高崩溃恢复能力的文件系统的工作机制还分为日志型和事务型两种。

日志型文件系统基于日志模型, 会详细记录元数据中的操作和所修改的文件数据信息。每当修改文件的访问权限或者所有权, 则新建一个结点将新元数据信息储存于日志最后。若是更新文件内容, 不会用新数据直接覆盖旧数据, 而会在Flash上合适的区域中存储新建的数据结点, 并用version属性值将新旧数据结点加以区分。一旦系统发生故障, 比如突然掉电或程序崩溃, 由于旧数据还在, 只需重放日志, 即可将文件系统恢复到故障前状态。[3]

由于记录日志既需要将数据写入日志又需要写入外存, 造成一些额外的开销, 学术界开始慢慢的转入对事务型管理模式的研究上。事务型文件系统具有较高的可靠性, 且不要求更快的CPU或是更大的存储空间。该类文件系统保护措施的理念类似于银行事务的思想, 保留原始数据直到新数据写成功并且文件事务完成。在文件事务中, 所有的文件系统修改, 包括目录、文件、的修改, 都将保存在介质中某个空闲并且不含活跃数据的区域。由于新事务的数据被写入到介质的空闲区域, 从而消除了错误发生的可能性。写入到介质的空闲区域, 可保持文件系统的状态。因此, 之前事务的有效数据将一直有效。当写入操作期间发生系统错误时, 如掉电, 事务型文件系统总能提供有效的文件系统数据。

4 典型文件系统原理分析

由于基于转移层的文件系统如EXT2、FAT等对程序崩溃或系统掉电时的崩溃恢复能力较差, 该文主要分析JFFS2、YAFFS2、Reliance三种常用的Flash文件系统。

根据NANF Flash的异地更新策略, 以页为单位进行读写, 以块为单位进行擦除;更新Flash中数据时, 仅是将原有数据页标记为无效, 在空闲页写入更新的数据;这样, 一段时间后需擦除无效页较多的块以回收存储资源, 该过程称为垃圾回收。同时, 每一个块的擦写次数有限, 为平衡设备中每一块的擦出次数以达到最大的设备寿命, 还需引入损耗均衡的思想。下面对三种文件系统的实现原理和各自针对性设计的技术策略进行简要分析。

4.1 JFFS2

JFFS2是一种日志型的专用Flash文件系统。JFFS最初由Axis Communications公司专门为NOR Flash开发, 后由Red Hat对其进行改进, 产生了支持NAND Flash的JFFS2。

JFFS2的数据操作全部按照日志方式保存在Flash设备中, 完全按照日志进行管理。JFFS2的基本结构为一长列的节点, 每个节点包含了文件的实际数据或者关于文件的其他一些信息。[4]

以垃圾回收为基础, JFFS2具有简单的损耗均衡算法, 也为垃圾回收的处理机制。JFFS2将闪存上所有擦除块分为三个队列, 分别为干净块链表 (clean_list) 、脏块链表 (dirty_list) 和空闲块链表 (free_list) , 基于这些链表来完成垃圾回收操作。JFFS2文件系统基于概率算法来选定垃圾回收操作的目标链表。系统定义全局变量jiffies, 表示系统时钟;当jiffies模100不为0时, 系统对脏块链表中某一块进行回收操作;当jiffies模100为0时, 系统对干净块链表中某一块进行回收。[5]

尽管JFFS2解决了Flash存储器文件系统的一些问题, 但是随着Flash存储器的容量越来越大, 它也表现出一些严重的缺陷。首先, JFFS2的挂载时间比较长;其次, 随着容量的增加, 其内存消耗增大;最后, 它不能保证损耗平衡的确定性。

4.2 YAFFS2

YAFFS2是一种日志型的专用Flash文件系统。YAFFS文件系统由Aleph One公司开发, 专为NAND Flash存储器设计的嵌入式文件系统, 适用于大容量的存储设备。YAFFS2是YAFFS的第二个版本。

YAFFS2中, 文件是以固定大小的数据块进行存储的。这种实现依赖于它能够将一个数据块头和每个数据块关联起来。每个文件 (包括目录) 都有一个数据块头与之相对应, 数据块头中保存了ECC和文件系统的组织信息, 用于错误检测和坏块处理。[6]YAFFS2把这个数据块头存储在Flash的备用空间中, 充分考虑了NAND Flash的特点。当文件系统被挂载时, 只须扫描存储器的备用空间就能将文件系统信息读入内存, 并且驻留在内存中, 不仅加快了文件系统的加载速度, 也提高了文件的访问速度。

YAFFS2也提供损耗均衡和垃圾回收功能。在YAFFS2文件系统中设立Blockstate结构用于表示擦除块的各种状态, 如空、满、已损坏和分配等状态。另有B1ock Info结构, 用于描述块属性, 记录块内剩余空闲页数、块的状态等信息。YAFFS2采用数组管理所有块, 分配空间时, 按顺序对存储空间进行分配, 从而实现损耗均衡。YAFFS2采用综合垃圾回收策略, 具有两个垃圾回收线程, 分别负责在不同情况下完成垃圾回收任务。[7]一个线程具有最低优先级, 只在系统空闲时才会启动, 该线程采用贪心算法, 针对具有最多无效数据的擦除块, 这样可以一次回收尽可能多的存储空间。另一个线程具有最高优先级, 当系统负载较大, 需要很多存储区空间时, 启动该线程, 它最先适应算法以便提高执行速度。

但是上述繁复的日志操作会增加一定的内存消耗, 也会增加系统的加载时间。

4.3 Reliance

Reliance是Datalight公司开发的事务型文件系统, 结合Flash FX转译层可用于管理Flash设备。[8]

Reliance基于事务模型来保护文件系统并且维护数据完整性。Reliance可以不必进行数据恢复操作, 保留原始数据直到新数据写成功并且文件事务完成, 如果数据写入期间发生中断, 文件系统的原始状态还保存在介质中, 使得文件系统总能处于有效状态。

Reliance的垃圾回收功能由FTL层的Flash FX组件完成。在Flash FX中, 将大量无效块划入擦除区域并请求回收操作。在垃圾回收过程中, 先复制擦出区域的有效数据到空闲备用擦除区, 然后擦除旧区域并将其作为新的备用擦除区。Flash FX的损耗均衡包含动态损耗均衡和动态损耗均衡两部分操作。动态损耗均衡算法针对频繁更新的数据和较少使用的存储空间。当更新数据或者写入新数据缺乏足够空间时, 则会触发动态垃圾回收。该算法将从当前可用块中确定一个擦除次数最少的块作为目标块, 并将有效数据写入该目标块。每次都对使用次数最少的可用块进行操作, 一定程度上达到均衡利用频繁更新或较少损耗的设备块。然而, 一些数据写入数据块后, 基本不会再更新 (比如地图信息) , 这些块称为冷数据块。这些冷数据块无法被动态损耗均衡算法顾及, 导致其使用频率很低。作为补充, 静态损耗均衡算法能够有效地解决该问题。静态损耗均衡算法, 会比较擦除次数最多的块和次数最少的块, 二者擦除次数的差超过一定阈值时, 交换二者所存储的数据, 目的是在满足损耗均衡的同时, 尽可能减少存储器总的擦除次数。

基于事务型理念, Reliance文件系统在大容量介质中可快速启动, 并可长时间保持有效状态, 系统初始化不需要执行存储介质检测或扫描从而减少加载时间。

5 测试结果与理论分析

文件系统应针对NAND Flash的特点, 提供高效的损耗均衡和垃圾回收机制的同时, 尽可能提高加载速度和读写性能, 满足实时性。基于广泛的资料收集和实验验证, 我们对上述三种文件系统对比分析。

在加载时间方面, Flash文件系统的加载时间已经为系统启动延迟的最重要的原因, 当Flash容量和存储数据大小都很庞大时其影响更为明显。文件大小的改变、整个分区的利用率, 都将影响到文件系统的加载时间。我们很容易通过加载指令来测量加载时间。

由于基于事务结构的Relaince在加载速度上比日志型的JFFS2和YAFFS2文件系统存在明显的优势。

在读写性能方面, 影响Flash文件系统读写性能的因素非常复杂, 涉及映射机制、垃圾回收算法、Flash结构、压缩算法等等。文件系统标准检测程序Benchmark可以用于直接测试读写性能。由此, Relaince的读写性能优于JFFS2和YAFFS2。

由图可知, 由于日志型文件系统在系统启动和读写操作过程中加入一些日志记录操作, 从而增加了加载时间, 降低了读写数据的速度, 而在事务型文件系统中, 通过事务型操作改善了前者的问题。上述测试结果符合原理分析。

6 结束语

本文针对航电需求, 分析了典型Flash文件系统的实现方法和工作原理, 对JFFS2、YAFFS2和Reliance进行了分析比较, 认为针对NAND Flash的专用文件系统JFFS2和YAFFS2的功能完备、原理简单高效, 而通用文件系统Reliance的工作机制更为复杂;但基于事务模型的Reliance相比于基于日志型的JFFS2和YAFFS2, 具有相近的可靠性的同时, 可以保证更高的性能, 对航空电子系统中Flash文件系统的选择具有重要意义。

参考文献

[1]陈智育.嵌入式系统中的Flash文件系统[J].单片机和嵌入式系统应用, 2002 (2) :5-8.

[2]Chin-Hsien Wu, Tei-Wei Kuo, Li-Pin Chang.Efficient initialization and crash recovery for Log-based file systems over flash ACM symposium on Applied computing, 2006:837-863.

[3]MMCA Technique Committee[C].The Multimedia Card System Specification.US:Multimedia card association, 2003.

[4]Li-Pin Chang.On efficient wear-leveling for large-scale flash memory storage systems.Proceedings of the 2007 ACM symposium on Applied computing, 2007:1126-1130.

[5]张小平.嵌入式系统中NAND Flash文件系统的研究[D].太原:太原理工大学, 2010:17.

[6]CHEN TIANZHOU, HU WEI.Smart File System:Embedded File System Based on Nand Flash[C].IEEE Computer Society, 2006, 14 (4) :65-66.

[7]张磊.基于闪存的嵌入式文件系统的研究与实现[D].成都:电子科技大学, 2005:1-2.

精简Flash文件体积七法 篇4

我经过长时间的使用,也不经意地总结了七条为Flash减肥的小方法,希望通过这里与各位闪客们分享和研究。

1、尽量减少文字的叙述。

2、应尽量把图画转为“电影剪切”或“图形”。

3、导入的图片格式最好是*.jpg或*.gif这两种网络盛行的压缩图片格式(如果没有这两种格式的图片,就ACDSee等软件进行转换即可),

4、如果需要导入音乐文件,最好是*.MP3,这样你的源代码不会太大。

5、导入音乐后,在它的属性设置里去掉“使用文件默认品质”,然后,在它的品质设置如下:“压缩”选择MP3;“位比率”选择16Kbps;“品质”选择快速。如此设置之后,3MB的MP3输出后不足500KB,音质只有少量的损失,这样也可以算是音乐DIY吧!

6、如果非特殊需要,就不要把图片“打碎”,应该尽量在图片帧中进行。

7、不要在同一帧放置过多的“电影剪切”,否则可能使你的*.SFW成倍增肥。

Flash文件系统 篇5

一般的嵌入式目标系统体积小,不可能象PC机那样带一个很大的磁盘存储器作为文件系统存储器。由于Flash存储器具有高可靠性、高密度、存取速度快、掉电可保存等特点,使之成为理想的嵌入式文件系统存储器。

嵌入式文件系统建立在实时系统内核之上,其设计不仅要求满足数据存储的各种要求,而且还要考虑其应用环境和存储器的物理特性。MS-DOS的FAT文件系统技术成熟、结构简单、系统资源开销小,嵌入式文件系统易于在设计上兼容FAT文件系统[1]。

2 可靠性

在MS-DOS的FAT文件系统中,仅仅对数据区域提供坏损管理,而对于它的主引导记录、文件分配表和根目录这三个极重要的文件系统数据结构却未做任何保护(虽然MS-DOS的FAT文件系统中存在着两张FAT表,但是DOS只是在更新FAT1时简单地复写FAT2表,但从不使用它)。一旦这三个区域的内容出现一点失效,将必然导致文件数据的大量损失。另外,如果这些数据结构的存储区域发生物理性损坏,更会导致整张磁盘的报废[2]。这在由Flash存储器占据很大成本比重的嵌入式应用中,是非常不希望的。

归结起来,嵌入式系统中的Flash存储器主要面临两大类不稳定因素:一是Flash存储器本身可能出现物理性的损坏;二是嵌入式系统面对较多的突发掉电与重启动,造成Flash存储器写操作的异常终止。

针对Flash存储器的物理损坏问题,对文件数据区域提供坏损块管理。在系统格式化时对坏块进行标记。

针对Flash存储器的写操作异常终止问题,将系统记录、文件分配表和根目录表这三个对Flash文件系统最重要的数据结构均进行双份的存储改善其安全性。在文件系统的操作中,程序对每一个表结构的两个备份进行顺次修改,以此确保Flash存储器上总是存有一整套完好的系统记录表、文件分配表和根目录表。在每块的首页空闲区保存了FAT表中该簇的簇值。在系统被启动运行时,文件系统初始化时,根据三个表在所在块的最后一页空闲区的写入成功标志和最后的更新时间确定每一张表备份的合法性和有效性,读取正确的记录。通过这样的设计,即使文件系统在使用中出现了写操作异常终止的情况,错误将只涉及当时被操作的文件数据,不会扩散给Flash文件系统中的其他文件,使损失降到了最低,更不会因此损坏三个文件系统表结构,造成整个文件系统的彻底瘫痪。

通过以上的改进,该Flash文件系统的可靠性比MS-DOS FAT文件系统有了很大的提高。

3 耗损平衡

JFFS文件系统中系统耗损平衡机制可以在不同的功能模块中采取不同的策略来控制[3]。下面分析耗损平衡机制在不同功能模块中的实现方法,研究它们的实现效率和系统代价。

(1)在垃圾收集模块中实现

(2)在块分配模块中实现

(3)使用专门的耗损平衡模块实现

上述三种策略可以在系统不同的模块中同时或分别实现,在耗损平衡的控制效果和实现耗损平衡的系统开销上有所不同。

通过上面三种实现闪存文件系统耗损平衡方法之间的比较,考虑到策略在嵌入式系统中实现的开销,考虑兼容FAT文件系统对系统记录、FAT表的频繁更新操作。对于系统记录、FAT表和根目录表采用交替更新来控制系统的耗损平衡;对于数据区在文件系统启动建立空闲块链表时,产生一个随机数,从该随机数开始的块开始搜索建立空闲块链表,如没有空闲块再从该存储器的第二块开始向后搜索空闲块,再根据空闲块的分配按先进先出策略来控制系统的耗损平衡。这样基本上保证了存储器各块的平均使用。

4 垃圾回收

FAT文件系统中没有垃圾收集机制,但由于FlashMeory的特点,为了提高文件系统性能加入了垃圾机制,优化文件系统的性能。考虑到嵌入式系统自身的特点,即系统中资源的有限性,在垃圾收集策略的实现上需要一定的可行性,尽量降低算法的复杂度,减小系统开销,且应该便于实现。故本文件系统垃圾收集算法如下:

将Flash盘中块分为三个队列,分别是干净块,空闲块和脏块队列。干净块队列是此块上的数据都有效。脏块是此块的数据己删除,需擦除变为空闲块。空闲块是指没有数据存储的可分配块,它们的状态可记录在FAT表中,当存储文件需要分配块时,如没有空闲块可分配,则启用垃圾收集机制进行脏块的擦除。或者当系统启动或空闲时,空闲块的数目少于设定的空闲块的数目n时,则启用垃圾收集机制进行脏块的擦除。其垃圾收集流程如图1所示。

5 性能优化

为了提高系统的性能,要采取以下策略:

(1)由于文件的写入速度与要擦除的块时间确定,同时还由要写入的数据量有关,故尽量减少写入的次数。

(2)文件删除时,对其目录项的第一个字节做删除标记,同时释放该文件所占用的簇链,并标记为脏块,当系统启动或空闲时启动垃圾收集进程进行脏块的收集。

(3)为加快给文件分配空闲块的速度在系统启动时就建立空闲块链表,按先进先出策略取得空闲块。

(4)为提高文件的查找速度,除根目录外将文件目录项所占用的簇在FAT表中标记为EOC,查找文件时只查找根目录和簇值为EOC的簇,提高了查找文件的速度。

(5)将FAT表以数组形式调入内存做为全局变量,利用数组的随机访问特性,大大提高了簇的寻址速度。

6 多任务支持

为了加载的文件系统跟内核很好地配合工作,在μcos-Ⅱ内核的0S_TCB中增加了文件控制块指针,该指针指向该任务打开的文件控制块链表。用户任务对文件进行读写操作时,系统必须维护当前被用户任务所打开的所有文件,用文件控制块来登记这些被打开的文件的相关信息。一个用户任务可能同时打开几个文件,对文件读写时要记录下文件的当前位置,以便在挂起后重新调度运行时能从这个位置继续进行。每个文件控制块记录了当前任务打开每个文件进行读写的当前位置。

7 实现与测试

(1)硬件环境

FFS的测试环境由宿主机和目标机组成。宿主机为一般PC机;目标机ARMSYS44BO-P嵌入式系统开发板,配有K9F5608型号的32M的NandFlash芯片。

(2)软件环境

目标操作系统:μcos-Ⅱ;宿主机操作系统:WINXP;开发调试编译工具:ARM Develop Suite V1.2。

(3)通信设置

PC机通过网络接口连接到开发板的网络接口,这样建立了主机与目标机的一条通信线路。这条线路主要用于程序下载。第二条线路是PC通过串口和目标板上的串口相连,用于程序下载,调试信息交互,主要用于目标系统的数据回显,我们在WINXP操作系统中启用一个监控串口的超级终端来接收并显示数据。

(4)系统测试

“测试”一般是指“为了发现程序中的错误而执行程序的过程”。但是在不同的开发阶段、对于不同的人员,测试的任务是不同的。

(5)功能测试

功能测试分为两部分,第一部分测试Flash驱动程序;第二部分测试文件系统核。通过功能测试和可靠性测试,验证了FFS文件系统有比较完整的文件系统功能,在数据的可靠性等方面能够满足设计初衷。

摘要:基于实时嵌入式操作系统μCOS-Ⅱ内核,采用类似DOS的FAT文件系统,实现了一种适用于NandFlash的嵌入式文件系统。该文件系统从可靠性、耗损平衡、垃圾回收及文件系统的优化几个方面进行设计。

关键词:flash存储器,嵌入式,文件系统

参考文献

[1]张长宏.一种基于NandFlash的嵌入式文件系统的设计.青海大学学报(自然科学版),2006;06.

[2]罗华春.基于Flash存储器的嵌入式文件管理器设计.交通与计算机,2005;01.

Flash文件系统 篇6

关键词:嵌入式系统,多媒体,Flash存储器

随着科技的不断进步, 电子信息技术也不断向前发展, 而嵌入式的系统已经在多个行业与领域中广泛使用, 例如通讯行业, 此外, 在数字信号技术以及人际交互界面等技术的不断发展, 嵌入式多媒体应用的使用数量也将逐年上升[1]。但是在多媒体应用系统中存在数据内容多且复杂, 而Flash存储器由于其成本低、机械故障发生率低以及容量较大等特点, 在嵌入式的系统中普遍使用。

一、Flash存储器在操作上的特点

Flash存储器与SRAM存储器在读取数据方面是基本相同的, 能够完成任意的随机读取。它与其他存储器最大的不同就在于操作方面。Flash存储器在进行操作过程中必须经历两个工程, 即擦除与写入。如果要在Flash存储器中的一个单元内进行写入的话, 就必须首先将本来在改单元中的区块进行“擦除”, 之后整个单元中的全部数据被消除;然后在该单元中进行“写入”, 在进行“写入”的过程中, 必须坚持一次性将所有数据书写完;此后对所输入的信息数据进行检验, 确保其准确性[2]。

为了加强Flash文件系统与其他Flash存储器不同的移植功能, 应该对Flash存储器设备和Flash文件系统的使用接口位置安装3个最基本的操作, 即区块的擦除、页面的书写以及页面的读取。这种做法可能会降低一些Flash存储器产品本身所具备的特殊性, 但是加强了Flash文件系统与其他Flash存储器产品之间的适应性。此外, Flash存储器在写入时间上存在的缺陷与数据传递的关系不大, 而是和Flash存储器中的擦除、写入有关;微处理与Flash存储器在读取速度上都比较快, 所以即使将读与写的基本单位发展到页面中, 但是所增加的操作时间还是比较短。

二、加强Flash文件系统的可靠性

MS-DOS中的FAT文件系统内, 只是对数据区域中的损坏情况进行管理, 但是没有对三个很重要的文件系统内文件数据结构以及分配表进行管理与保护。如果三个文件系统中的内容出现问题, 那么就会造成大量文件数据的损坏。此外, 假使上述数据的结构存储区域出现物理性的破坏, 那么将会使得整张磁盘被破坏。

嵌入式多媒体系统应用中的Flash存储器存在两个不定因素, 具体是:第一, 嵌入式多媒体系统常常会出现突然重启以及断电, 进而使得Flash存储器中的写入操作出现异常状况, 最终导致系统停止运转;第二, Flash存储器自身存在着很多的物理性的破坏[3]。 (1) Flash存储器在写入操作异常而导致系统终止的情况, 利用文件分配表、登记表以及记录表者三点将Flash文件系统中比较重要的内容与数据进行双份保存, 进而保证数据的安全性。在对Flash文件系统进行操作过程中, 应该将每个表的结构保存两份, 并依次进行修改, 从而保证整个Flash存储器中一直具有一套比较完整的系统记录表、登记表以及分配表。当系统被启动时, 文件系统将会对其本身进行检查, 依据系统开头、结尾、上述三表中的标识幻数, 判断系统中备份表是否具备时效性以及合法性, 并判断系统在前一次系统关闭之前存在的问题, 并及时采取有效措施。对系统进行该设计, 那么即使系统出现突然停止的情况, 也不会对整个系统组成威胁, 而只会对当前所操作的文件系统, 并且也不会系统中的三个表造成破坏, 进而导致整个系统停止运行。 (2) 对于Flash存储器本身所存在的物理性破坏, 应该对文件数据提供区域进行管理, 检查是否被破坏, 并将其中的记录表、分配表以及登记表等文件系统内的数据结构采取悬浮位置方式对其进行储存。也就是对三大文件系统内的数据结构采取不固定储存的方式, 而对于其中的数据储存采取分配管理的方式。这种设计方式能够有效避免由于其中一个区域出现问题而对其他区域造成威胁, 进而使得整个文件系统被破坏。主要的设计方式为:在系统记录中制定一个文件记录保存区, 将系统中的数据存储在该保存区内, 并在系统初始化操作时利用标志幻数的手段对保存区进行扫描, 从而了解其具体的分布位置;而在文件数据区域中放入文件登记表与分配表, 并利用系统记录中的索引对其查找。

三、结束语

Flash文件系统与MSDOS中的FAT基础系统相类似, 能够有效提高与改善系统中信息数据的开销以及可靠性, Flash存储器对于嵌入式多媒体应用中多媒体数据资源的高效使用以及其储存性能上, 得到了有效的提高。由此可见, 在嵌入式多媒体应用中使用Flash文件系统是十分合理、有效的。

参考文献

[1]侯伟先, 刘凯.嵌入式Linux系统的移植[J].科技信息, 2009 (06)

[2]全蕾, 王志萍.flash存储器的嵌入式文件系统设计[J].电脑编程技巧与维护, 2009 (06)

Flash文件系统 篇7

在ASP.NET网页制作中经常会插入Flash文件,具体的方法有三种,一种是使用adobe公司推荐的object、embed方法,第二种是使用swfobject脚本,第三种是使用第三方控件完成。

2 使用object脚本插入Flash

具体代码如下:

采用这种方式是为了兼容浏览器。OBJECT标签是用于Windows平台的IE浏览器的,而EMBED是用于Windows和Macintosh平台下的Netscape Navigator浏览器以及Macintosh平台下的IE浏览器。在上述代码中只要修改movie和src处的代码即可完成Flash文件的插入。

3 使用swfobject脚本插入Flash文件

Swfobject脚本的官方地址为:http://blog.deconcept.com。SWFObject是一个基于Javascript的Flash媒体版本检测与嵌入模块,其主要使用目的是将Flash嵌入网页中的操作更简单,在其最新2.x版本中加入了版本检测功能,其代码符合XHTML的标准验证,同时解除了IE对Flash点击激活的限制,对主流浏览器兼容。

SWFObject的使用是非常简单的,首先需要包含swfobject.js这个js文件,然后在html代码中插入一些简单的JS代码,就能嵌入Flash媒体资源了。下面是一个最简单的范例:

这个地方显示Flash文件

要注意的是在2.X版本中“swfobject”该单词是小写的,在该脚本的1.5版本中为“SWFObject”,采用的是大写。

3.1 Swfobject.js的使用参数

swfobject.embedSWF(swfUrl,id,width,height,version,expressInstallSwfurl,flashvars,params,attributes)

其中前5个为必选参数,后4个为可选的参数:

(1)swfUrl这个参数为必选参数,string类型,指定SWF的URL,这里指定为flash.swf。

(2)ID这个参数为必选参数,string类型指定将会被Flash内容替换的HTML元素(包含替换内容)的ID,这里为“flashcontent”。

(3)width这个参数为必选参数,string类型,指定SWF的宽,这里指定为400。

(4)height这个参数为必选参数,string类型,指定SWF的高。这里指定为400。

(5)version这个参数为必选参数,string类型,指定发布的SWF对应的Flash Player版本(格式为:major.minor.release),这里指定为9.0.0。

(6)expressInstallSwfurl这个参数为可选参数,string类型,指定expressInstall.swf的路径,并激活新版Flash的下载程序,这个参数是为了自动升级Flash控件,如果不填路径,则需要填入null。

(7)flashvars这个参数为可选参数,string类型,这个参数在实际中基本不用考虑。在上述代码中为null。

(8)params这个参数为可选参数,string类型,用name:value对指定你的嵌套object元素的params。上述代码中为{wmode:‘transparent’}。

(9)attributes这个参数为可选参数,string类型,用name:value对指定object的属性。

3.2 多种方式嵌入代码

对于flashvars,params,attributes这3个可选参数来说,有多种方式嵌入代码。

以params为例来说明。

(1)在定义对象的时候添加属性和值

(2)在对象创建之后用点号添加属性(properties)和值代码如下:

(3)还可以把属性和值直接写在代码里面

代码如下:

如果在网页中有多处需要插入Flash文件的话,可以简单地复制多份该部分代码,并修改相应参数即可。

4 使用第三方控件来插入Flash文件

在ASP.NET中嵌入Flash文件的第三方控件,比较著名的要数ASPNetFlash WebControl控件了。但是这个控件不是免费的,这里仅仅做简单介绍。

5 结语

采用第一种object、embed方法插入Flash文件,操作上没有什么困难,缺点是默认情况下会有Flash文件在Web网页上面可能需要点击以激活问题。同时,这样不利于重复插入Flash文件,可能造成代码极度重复、冗余。

第二种采用swfobject脚本的方法是现在比较流行的方法,其中像比较流行的视频播放网站六间房、酷六之类的都采用此方法,其优点是代码简洁,结构清晰,可以对客户端Flash版本进行即时升级提示,代码符合XHTML的标准验证,对主流浏览器兼容等。缺点是缺少人性化操作提示,对于一些新手来说过程比较复杂。

第三种方式插入Flash优点是使插入过程完全流程化、控件化,拖过来控件稍微设置下就能使用了。可以在后台代码中控制等。缺点是大多数控件都是收费的。

摘要:在ASP.NET网页制作中插入Flash文件是很频繁的操作。介绍在ASP.NET网页制作中插入Flash的常用到的3种方法,其中详细阐述了使用swfobject脚本插入Flash的方法,同时比较了这3种方法的优点和缺点。

Flash文件系统 篇8

一、使用“SWIFF POINT PLAYER”插件

第一步, 安装SWIFF POINT PLAYER插件。

第二步, 运行PowerPoint 2003, 切换到要插入Flash动画的幻灯片。

第三步, 单击“插入”菜单, 在弹出的下拉菜单中单击“Flash Movie…”, 弹出一个“打开文件”对话框 (如图1) , 再在弹出的对话框中找到要插入的Flash文件, 单击“打开文件”窗口的“打开”按钮, 这样, 放映幻灯片时即可直接播放Flash动画了。

二、使用“Shockwave Flash Object”控件法

第一步, 运行PowerPoint 2003, 切换到要插入Flash动画的幻灯片。

第二步, 单击“视图”菜单, 在弹出的下拉菜单中单击“工具栏”, 再在弹出的子菜单中单击“控件工具箱”, 便出现“控件工具箱” (如图2) 。

第三步, 单击“控件工具箱”中的“其他控件” (工具箱中的最后一个按钮) , 弹出ActiveX控件窗口, 窗口中列出了系统已经安装的所有ActiveX控件 (如图3) 。

第四步, 利用键盘上的光标控制键, 在控件列表中找到“Shockwave Flash Object”并单击 (如图2) , 此时系统会自动关闭控件窗口。

第五步, 将光标移动到PowerPoint的编辑区域中, 光标变成“十”字形, 按下鼠标并拖动, 画出适当大小的矩形框, 这个矩形区域就是播放动画的区域。

第六步, 右单击矩形框, 在出现的快捷菜单中单击“属性”, 出现“属性”窗口 (如图4) 。

第七步, 在“属性”窗口“Movie”一栏右侧的文本框中直接输入Flash动画的路径。

第八步, 调整幻灯片上控件对象的大小、位置, 即可在幻灯片放映方式下直接播放Flash动画了。

三、插入对象

第一步, 运行PowerPoint 2003, 切换到要插入Flash动画的幻灯片。

第二步, 单击“插入”菜单, 在弹出的下拉菜单中单击“对象”, 此时会弹出“插入对象”对话框 (如图5) 。

第三步, 选择“由文件创建”, 单击“浏览”, 出现“浏览”对话框 (如图6) , 通过该对话框找到所要插入的Flash文件, 最后单击“确定”返回PowerPoint。

第四步, 这时幻灯片上便出现了一个Flash动画的图标, 图标的大小和位置可以根据需要随意改变。右单击该图标, 在弹出的快捷菜单中单击“动作设置”, 出现“动作设置”对话框。

第五步, 激活对象的方式可以为“单击鼠标”也可以是“鼠标移动”, 本例采用系统默认的“单击鼠标”。再选中“单击鼠标”标签中的“对象动作”, 最后单击“确定”, 完成激活动画的设置, 返回PowerPoint。

第六步, 放映该幻灯片, 当鼠标单击Flash动画图标时, 出现一询问框, 单击“是”, 系统便会调用Flash程序来播放动画。

四、插入超级链接法

第一步, 运行PowerPoint 2003, 切换到要插入Flash动画的幻灯片。

第二步, 在其中建立任意一个对象。选中这个对象, 单击“插入”菜单, 在弹出的下拉菜单中单击“超级链接”, 此时会弹出“插入超级链接”对话框 (如图7) 。

第三步, 通过该对话框找到所要插入的Flash文件, 用鼠标单击该文件, 最后单击“确定”, 返回PowerPoint。

第四步, 放映该幻灯片, 用鼠标单击设置超级链接的对象时会出现一询问框, 单击“确定”, 系统便会调用Flash程序来播放动画。

五、动作设置法

第一步, 运行PowerPoint 2003, 切换到要插入Flash动画的幻灯片。

第二步, 在其中建立任意一个对象 (如一段文字、一张图片等) 。右单击该对象, 在弹出的快捷菜单中单击“动作设置”, 出现“动作设置”对话框 (如图8) 。

第三步, 在“动作设置”对话框中选中“单击鼠标选项卡中的运行程序”选项, 并指定Flash动画的路径用文件名。

第四步, 放映该幻灯片, 用鼠标单击设置了动作设置的对象时会出现一询问框, 单击“确定”, 系统便会调用Flash程序来播放动画。

上一篇:产业转移战略研究下一篇:网络对抗训练