当前位置: 首页 > news >正文

轻松理解操作系统 - 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、操作系统每次读取写入都是以一个数据块为最小单位 - 单个数据块越大,则读取写入性能越高

图片



六、文中提到的文件系统总的“管理者”是谁?下期文章揭晓

一个从生化环材专业转行的字节研发工程师,日常分享干货和有趣的科普。欢迎围观

http://www.lryc.cn/news/481000.html

相关文章:

  • 青藤深度参编的终端安全国家标准正式发布
  • 软考:去中心化的部署有什么特点
  • L8.【LeetCode笔记】回文数
  • 双版本android studio安装
  • npm镜像的常用操作
  • Unity插件NodeCanvas之行为树的详细教程
  • Vue全栈开发旅游网项目(9)-用户登录/注册及主页页面开发
  • Flutter 的 Widget 概述与常用 Widgets 与鸿蒙 Next 的对比
  • 微服务day04
  • Spring Boot 集成JWT实现Token验证详解
  • 如何快速搭建一个spring boot项目
  • 学习笔记:黑马程序员JavaWeb开发教程(2024.11.9)
  • 【软考】系统分析师第二版 新增章节 第20章微服务系统分析与设计
  • 抓包工具WireShark使用记录
  • C++上机实验|多态性编程练习
  • php伪协议介绍
  • 『事善能』MySQL基础 — 2.MySQL 5.7安装(一)
  • 漫谈分布式唯一ID
  • 【复旦微FM33 MCU 开发指南】ADC
  • ORB_SLAM3安装
  • GoLang协程Goroutiney原理与GMP模型详解
  • 全文检索ElasticSearch到底是什么?
  • FPGA实现串口升级及MultiBoot(五)通过约束脚本添加IPROG实例
  • 文献阅读 | Nature Methods:使用 STAMP 对空间转录组进行可解释的空间感知降维
  • 【模块化大作战】Webpack如何搞定CommonJS与ES6混战(1-3)
  • [NewStar 2024] week5完结
  • IntelliJ IDEA的快捷键
  • 暮雨直播 1.3.2 | 内置直播源,频道丰富,永久免费
  • 单相锁相环,原理与Matlab实现
  • PICO+Unity 用手柄点击UI界面