1、1第5章 嵌入式文件系统5.1 嵌入式文件系统25.1 文件系统简介n 文件系统的定义文件系统的定义 文件系统是操作系统中组织、存储和命名文件的结构,是操作系统中统一管理信息资源的一种方式,可以管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,方便用户使用。 大部分应用程序都是基于文件系统进行操作,在不同的文件系统上是不能工作的。n 文件系统的存储媒质文件系统的存储媒质:磁盘、光盘、FLASH盘等n FATFAT(文件分配表)系统是最常用的文件系统,主要优点是可以允许多种操作系统访问。35.1 文件系统简介文件系统主要功能方便的文件访问和控制方便的文件访问和控制:以符号名称作为文件标识
2、,便于用户使用;并发文件访问和控制:并发文件访问和控制:在多道程系统中支持对文件的并发访问和控制;统一的用户接口:统一的用户接口:在不同设备上提供同样的接口,方便用户操作和编程;多种文件访问权限:多种文件访问权限:在多用户系统中的不同用户对同一文件会有不同的访问权限;优化性能:优化性能:存储效率、检索性能、读写性能;差错恢复:差错恢复:能够验证文件的正确性,并具有一定的差错恢复能力;45.1 文件系统简介应用程序多种文件类型(划分记录,顺序或索引等)基本 I/O 管理(I/O 缓存和调度,性能优化)物理 I/O(基本文件系统)外部存储器文件系统文件系统的结构55.1 文件系统简介文件系统的主要
3、内容: 文件的格式 目录的格式 磁盘的分配回收 访问方式和权限 目录也是一个特殊的文件。6DOS 1.0 (1981)DOS 3.0 (1984)Win 95 (1995)Win 95 Osr2 (1996)Win 98 (1998)Win 3.1 (1992)FAT12FAT16VFATFAT32FAT文件系统FATFAT文件系统的发展文件系统的发展7FAT12FAT16FAT32Size of FAT entry12 bits16 bits32 bitsMax num of clusters4,08665,526268,435,456Cluster size used0.5 KB - 4
4、KB2 KB - 32 KB4 KB - 32 KB最大磁盘容量16,736,256(16M)2,147,123,200(2G)about 241(2T)FAT12/FAT16/FAT32比较8FAT 文件系统由下面四部分组成保留区 Reserved region存放引导记录,BIOS信息等FAT 区FAT信息列表 (12/16/32 bits)根目录区目录信息列表 (32 bytes)文件和目录数据区存放簇信息reservedFAT(p)FAT(b)Root dirFile and directory FATFAT文件系统基本结构文件系统基本结构9引导记录基本信息 引导代码BIOS参数块 (
5、BPB)字节/扇区 (512,1024,2048,4096)扇区/簇 (1,2,4,8,16,32,64,128)根目录数总扇区值介质类型 (硬盘,软盘,FLASH)reservedFAT(p) FAT(b) Root dirFile and directory 保留区保留区 Reserved RegionReserved Region10通常有 FAT(P)(primary)和FAT(B)(backup)每一个簇都有一个对应的FAT表项Cluster 2Cluster 3Cluster n-1Cluster nFAT数数据据区区reservedFAT(p)FAT(b)Root dirFile
6、 and directory FAT FAT 区区11FAT 链表 (以FAT16为例)目目录树录树125.2 嵌入式文件系统嵌入式文件系统与桌面文件系统有较大区别: 嵌入式文件系统要为嵌入式系统的设计目的而服务的,不同用途的嵌入式操作系统下的文件系统在许多方面各不相同。 嵌入式Linux常用文件系统:第二版扩展文件系统(Ext2ft)、JFFS、YAFFS13嵌入式Linux常用文件系统 Flash Memory简介 Flash Memory上的两种技术lNAND:串行;顺序读取;适合大容量;通常需MTDlNOR :并行;随机读取;适合数据或程序存储;XIP;Xsbase开发平台上所使用的闪
7、存 lIntel StrataFlash Memory 28F128J3A Ext2fs 、JFFS和YAFFS lext、 ext2、xia、vfat、minix、msdos、umsdos、 proc、smb、ncp、iso9660、sysv、hpfs、affs、ufs、vfs等 14嵌入式Linux常用文件系统第二版扩展文件系统(Ext2fs)的优点 lExt2fs支持达4 TB的内存(Ext是2G)。lExt2fs文件名称最长可以到1012个字符。l当创建文件系统时,管理员可以选择逻辑块的大小(通常大小可选择 1024、2048和4096字节)。lExt2fs实现快速符号链接:不需要为此
8、目的而分配数据块,并且将目标名称直接存储在索引节点表中,这使性能有所提高,特别是在速度上。15 基于基于FLASHFLASH的嵌入式文件系统的嵌入式文件系统 嵌入式系统中常使用FLASH作为存储介质,有其特定的结构特点:基本存储单位是Page,每个Page有512+16个字节;32个Page为一个Block;所有的Block组成一个Device,代表整个存储体。 主要有两种技术:NAND和NOR 三星K9F2808U0A-YCB0 FLASH(NAND技术)有16M字节的存储容量:有1024个Block, Device的总容量是: 528Bytes*32Pages*1024Blocks=132
9、Mbits Intel公司的28F128J3A Flash(NOR技术)16NAND和和NOR两种技术比较两种技术比较17FLASHFLASH的存储结构的存储结构18FLASHFLASH的读写特点和的读写特点和FATFAT组织组织读写特点:(1)必须以Page为单位进行读写;(2)写之前必须先擦除原有内容;(3)擦除操作必须对Block进行,即一次至少擦除一个Block的内容FAT组织 将Flash的一个Page定为1个扇区,2个Block-64 个扇区定为一个簇(也可以定义32个扇区为一个簇),这样,簇的容量刚好为5126432K,满足FAT16对簇大小的要求。19FLASHFLASH文件系
10、统的特殊要求文件系统的特殊要求(1)掉电安全: 嵌入式系统的运行环境一般比较恶劣,但同时又要求有较高的可靠性。这就对FLASH文件系统进出了较高的要求,无论程序崩溃或系统掉电,都不能影响文件系统的一致性和完整性,文件系统的写入、垃圾回收等操作对系统异常中止都非常敏感,极易造成数据丢失和数据垃圾,在文件系统设计和选用时应考虑;(2)平均使用(wear-leveling): 由于FLASH扇区的擦除次数有限制,要求能够均匀使用各扇区,以延长FLASH的使用寿命;20(3)高效垃圾回收(garbage collection): 任何存储器在分配使用一段时间后,都会出现空区和碎片数据,为保证存储空间的
11、使用率。方法是先移动扇区数据,再擦除整个扇区;(4)低空间消耗(low overhead): 指文件系统管理结构在FLASH存储器上的空间消耗,该空间用于FS建立,而不能用于实际数据的存储,可以提高有用数据的存储空间。FLASH文件系统的特殊要求21(1)集中管理文件系统特点:存储器空间的使用信息集中存放在存储器的某个地方,存储器的其它区域用于存放数据,数据必须依赖关键信息区才能被索引和使用缺点:需要大量缓存空间,当某扇区需要更新时,先将扇区数据备份到RAM中,再进行擦除操作,最后将修改后的备份写入FLASH,缺点是难以保证掉电安全,不能均匀使用存储器空间,特别是关键信息区,对文件系统的使用都
12、会改写该区,导致FLASH快速损坏;FLASHFLASH文件系统的分类文件系统的分类22FLASHFLASH文件系统的分类文件系统的分类( 2)线性文件系统概述: 每个文件相关的信息都连续存放在存储器中,实现简单,读写快速,文件系统的关键信息分布存放;优点: 安全性好;能保证存储器的平均使用,延长了FLASH的使用寿命;缺点: 对文件操作效率低,不易实现添加、插入、剪切等操作;23(3)日志文件系统基本思想:跟踪文件系统的变化而不是文件系统的内容基本思想:跟踪文件系统的变化而不是文件系统的内容概述:概述: 日志结构的文件系统使用顺序的、只增的日志作为磁盘日志结构的文件系统使用顺序的、只增的日志
13、作为磁盘上唯一的组织文件系统数据的结构上唯一的组织文件系统数据的结构 , ,文件的描述可以仍采用文件的描述可以仍采用传统的索引组织方式。方法是在内存中将几次传统的索引组织方式。方法是在内存中将几次 FSFS的修改汇集的修改汇集成一个大的日志条目成一个大的日志条目( (被称为段映像被称为段映像 ),),然后动态分配磁盘空然后动态分配磁盘空间并通过一次写操作写到磁盘上的一个连续的、固定大小的间并通过一次写操作写到磁盘上的一个连续的、固定大小的日志段日志段 (Segment)(Segment)中。并定时或当系统发出同步写请求时保中。并定时或当系统发出同步写请求时保证日志同步写到磁盘上证日志同步写到磁
14、盘上FLASHFLASH文件系统的分类文件系统的分类24系统纪录系统纪录(SR,System Record)文件分配表文件分配表(FAT,File Allocation Table)文件登记表文件登记表(FRT,File Register Table)数据区域数据区域 (Data Area)典型典型FLASHFLASH文件系统的结构文件系统的结构(1)系统记录(SR,System Record) 存放媒质信息和最重要的文件系统信息。媒质信息诸存放媒质信息和最重要的文件系统信息。媒质信息诸如如FlashFlash存储器的类型、容量,划分成多少个区块,每区存储器的类型、容量,划分成多少个区块,每区
15、块包含多少个页面等。文件系统信息包括版本信息、保块包含多少个页面等。文件系统信息包括版本信息、保留区块的数目和位置、文件分配表和文件登记表所在的留区块的数目和位置、文件分配表和文件登记表所在的位置和大小、数据区域的位置和大小等。位置和大小、数据区域的位置和大小等。(2)文件分配表(FAT,File Allocation Table) 存放着存放着FlashFlash存储器上所有区块的占用与空闲情况以及存储器上所有区块的占用与空闲情况以及每个文件的存储连接结构,采用每个文件的存储连接结构,采用FAT16FAT16文件格式。文件格式。25(3 3)文件登记表()文件登记表(FRTFRT,File
16、Register TableFile Register Table) 存放着Flash文件系统中每一个文件的文件代号、文件长度、文件属性以及该文件的存储链在文件分配表中的入口。(4 4)数据区域()数据区域(Data AreaData Area) 用于存放文件的数据内容。本Flash文件系统中,数据分配的最小单位是Flash存储器的一个基本擦除单元,即一个物理区块(Block)。系统纪录系统纪录(SR,System Record)文件分配表文件分配表(FAT,File Allocation Table)文件登记表文件登记表(FRT,File Register Table)数据区域数据区域 (D
17、ata Area)26LBABlockPage长度长度内容说明内容说明00/0512字节字节MBRBPBExcutable Code+55AA120/10/21024字节字节FAT区(第一份区(第一份FAT)340/30/41024字节字节FAT区备份(第二份区备份(第二份FAT)539H 0/50/3130K字节字节目录区目录区(在在BPB中调整目录项数,中调整目录项数,使其刚好占尽本使其刚好占尽本block)40H1/1512字节字节数据区(因目录区占尽一个簇,数据区(因目录区占尽一个簇,故数据区始于新故数据区始于新block 首首page )FLASHFLASH的前两个的前两个BLOCK
18、BLOCK27FILEFILE结构体结构体typedef structU8 BufferBLOCK_SIZE;/文件缓冲区文件缓冲区U32 fileblock;/文件当前的簇文件当前的簇的位置的位置U32 filemode;/打开文件的模打开文件的模式式U32 filebufnum; /文件缓冲区中已经读取文件缓冲区中已经读取/写入的字节写入的字节数数U32 fileCurpos; /读写的当前位置读写的当前位置U32 filesize;/文件的大小文件的大小FILE;28与与FLASHFLASH存储器的接口函数存储器的接口函数块擦除:块擦除:unsigned char Erase_Clust
19、er(unsigned int cluster)页写入:页写入:int WritePage(unsigned int block,unsigned int page,unsigned char *pPage)页读出:页读出:void ReadPage(unsigned int block,unsigned int page,unsigned char *pPage)29文件系统的相关API函数始始化文件系统:始始化文件系统: void initOSFile( )以读取或者写入模式打开文件:以读取或者写入模式打开文件:File*OpenOSFile(Char filename,U32 OpenM
20、ode)读文件到缓冲区:读文件到缓冲区: U32 ReadOSFile(FILE* pfile,U8* ReadBuffer,U32 nReadbyte)把缓冲区内容写入文件:把缓冲区内容写入文件: U32 WriteOSFile(FILE* pfile,U8* WriteBuffer,U32 nWritebyte)关闭文件,释放缓冲区:关闭文件,释放缓冲区: void CloseOSFile(FILE* Pfile)30OpenOSFileOpenOSFile的工作的流程图的工作的流程图31ReadOSFileReadOSFile函数的程序流程图函数的程序流程图32WriteOSFileWr
21、iteOSFile函数的程序流程图函数的程序流程图33否CloseOSFileCloseOSFile函数的程序流程图函数的程序流程图345.3 常用的基于Flash文件系统1、JFFS文件系统 2000年Axis公司发布了他们开发的日志式Flash文件系统 JFFS文件系统是开放源代码的文件系统,可以说是专门用于嵌入式Linux等系统的 www.infradead.org JFFS是直接在Flash设备上实现的文件系统 JFFS2没有为Flash设备专门设计一个转换层来模拟普通的文件系统,而是直接对Flash进行操作 35l 主要针对NOR Flash设计,是一种基于Flash 的JFFS文件
22、系统日志文件系统l JFFS的底层驱动(MTD)主要完成文件系统对Flash芯片的访问控制,如读、写、擦除操作l JFFS2是JFFS的改进版,36JFFSJFFS2 MTD驱动(Memory Technology Devices)NAND闪存或NOR闪存等p MTD驱动:为JFFS或JFFS2 提供对NAND闪存或NOR闪存芯片进行各种操作的驱动程序p 基于NOR闪存的Flash 的JFFS2文件系统已很成熟JFFS文件系统层次图37l YAFFS主要针对NAND Flash设计,和JFFS相比它将少了一些功能。自带NAND 芯片驱动,且为嵌入式系统提供了直接访问文件系统的APIlYAFFS
23、2时YAFFS的改进版本2、YAFFS文件系统38(1)JFFS是一种日志文件系统,通过日志机制保证文件系统的稳定性。YAFFS仅仅借鉴了日志系统的思想,不提供日志机能,所以稳定性不如JAFFS,但是资源占用少。(2)JFFS中使用多级链表管理需要回收的脏块,并且使用系统生成伪随机变量决定要回收的块,通过这种方法能提供较好的写均衡,在YAFFS中是从头到尾对块搜索,所以在垃圾收集上JFFS的速度慢,但是能延长NAND的寿命。两种文件系统的比较39两种文件系统的比较(3)JFFS支持文件压缩,适合存储容量较小的系统;YAFFS不支持压缩,更适合存储容量大的系统。 (4)YAFFS 还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD和VFS,直接对文件进行操作。40习题 1 、教材第六章 习题1,习题2,习题3