首页 > 系统相关 >轻松理解操作系统 - Linux的数据块是如何储存数据的?

轻松理解操作系统 - Linux的数据块是如何储存数据的?

时间:2024-11-10 15:45:28浏览次数:5  
标签:储存 操作系统 文件系统 Linux 位图 数据

python入门

C++入门

Linux 由于其开源、比较稳定等特点统治了服务端领域。

也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。

因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经常出现的。它的开源特性也让它适合于让对于计算机和操作系统底层原理感兴趣的人进行学习。

文件系统模块其他文章:

轻松理解操作系统 - Linux 文件系统的心脏是什么?-CSDN博客

轻松理解操作系统 - Linux文件系统在内存中有什么数据结构-CSDN博客

轻松理解操作系统 - 轻松了解 inode 是如何管理文件的-CSDN博客

轻松理解操作系统 - Linux 软硬链接是什么?-CSDN博客

漫画操作系统 - 软硬连接是什么?-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

相关文章

  • 【数据库系列】postgresql链接详解
    ......
  • 字符串和数据输入
     字符串三种定义方法单引号定义法,可以内含双引号双引号定义法,可以内涵单引号可以使用转移字符(\)来将引号解除效用,变成普通字符串。示例如上字符串的拼接通过+号完成(一般用于字面量和变量或变量和变量之间),只能适用于字符串本身。例如:字符串没有办法通过+和(整数、浮点......
  • 企业常见的主数据管理挑战及解决方案
    在当今高度数字化的商业环境中,数据已成为企业决策、运营和战略规划的核心。主数据管理(MDM)作为管理核心业务数据的一种方式,帮助企业确保其关键数据在整个组织中保持一致、准确和可信。然而,许多企业在实施主数据管理时面临着各种挑战,这些挑战可能导致数据质量问题,影响决策效率,甚......
  • 性能测试数据模型建模多种方案
    目录基于业务场景的数据建模负载和压力测试数据建模持续性测试数据建模并发测试数据建模峰值测试数据建模数据量测试数据建模可配置参数测试数据建模基础数据准备方案测试数据准备方案执行过程中数据准备方案数据模型的建模主要针对基础数据、测试数据、执行方案,通......
  • Linux常用命令
    Linux文件与路径特殊路径/         如果出现在最前方表示为根目录,如果出现在路径中表示路径分割符     如:     /home/gl     第一个/表示根目录     第二个/表示路径分割符~     表示家......
  • 在vue项目中如何实现权限控制,菜单权限,按钮权限,接口权限,路由权限,操作权限,数据权限如何
    在实际项目开发中,权限管理是一个关键功能,用于控制不同用户对系统资源的访问。权限是对特定资源的访问许可,权限控制的目的是确保用户只能访问到被分配的资源。例如,网站管理员可以对网站数据进行增删改查,而普通用户只能浏览。权限管理的分类根据功能的不同,权限控制可以分为......
  • 4-2-2.C# 数据容器 - HashSet 扩展(HashSet 集合操作、HashSet 存储对象的特性、HashSe
    HashSet概述HashSet<T>存储的元素是无序的HashSet<T>存储的元素是不可重复的HashSet<T>支持泛型,可以指定存储的元素的类型HashSet<T>不支持索引,不可以通过索引获取或修改元素HashSet<T>不是线程安全的,在多线程环境中需要谨慎使用一、HashSet集合操作1......
  • 4-2-2.C# 数据容器 - HashSet(HashSet 的定义、HashSet 元素的基本操作、HashSet 元素
    HashSet概述HashSet<T>存储的元素是无序的HashSet<T>存储的元素是不可重复的HashSet<T>支持泛型,可以指定存储的元素的类型HashSet<T>不支持索引,不可以通过索引获取或修改元素HashSet<T>不是线程安全的,在多线程环境中需要谨慎使用一、HashSet的定义定义......
  • python中常见的8种数据结构之一列表
    列表是Python中最常见的数据结构之一。它是一种有序的集合,可以包含不同类型的数据。以下是列表的一些特点和常见操作:1.定义列表:可以使用方括号([])来定义一个空列表,也可以在方括号中添加元素来初始化列表。  示例:```my_list=[]```或者```my_list=[1,2,3]```2.......
  • python中常见的8种数据结构之一数组的应用
    在Python中,数组是一种常见的数据结构,用于存储一系列相同类型的元素。在实际应用中,数组可以用于解决各种问题。以下是数组在Python中的一些常见应用:1.存储和访问数据:数组可以用于存储和访问一组数据。可以通过索引访问数组中的元素,也可以使用切片操作来获取数组的子集。2.......