认识linux文件系统(1)

来源:互联网 发布:可靠的韩国代购淘宝店 编辑:程序博客网 时间:2024/06/05 18:10

文件系统

        维基百科定义——计算机的文件系统是一种存储和组织计算机数据的方法。http://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F

        百度百科定义——文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在磁盘上组织文件的方法。

http://baike.baidu.com/link?url=KxE6dq6eyIEMe6GYgxYk8Ma6hxqBn0OhfWSUoJnw7Nw8dH5vA2sW7Ae2BtRGIoLC

我自己的理解,文件系统:是操作系统存储和组织数据的方法。linux文件系统主要体现在对文件和目录的组织上。

        这是一个比较抽象的概念。下面将分三部分来将文件系统具体化,使得其比较容易理解。第一部分,linux文件系统的组成;第二部分,创建一个文件的过程;第三部分,从文件读取数据的命令的工作原理。

第一部分:linux文件系统的组成

linux文件系统由三部分组成:超级块(superblock)、i—节点表(inode table)、数据区。


下面来看一下这三个区域分别存放的信息:

(1)      超级块:存放文件系统本身的结构信息。比如,记录每个区域的大小;存放未被使用的磁盘块的信息等。

(2)      i—节点表:是i—节点的一个列表。文件系统中每个文件在该表中都有一个i—节点。

(i—节点:用来存放文件大小、文件所有者、文件最近修改时间等信息的一个结构。每个i—节点都有相同的大小。关于i—节点重要的一点,表中的每个i—节点都通过位置来标识。)

(3)      数据区:用来存放文件内容的区域。

第二部分:创建一个文件的过程

我们在test目录下新建两个子目录a和c,举例说明a子目录的创建过程,如图:


从用户角度看:


从系统角度看:


如果到这一步还是不能理解文件的组织方法的话,那接下来看一下文件的内部结构,还是以子目录a为例:


总结一下创建一个新文件的4个主要操作:

(1) 存储属性;内核先找到一个空的i—节点,如424183,然后内核把文件的信息记录其中。

(2) 存储数据;由于该新文件需要3个存储磁盘块,因此内核从自由块的列表中找出3个自由块,如快627、200、和992。内核缓冲区的第一块数据复制到块627,下一块数据复制到块200,最后一块数据复制到块992。

(3) 记录分配情况;文件内容按顺序存放在块627、200、992中。内核在i—节点的磁盘分布区记录了这3个块序列。磁盘分布区是一个磁盘块序号的列表,这3个编号放在最开始的3个位置。

(4) 添加文件名到目录;新文件的名字是a,内核将入口(424183,a)添加到目录文件,这样文件名和i—节点好之间的对应关系将文件名和文件内容及属性连接了起来。

第三部分:从文件读取数据的命令的工作原理

上面已经看到了创建一个新的文件时内部所发生的事情,那么,当读取一个文件的数据时会发生什么呢?读取命令是如何工作的?以cat  a为例:采用的是从目录文件一步一步找到数据的方法。具体操作为:

(1)  在目录中寻找文件名;文件名存储在目录文件中,内核在目录文件中寻找包含字符串a的记录,a所在的记录包含编号为424183的i—节点号。

(2)  定为i—节点号424183并读取其内容;内核在文件系统中的i—节点区域找到i—节点424183。

(3)  访问存储文件内容的数据块。通过以上步骤,内核已经可以知道文件内容存放在哪些数据块上,以及它们的顺序。由于cat不断地调用read函数,使得内核不断将字节从磁盘复制到内核缓冲区,进而到达用户空间。

 总结:

    我们一般都说,文件存放在某个目录中,但是现在可以看到,目录中存放的只是文件在i—节点表的入口(目录的抽象模型是,一个包含文件名和i—节点号的表),而文件的内容则存储在数据区上。

原创粉丝点击