Linux 由于其开源、比较稳定等特点统治了服务端领域。
也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。
因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经常出现的。它的开源特性也让它适合于让对于计算机和操作系统底层原理感兴趣的人进行学习。
文件系统模块其他文章:
轻松理解操作系统 - Linux 文件系统的心脏是什么?-CSDN博客
轻松理解操作系统 - Linux文件系统在内存中有什么数据结构-CSDN博客
轻松理解操作系统 - 轻松了解 inode 是如何管理文件的-CSDN博客
轻松理解操作系统 - Linux 软硬链接是什么?-CSDN博客
开始今天的正文:
一、真正储存数据的地方 - 数据块
数据块(Block)是文件系统存取文件的最小单位,由多个连续的扇区(Sector)组成,最常见的大小是4KB。
对于机械硬盘而言:
每个扇区通常存储512字节(或更大,如4KB)数据。默认数据块大小为 4KB,也就是 8 个扇区。
对于固态硬盘而言:
大多数固态硬盘的默认数据块大小其实也是 4KB,但一些高端固态硬盘或特定的文件系统可能支持更大的数据块大小,如 8KB、16KB 等。
二、硬盘上这么多的储存单元是怎么简化管理的?
1、试想下有什么方法将硬盘上的这些扇区统一管理起来?- 利用固定的数据块大小
数据块的大小在文件系统创建时确定,并且在整个文件系统中保持一致。这种固定大小的设计有助于简化文件系统的管理。
2、那有什么方法可以简化读取文件的流程呢?- 将实际分散的数据块 抽象为上连续的
这句话可能看上去有点绕,但实际上其实就是像图例一样,读取的时候按照顺序逐个读取数据块。
3、利用其他的数据结构共同管理数据块 - 利用超级块、inode、块位图来辅助管理
超级块储存了文件系统全局的信息,inode储存了指向数据块的多级指针,块位图记录了数据块的占用情况
三、那为什么说数据块适合储存大文件呢?
1、其实数据块也可以保存其他数据块的地址(位置)
如果文件很大,则不止在 inode 里面会保存指向保存文件的数据块的地址。
也会有数据块中保存的东西是其他储存该文件数据的数据块的地址,这就是一级指针。
同理,也可以有数据块中存满了保存一级指针的数据块的地址,以此类推这就是二级指针。
以此类推到多级指针,就可以储存很大的文件了。
四、那我们如何快速获知数据块的占用情况呢?- 块位图
1、位图是什么?
位图是一种紧凑型数据结构,用于表示一个固定大小的集合或序列中的元素状态(存在或不存在)。
2、位图有什么优点?
紧凑省空间
位图使用位(bit)作为最小存储单位,每个位只有两种状态(0或1),每个位的大小只有八分之一 bit。因此能够非常紧凑地表示数据。
常数级别时间 O(1) 检查元素是否存在
通过直接索引查找位数组,可以在常数时间内完成存在检查操作。
3、数据块使用情况的地图 - 块位图
用位图表示文件系统中数据块的使用情况。每个位(bit)对应一个数据块,如果位被设置为1,则表示相应的数据块已被使用;如果位被设置为0,则表示相应的数据块是空闲的。
4、块位图在哪?
块位图并没有保存在超级块中,而是作为一个独立的块(或多个块)存储在文件系统中。它的具体位置取决于文件系统的布局和配置。
五、平衡空间利用率和性能的关键点为什么是块大小?
1、文件不足一个数据块大小的部分依旧会占用一整块 - 单个数据块越小,则空间利用率越高
2、操作系统每次读取写入都是以一个数据块为最小单位 - 单个数据块越大,则读取写入性能越高
六、文中提到的文件系统总的“管理者”是谁?下期文章揭晓
一个从生化环材专业转行的字节研发工程师,日常分享干货和有趣的科普。欢迎围观
标签:储存,操作系统,文件系统,Linux,位图,数据 From: https://blog.csdn.net/H_P10/article/details/143661808