1、谈谈什么是文件系统
(资料图)
文件系统的应用非常广泛,同时种类也是特别的多,并且不同平台也会使用不同性能和特点的文件系统,比如查找效率、数据安全等级等等,如下面windows使用的NTFS:
不同的文件系统:
单片机常用文件系统:Fatfs、振南的Znfs等等;
Linux常用文件系统 : Ext扩展fs、jffs,yaffs等等;
windows常用文件系统 : NTFS等
......
虽然文件系统多种多样,看起来非常复杂,其实主要目的还是为用户提供读写数据的统一服务,同时附带有文件的组织,定位和安全等等功能。
2、自己组织数据保存
既然文件系统的主要功能是保存数据,那么当我们用一个存储介质(如硬盘、Flash等)在没有文件系统的情况下该如何存储数据呢 ?
无文件系统存储方式
分析一下:
一般我们会规划一个存储分配规划区,该区域中存储着各个数据区所存储的位置,大小等等一些描述信息。
该存储分配规划区一般都是固定的,当程序上电以后会从固定的地址读取该部分信息,进而定位各个数据区域,当应用程序需要访问某个存储数据区域的时候,便可以通过描述信息找到对应的区域并读取或者写入相关信息。
3、文件系统的功能与特点
其实上面提到的无文件系统的数据存储办法,可以看成最原始、为简单的文件系统。然而比较完整的文件系统仅仅只是在该基础上进行性能上的加强和功能上的增多。1、空间的分配 把前面的数据区域看成一个个的文件,如何为这一些文件分配合适的区域,当文件变大如何把空闲的空间拿来进行分配和组织等等都由文件系统实现相应的算法进行处理。 2、查找与定位 当存储在存储介质上的文件数量越来越多,如何快速的查找到对应的文件,并且如何对各个文件进行标识和组织,从而达到高效的查找和定位,也是文件系统需要做的工作。 3、可靠性和安全性 当存储介质出现损坏或者坏块,如何进行数据恢复或者数据校验,如何保护相关重要文件不被恶意操作等也是文件系统需要考虑的。
4、文件属性
文件系统的基本操作单元是文件,那么要实现文件系统对文件灵活管理就需要每个文件(也就是之前的数据区)有一个更加详细的描述,这些文件描述信息都存储在存储介质中,当读取(专业一点叫加载)所对应文件系统的配置信息存储区域就获得了对应文件系统所管理的文件Map,如下图是文件的相关属性:
从上面了解到每个文件的属性非常丰富,包括名字、路径、大小、修改时间、安全所属等等信息,这些信息都是为以后索引,保护等访问文件做准备的。
5、文件描述符
这里所说的文件描述符和第4小节所说的文件属性描述信息不相同,文件属性描述信息存储在介质上,而文件描述符是当用户需要操作文件形成的一个文件描述操作符,所以文件描述符与每个文件打开的文件对应,只有当应用程序需要访问某个文件才会形成这样的结构标识,否则没有必要产生,从而节省内存空间,如下图所示:
每个进程维护着一个文件描述符表,文件描述符表中包含多个文件描述符,同时每个文件描述符中包含有对应打开文件表中的文件指针,通过文件指针即可知道当前文件读写偏移、访问权限等等,通过打开文件表项中的inode指针又可以访问到inode表中具体的文件类型、修改记录时间等等信息。 所以文件描述符仅仅只是打开文件的一个标识。
6、文件类型
对于大部分文件系统中的文件是没有文件类型定义的,仅仅只是读写字节序列流,至于具体文件内容的格式或者类型都由用户程序自己解析定义,如下图所示:
7、文件目录
大部分文件系统都采用一种分层的组织思想,以目录的形式去组织各个文件,在windows中的文件夹也就是一个目录项,该目录项也是一个特殊的文件,不过其文件中包含的数据内容是指向的其子目录项或者是子文件,看起来就像一棵树。
那么通过路径的方式 : 根目录/子目录3/文件1 的描述,便可以直接找到对应的文件相关信息,进而操作文件。
8、硬链接与软连接
1、硬链接
如下图所示,通过不同的路径可以访问同一个文件,这就是硬链接,如果删除了其中一个目录项仅仅只是删除了一个链接路径,可以通过另外的路径进行访问。
2、软链接
软链接类似于“快捷方式”,所以软链接就是一个文件,其中存放的内容是另一文件的路径,从而可以根据该内容定位到其对应的文件实体,主要是提供访问上的便利,同时删除该链接不会影响到实际文件。
9、最后小结
这里仅仅只是为大家介绍了文件系统的一些基本概念,后续作者会通过具体的实例讲解具体文件系统的实现,从而接触大家对文件系统的陌生感,通过也可以从文件系统中获得一些处理技巧帮助平时的开发。
审核编辑:汤梓红
标签: