版权归原作者所有,如有侵权,请联系我们

[科普中国]-嵌入式文件系统

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

嵌入式文件系统是指嵌入式系统中实现文件存取、管理等功能的模块,提供一系列文件输入输出等文件管理功能,为嵌入式系统和设备提供文件系统支持。在嵌入式系统中,应用程序通常需要对信息进行存取操作,当任务运行的时候,任务可以在其任务堆栈中存放少量信息,但是存储量要受到内存空间的严格限制,而且在内存空间中的信息随着任务的退出而消失,不适于存放要长期保存的信息。另一方面,一些公共信息为多个任务所共享,需要这些信息独立于具体的任务而存在1。

嵌入式系统和桌面系统一样,为用户提供文件系统以方便信息的处理。嵌。入式文件系统以普通桌面操作系统的文件系统为基础发展而来,但两种文件系统的应用环境和自身的要求又有很大的不同:在普通桌面操作系统中,文件系统不仅要管理文件,提供文件系统调用API,还要管理各种设备,支持对设备和文件操作的一致性。而在嵌入式文件系统中,由于大部分嵌入式系统都是针对特殊目的定制的,因而对嵌入式操作系统的系统功能的模块化和可裁减性提出了更高的要求。

嵌入式系统的应用条件往往比桌面计算机恶劣的多,在恶劣使用环境下系统的稳定性、安全性还要得到足够的保障,通用的文件系统对于可靠性和文件系统自身的安全性并没有特殊的保障机制,因此无法保证这些性能。所以,虽然有许多已经较为成熟的桌面操作系统下的文件系统,如DOS下的FAT文件系统、WINDOWS NT下的NTFS文件系统以及UNⅨ下的inocde文件系统等,但这些文件系统都不能直接适用于嵌入式系统。要想适用于嵌入式系统,必须进行重新设计。嵌入式文件系统应该借鉴成熟的桌面文件系统,并且进一步根据具体的硬件环境以及应用需求来设计文件系统的体系结构和实现方法。嵌入式文件系统作为嵌入式操作系统的重要组成部分,对于实现嵌入式系统中大量数据的存储和各种操作的管理,有着不可替代的作用。

嵌入式文件系统虽然继承了通用文件系统的组织结构,但由于功能和作用与普通桌面操作系统的文件系统不同,同时又有自己的特点:

在嵌入式系统中,文件系统是嵌入式系统的一个组成模块。它是作为系统的一个可加载选项提供给用户,由用户决定是否需要加载它。

需要满足结构紧凑、代码量小的特点,合理地对文件存储器进行管理。嵌入式系统中的文件存储器空间相对不会太大,必须对其进行高效的管理,以避免对资源的浪费。

使用简单便捷。用户只要知道文件名、文件路径等简单信息特征,就可以方便地对文件进行操作,不必知道文件在具体物理存储空间的运作过程。

安全可靠。对文件、数据的保护是文件系统的基本功能。嵌入式系统的应用通常要求系统必须有较高的可靠性。

支持多种存储设备、可伸缩、可剪裁、可移植等特点。嵌入式应用的领域相当广泛,其采用的硬件环境和操作系统也各不相同。为了适应这种差异性,文件系统应降低对具体硬件环境和操作系统的依赖,具备良好的可移植性。

主流嵌入式文件系统国内外流行的嵌入式操作系统中,多数均具有可根据应用需求而进行定制的文件系统组件,下面对几个主流的嵌入式操作系统的文件系统组件做一个简要介绍1。

QNX的文件系统组件

QNX被称为X86平台上最好的嵌入式操作系统。它提供多种资源管理器,包括各种文件系统和设备管理,支持多个文件系统同时运行,包括提供完全的POSIX.1以及UNIX语法的POSIX文件系统,支持多种闪存设备的嵌入式文件系统,支持对多种文件服务器(WINDOWS NT/95、LANManager等)的透明访问的SMB文件系统、DOS文件系统、CD-ROM文件系统等,并支持多种外部设备,如USB舢ART,IDE及SCSI磁盘等。

VxWorks的文件系统组件FFS

