文件系统结构分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文件系统结构分析
1 嵌入式文件系统
1.1嵌入式文件系统体系结构
在嵌入式系统中,文件系统是嵌入式系统的一个组成模块,它是作为系统的一个可加载选项提供给用户,由用户决定是否需要加载它。同时,它还需要满足结构紧凑、代码量小、支持多种存储设备、可伸缩、可剪裁、可移植等特点。基于上面的要求,嵌入式文件系统在设计和实现时就要把它作为一个独立的模块来整体考虑。特别是对文件系统内部资源的管理要做到独立性。
由于嵌入式文件系统是作为嵌入式系统的一个可选加载项提供给用户的,当用户针对其应用的特殊要求对嵌入式系统进行配置时没有选择加载文件系统,但是用户还是需要使用到系统I/O。由于这种情况的出现就决定了嵌入式系统中的文件系统不再具有I/O设备的管理功能。系统I/O的管理和使用接口的提供将由I/O管理模块完成,文件系统作为一个独立的自包含模块存在。
基于以上考虑,嵌入式文件系统的体系结构如图1所示。
图1 嵌入式文件系统体系结构
在嵌入式文件系统的最上层是文件系统API。文件系统的一切功能都是通过
这一层提供给用户的。同时,在整个文件系统中也只有这一层对用户是可见的。在这一层中所提供的所有功能接口都将严格的遵循POSIX标准。
文件系统核心层是实现文件系统主要功能的模块。在这一层中,文件系统要把用户的功能操作转化成对文件系统的抽象对象的操作。这些操作将通过下面的功能模块最终落实到物理介质上面。如果文件系统需要支持多种具体的文件系统格式的话,这一层还可以进一步细分成虚拟文件系统和逻辑文件系统。
块高速缓存的存在是为了提高文件系统的性能。在这一层中缓存着以前访问过的块设备数据。文件系统通过一定的算法来高效的管理这些数据,以提高缓冲的性能。同时,它的存在使下层的数据操作对上层的文件操作透明,提高了文件系统的模块性。
1.2嵌入式文件系统体系的功能与特点
文件系统是操作系统的重要组成部分,用于控制对存储设备的存取。它提供对文件和目录的分层组织形式、数据缓冲(对于实时系统,允许绕过缓冲)以及对文件存取权限的控制。
嵌入式系统所使用的文件系统除了要提供通用文件系统的功能外,还由于嵌入式操作系统的特殊性而具有其自身的一些特点。嵌入式文件系统的设计应该满足如下目标:
1.实现按名存取。和桌面操作系统类似,用户对文件的操作是通过其“文件名”来完成的。因此,用户只需知道待操作文件的文件名,就可以方便的访问数据,而不必关心文件在物理设备上是如何存放的,以及如何对文件的打开、关闭操作进行处理等细节。所有与文件相关的管理工作都由文件系统组件隐式完成。
2.与实时系统相适应。嵌入式应用大多数都具有实时性需求。实时系统不仅要求计算结果地准确无误,而且要求特定的指令要在限定的时间内完成,这就对文件系统提出了很高的要求。在通用操作系统中,往往采取分页和虚拟存储器管理的机制来满足规定的指令时间。然而嵌入式实时操作系统一般都不具有虚拟存储器管理机制,且各种外部设备的性能差异较大,控制文件系统的实时性变得非常困难。为了尽可能提高文件系统的实时性,除了选取高速存储介质作为嵌入式系统的外设外,还应该根据设备的特点设置一定大小的高速缓冲,以提高数据存取的相应速度。
3.支持多任务环境。面对日益复杂的计算环境,应用常常采取“分而治之”的方法,将解决方案划分为多个任务,每个任务完成相对单一的功能。实时操作系统的设计目标之一就是对多任务的支持。从应用的层面上看,多任务可以对文件进行并发读操作,在实时内核进程间同步与通信机制支持下进行写操作。此外,文件系统内部实现也应该具备较好的可重入性,即利用同步机制对全局数据结构
进行必要的保护。
4.支持多种逻辑文件系统标准。随着操作系统技术的发展,出现了多种成熟的桌面文件系统标准,如Windows下的FAT系列,Linux中的ext系列等。将这些成熟标准引入嵌入式领域的同时,如何在各种不同标准的存储介质中互通数据,也是文件系统设计的考虑因素。应用程序应该使用同一套系统调用操作文件,而无需考虑面对的文件系统标准和存储介质。因此,文件系统的设计时应该引入文件操作抽象层,通过虚拟接口访问文件系统,才能使得这种协作性和通用性成为可能。
5.接口标准的开放性和可移植性。文件系统对外提供的系统调用是应用与系统的交互接口。为了增加接口的开放性和可移植性,嵌入式文件系统的系统调用必须符合一定的标准和规范。
可移植操作系统接口(Portable Operating System Interface,POSIX)是一种由IEEE指定的信息标准,它为程序员提供了一种严格定义的固定框架,以获得源码级的软件可移植性;换言之,为一个POSIX标准兼容的操作系统编写的程序,可以很容易的移植到其它POSIX标准的操作系统上编译执行。
2 FatFs文件系统体系结构
图2 FatFs文件系统体系结构
在FatFs的最上层是文件系统API。文件系统的一切功能都是通过这一层提
供给用户的。同时,在整个FatFs文件系统中也只有这一层对用户是可见的。在这一层中所提供的所有功能接口都将遵循POSIX标准。
文件系统核心层是实现文件系统主要功能的模块。在这一层中,文件系统要把用户的功能操作转化成对物理介质的抽象对象的操作。这些操作将通过下面的功能模块最终落实到物理介质上面。如果文件系统需要支持多种具体的文件系统格式的话,这一层还可以进一步细分成虚拟文件系统和逻辑文件系统。
DISK I/O模块的存在是为了提高文件系统的性能,通过缓存提高数据读写速度,文件系统通过一定的管理算法来高效的管理这些数据,以提高缓冲的性能。而RTC提供了整个系统时间的标尺,是实时操作系统的必要组成部分。
3 FatFs文件系统标准
3.1 FatFs文件系统组成
FatFs源自Microsoft所推出的WinCe文件系统,因其具有Fat文件系统的高度兼容性,能广泛应用于嵌入式系统尤其是移动性要求高的设备中。本课题FatFs选择FAT16系统,故拥有相同的FAT16结构
FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中,FAT16简单来讲由图3所示的6部分组成(主要是前5部分)。
1扇区
31个扇
区
实际情况取
大小
同FAT1 第2簇
不足一
簇
保留扇区┗━━━━━━━━数据区━━━━━┛
引导扇区DBR区(DOS BOOT RECORD)即操作系统引导记录区的意思,也称为
启动扇区。它记录了存储卡的所有重要信息,一共512个字节,其结构如表1所示:
图3 FatFs的组成