文件系统
文件存储的方式有线性存储和离散存储两种,线性存储可能会导致磁盘的利用率降低,产生磁盘碎片,离散存储方式会提高程序对磁盘的利用率,以下是Linux内核简设计与实现中关于文系统的一段话的一部分:
文件通过目录组织起来。文件目录好比一个文件目录好比一个文件夹,用来容纳相关文件。因为目录也可以包含其他目录,及子目录,所以目录可以层层嵌套,形成文件路径。路径中的每一部分都被称作目录条目。“/home/wolfman/butter”是文件路径的一个例子——根目录/,目录home,wolfman和文件hutter都是目录条目,他们统称为目录项。
从这段话中我们了解到了文件的组织方式——目录,而另外一段话
Unix系统将文件的相关信息和文件本身这两个概念加以区分,例如访问控制权限、大小、拥有者、创建时间等信息。文件相关信息,有时被称作文件的元数据(也就是说,文件的相关数据),被存储在一个单独的数据结构中,该结构被称为索引结点(inode),它其实是index node 的缩写,不过近来“inode”使用得更为普遍一些。
件在Linux中使用ls -l命令的时候看到的除了文件名,还可以看到到文件元数据。
可以看到有7列数据,分别表示模式、硬链接数、文件所有者、组、大小、最后修改时间、文件名
ls -l通过读取存储在磁盘上的文件信息,然后显示出来
也可以使用stat命令查看更多详细信息
ext2文件系统
Linux ext2文件系统是离散存储方式,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的。
名称 | 解释 |
---|
Block Bitmap | 本质是一个位图,每一个比特位表示Data Block当中块的使用情况,如果比特位为1,则表示占用,如果为0,则表示空闲 |
Data Blocks | 实际存储文件的blocks区域,这个区域中,将磁盘分成了不同的小block |
inode Bitmap | 本身是一个位图,每一个比特位表示inode table当中inode块的使用情况,如果比特位为1,则表示占用,如果为0,则表示空闲 |
inode Table | inode结点的集合,inode节点描述了文件的存储情况(文件在那些block块当中存储的) |
由此我们可以知道文件的存储和获取过程。
文件的存储
(1)去Block Bitmap 区域查找空闲的block块,将文件存储在空闲的block块当中
(2)通过inode Bitmap获取空闲的inode节点,通过inode节点去描述文件在Data Block区域中存储的位置
(3)inode+ 文件名称作为目录的目录项保存下来
文件的获取
(1)通过文件名称和inode节点找到inode对应的文件信息
(2)在Data block区域中获取当前文件存储的内容,在进行拼接,拼接完成之后就是文件的内容了
Linux内核设计与实现PDF下载地址:
链接:https://pan.baidu.com/s/1CF2vthTl8pSGMEFHyca81Q
提取码:xxxx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)