VxWorks是使用最广泛的嵌入式操作系统。它提供的文件系统组件.“快速文件系统”(FFS)非常适合于实时系统的应用。它包括几种支持使用块设备(如磁盘)的本地文件系统,这些设备都使用一个标准的接口从而使得文件系统能够被灵活的在设备驱动程序上移植。另外,VxWorks也支持SCSI磁带设备的本地文件系统【101。VxWorks的I/O体系结构甚至还支持一个单独的VxWorks系统上同时并存几个不同的文件系统,VxWorks支持四种文件系统:FAT、TRLlFS、rawFS、tapeFS。VxWorks借鉴了UNIX设计中“设备即文件”的重要思想,将外部设备作为一个特殊的数据文件进行处理,使得普通数据文件和外部设备在用户面前有相同语法定义,使用相同的保护机制,便于系统管理和应用设计。

uCLinux的文件系统

uCLinux继承了Linux完善的文件系统性能,其采用的是romfs文件系统。这种文件系统相对于一般的ext2文件系统要求更少的空间,空间的节约来自于两个方面:首先,内核支持romfs文件系统比支持ext2文件系统需要更少的代码;其次,romfs速度文件系统相对简单,在建立文件系统超级块(superblock)需要更少的存储空间。Romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。

pSOS文件管理系统

pSOS文件管理系统称为pHILE+,它提供了文件系统管理和对块设备的管理。pSOS可以通过pHILE+有效的访问各种不同的存储设备,包括本地设备和网络设备。文件系统包括CD.ROM设备、FAT兼容文件系统和pSOSytem特有的快速文件系统。以上几种嵌入式文件系统是现在商用嵌入式文件系统的主流,占领大部分的市场,也代表了这个领域的先进技术,但是由于商业机密的限制,源代码和核心技术不可能公开,购买和维护费用昂贵,而且由于嵌入式系统的专用性。无法形成统一的标准。

特点可移植性移植性是判定嵌入式软件,特别是操作系统组件实用性的一大重要指标。文件系统组件在设计开始就注重了软件的移植性。首先,整个实时文件系统模块和设备驱动管理模块主体由C语言构建,可以较为方便地移植到不同体系结构的CPU之上;此外,文件系统组件与实时操作系统内核的接口为有限的信号量、定时器、中断、内存等系统调用。由于几乎所有的实时操作系统内核都提供了上述机制,因此文件系统组件只需针对实际情况作少量修改就可以非常方便的移植到不同的实时内核之上2。

资源消耗文件系统组件的资源消耗主要包括程序代码本身占用的存储空间开销、运行时内存动态分配引起的开销、处理器时间占用开销等。由于在不同平台下使用不同编译器编译生成的代码长度有微小的差别,表1以ARM-7芯片为硬件平台,列出了GNU C编译器下实时文件系统(包括FAT12/FAT16/FAT32逻辑文件系统代码,不包括具体的设备驱动和设备高速缓存)引起的内存资源开销。设备驱动程序占用空间大小由取决于具体应用。由于文件系统组件设备驱动管理层对各种设备驱动程序对上层的接口作了统一的抽象处理,支持在运行中方便的挂载各种不同的设备驱动程序,因此文件系统组件除了上表所列的内存资源开销外,还包括使用的设备驱动程序引起的开销。表2列出了目前文件系统实现的主要设备驱动的内存空间占用量。不难看出,整个实时文件系统组件结构紧凑、代码量小,并且可以根据应用的需求作进一步裁剪。在一个典型的应用环境下,整个文件系统(含设备驱动)的代码不超过100KB完全可以固化在ROM中,用于各种嵌入式应用。

FAT表存取优化文件系统中借鉴了Linux中得以广泛应用的虚拟文件系统(Virtual File System)的实现机制,理论上可以挂载不同逻辑格式的文件系统,目前已完全支持FAT全系列(FAT12/FAT16/FAT32)。由于FAT是一类位图型的文件系统格式,对文件的读写操作需要不断的访问和修改FAT表,因此对FAT表的读写效率在一定意义上影响了文件系统的性能。对于FAT12/FAT16两种FAT表较小的文件系统,采用将FAT表一次全部缓冲到物理内存中的方式;FAT32文件系统的FAT表较大(最坏情况下可达数兆之多),在嵌入式应用中完全缓冲显然不现实,因此采取了折中的机制,根据目标环境可以配置FAT cache的大小,以提高FAT表的存取效率。