什么是文件系统?

来源:百度文库 编辑:神马文学网 时间:2024/04/27 14:33:05
简单说,文件系统就是实现数据“按名存取”。
文件系统屏蔽了底层硬件的处理细节,使得用户可以用“名字”访问数据。文件系统可以分为以下5层:
用户接口层:打开(创建)fopen、关闭fclose、读fread、写fwrite、定位fseek、文件属性fattribute等。所有文件系统,这个部分的接口都是相似的,方便用户使用和应用程序移植。对于用户来说,文件系统就是给出“文件名”,得到对应的数据,至于数据放在哪,如何存放,如何处理,对用户透明。此层只定义了接口形式却没有给出具体实现的规范,设计者在这一层的自由度最大,难点是如何处理多用户并发操作,如何充分发挥所采用的文件数据结构的优点,如何提高效率(缓冲操作,写入时机),如何提供安全保障和恢复等。
文件数据结构层(不是实际的层,而是包含在操作里的抽象数据结构):FAT12/16/32、ext2、NTFS、JFFS等。不同数据结构对安全性、存取效率、扩展性等有不同影响,各有优缺点,请按需选用。
转义层:有些物理介质写次数有限,反复向同一位置写入会造成芯片整体寿命急剧缩短,通过转义层使得实际写入能在整个介质上均匀操作,提高介质寿命。若介质没有此特性,可以取消这一层。另外,有些安全性要求较高的系统,可能会把同一个写入数据存储到多个介质上,这也需要转义层将写命令翻译成实际的操作。
物理接口层:ATA接口(IDE硬盘/CF卡)、SCSI、并行IO口PIO、USB、1394、网络等。这一层一般有标准规范。
物理介质:硬盘、光盘、flash、网络等。实际存储数据的物理设备,各有特色,一般有标准规范。
综上,实现文件系统,就是提供给用户fopen、fclose、fread、fwrite等API,使其能按名字存取位于任意介质(fs over anyting)上的数据,并保证多用户并发访问、高效率、高安全性、故障可恢复。
举例:
fp=fopen("/tmp/yy.c",RW); //用读写模式打开/tmp/yy.c
fread(fp,&buf,100);     //读出100字节
buf[6]=‘y‘;           //将第7字节改为字符‘y‘
fwrite(fp,&buf,100);     //将改变的数据重新写入
fclose(fp);           //关闭文件
你只要在某个介质(硬盘、CF卡等)上按某个数据结构(FAT、ext3等)实现以上出现的API(fopen、fread、fwrite、fclose等),就可以认为自己实现了文件系统,若还能够保证多用户并发访问、高效率、高安全性、故障可恢复当然就更完美了。
文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用 "扩展文件系统",意思是文件系统的种类。
磁盘或分区和它所包括的文件系统的不同是很重要的。少数程序(包括最有理由的产生文件系统的程序)直接对磁盘或分区的原始扇区进行操作;这可能破坏一个存在的文件系统。大部分程序基于文件系统进行操作,在不同种文件系统上不能工作。
一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。
大部分UNIX文件系统种类具有类似的通用结构,即使细节有些变化。其中心概念是超级块superblock, i节点inode, 数据块data block,目录块directory block, 和间接块indirection block。超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。 i节点包括除了名字外的一个文件的所有信息,名字与i节点数目一起存在目录中,目录条目包括文件名和文件的i节点数目。 i节点包括几个数据块的数目,用于存储文件的数据。 i节点中只有少量数据块数的空间,如果需要更多,会动态分配指向数据块的指针空间。这些动态分配的块是间接块;为了找到数据块,这名字指出它必须先找到间接块的号码。
UNIX文件系统通常允许在文件中产生孔(hole) (用lseek; 请看手册), 意思是文件系统假装文件中有一个特殊的位置只有0字节,但没有为这文件的这个位置保留实际的磁盘空间(这意味着这个文件将少用一些磁盘空间)。这对小的二进制文件经常发生,Linux共享库、一些数据库和其他一些特殊情况。 (孔由存储在间接块或i节点中的作为数据块地址的一个特殊值实现,这个特殊地址说明没有为文件的这个部分分配数据块,即,文件中有一个孔。)
孔有一定的用处。在笔者的系统中,一个简单的测量工具显示在200MB使用的磁盘空间中,由于孔,节约了大约4MB。在这个系统中,程序相对较少,没有数据库文件。有关这个测量工具的细节请看附录 A.