linux文件系统

文件系统是一个比较模糊的名词,文件也是一个比较模糊的名词。狭义上文件就是指磁盘文件,广义上说能够产生和消耗信息的都是文件,比如刻录机(消耗信息就是刻盘,产生信息读盘)。

 

文件是用来存信息的,但他不存自身的管理信息。比如一个数据文件,他记载了一大堆数据,但他不可能也不会记载自己在磁盘中的位置,也不会记载自己的访问权限,甚至可能连自己的文件名他也不会记载。这些管理信息都是由文件系统来记载和管理的。同时,文件本身不会提供自己读写操作的具体实现(也就是代码了)这些都是由文件系统来提供的。所以说不同的文件系统读写操作是不一样的。(文件系统还有很多功能就不一一细说了,比如寻址等。从文件系统提供的功能来看我们就可以看出文件系统在操作系统中是非常重要的,一个东西可以被称为操作系统,那么它必须具有进程管理或者文件系统中至少一个,如果2个都没有,那就不是操作系统了。没有进程管理的比如简单的批处理系统,没有文件系统的如嵌入式操作系统就可能没有)。

 

我们常见的文件系统有FAT,NTFS和EXT等。他们就是我们上面提到的来管理文件的文件系统的具体实现。操作系统里面文件系统也不能简单的理解成FAT,NTFS等,也许大家有些糊涂,但对一个名词有很多种解释是很正常的,前面我们是从文件的角度来解读文件系统这个词,这里是从操作系统的角度来解读文件系统这个词,那么从操作系统看来,文件系统则是另一种概念。

 

操作系统必须支持多种文件格式(为了以示区别,我们把FAT,NTFS叫做文件格式),操作系统必需支持多种文件格式,甚至是它们共存比如一个目录下是FAT格式,而另一个则是EXT的。操作系统做法是提供一个虚拟的文件系统,他里面涵盖了一些必不可少的文件信息和操作,然后当你读写某一个具体文件时候,就根据文件格式,将这些操作函数指向具体的文件格式中的操作函数。从面向对象角度来开,就是操作系统提供了接口,而各个文件格式则是这个接口的具体实现。我们在读写文件时候代码中第一步就是打开文件,这其实就是接口的初始化,将接口指向具体的文件格式,为文件的读写建立起上下文。最后要关闭文件就是撤销这些在内存中存贮的上下文信息。

 

上面大概介绍了文件系统,这里介绍2个在linux描述文件信息的数据结构,一个是dentry,而另一个则是inode.一个叫做目录,另一个叫做节点。目录是从逻辑角度来描述文件,而节点则是从物理角度描述文件。也许有人认为这两者应该合成一个数据结构,我们知道能够合成一个数据结构只有1对1情况,而目录和节点是多对一的,一个物理上存在的文件可能有多个逻辑上的存在,比如你多建立起来的软连接和硬链接。这里只简单介绍下,具体这些数据结构里面记载了那些信息,读者可以自己查找。

你可能感兴趣的:(数据结构,虚拟机,linux,ext,嵌入式)