文件系统 linux ─── 第19课

news2025/3/16 20:28:42

前面博客讲解的是内存级文件管理,接下来介绍磁盘级文件管理

文件系统分为两部分

  1. 内存级文件系统 : OS加载进程 ,进程打开文件, OS为文件创建struct file 和文件描述符表 ,将进程与打开的文件相连, struct file 内还函数有指针表, 屏蔽了底层操作的差异,struct file中还有内核级文件缓冲区(提高效率)
  2. 磁盘级文件系统: 管理磁盘上的文件

磁盘结构

它通过磁性材料或闪存技术将数据持久化存储,即使在断电后数据也不会丢失

主要分为机械硬盘(HDD)和固态硬盘(SSD)

今天我们讲解机械硬盘

机械硬盘(HDD,Hard Disk Drive)
  • 工作原理

    • 使用磁性材料涂覆的旋转盘片存储数据, 比如磁性南极代表1 ,磁性北极代表0(打比方)

    • 通过磁头在盘片上移动来读写数据

定位扇区

CHS寻址模式

        在硬盘的传统寻址模式中,数据是通过柱面(Cylinder)、磁头(Head)、扇区(Sector)的组合来寻址的,这种方式被称为CHS寻址(Cylinder-Head-Sector)

        扇区: 磁盘存储数据的基本单位 ,512字节, 因此,磁盘是块设备

        柱⾯上的每个磁道,扇区个数是⼀样的

注意: C H都是从0编码 ,S从1编码

真实过程 ⼀个细节:传动臂上的磁头是共进退的

LBA逻辑块寻址模式

        LBA(Logical Block Addressing)逻辑块寻址模式。在 LBA 模式下,我们知道硬盘上的一个数据区域由它所在的磁头、柱面(也就是磁道)和扇区所唯一确定。

        在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将 CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了烦琐的磁头/柱面/扇区的寻址方式。

        在访问硬盘时,由硬盘控制器再这种逻辑地址转换为实际硬盘的物理地址。

        OS只需要使⽤LBA就可以了!!LBA地址转成CHS地址,CHS如何转换成为LBA地址。谁做啊??磁盘 自己来做!固件(硬件电路,伺服系统)

LBA与C/H/S 之间的转换:

LBA =柱面号C*单个柱面的扇区总数 + 磁头号H*每个磁道扇区的数量+ 扇区号S-1

       =柱面号*(磁头数*每个磁道扇区数)+磁头号H*每个磁道扇区的数量+ 扇区号S-1
 

柱面号C = LBA//(磁头数*每磁道扇区数)   就是单个柱面的扇区总数

磁头号H =(LBA% (磁头数* 每磁道扇区数)) // 每磁道扇区数

扇区号S =(LBA% 每磁道扇区数)+1

// 代表除法向下取整

        所以:从此往后,在磁盘使用者看来,根本就不关心CHS地址,⽽是直接使⽤LBA地址磁盘内部自己转换。所以: 从现在开始,磁盘就是⼀个  元素为扇区  的⼀维数组,数组的下标就是每⼀个扇区的LBA地址。OS使用磁盘,就可以⽤⼀个数字访问磁盘扇区了。

在磁盘如何管理文件

引入"块"概念

        其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样 效率太低,⽽是⼀次性连续读取多个扇区,即⼀次性读取⼀个”块”(block)

         硬盘的每个分区是被划分为⼀个个的”块”。⼀个”块”的⼤⼩是由格式化的时候确定的,并且不可 以更改,最常⻅的是4KB,即连续⼋个扇区组成⼀个”块””块”是⽂件存取的最⼩单位。

注意:

  • 磁盘就是⼀个三维数组,我们把它看待成为⼀个"一维数组",数组下标就是LBA,每个元素都是扇区
  • 每个扇区都有LBA,那么8个扇区⼀个块,每⼀个块的地址我们也能算出来.
  • 知道LBA:块号 = LBA / 8
  • 知道块号:LAB=块号*8+n  (n是块内第几个扇区 1<= n <=8)

引入"分区"概念

        其实磁盘是可以被分成多个分区(partition)的,以Windows观点来看,你可能会有⼀块磁盘并且将 它分区成C,D,E盘。那个C,D,E就是分区。分区从实质上说就是对硬盘的⼀种格式化。但是Linux的设备 都是以文件形式存在,那是怎么分区的呢?

        柱面是分区的最⼩单位,我们可以利⽤参考柱⾯号码的⽅式来进⾏分区,其本质就是设置每个区的起 始柱⾯和结束柱⾯号码。此时我们可以将硬盘上的柱⾯(分区)进⾏平铺,将其想象成⼀个⼤的平面,如下图所示:

        柱面大小⼀致,扇区个位⼀致,那么其实只要知道每个分区的起始和结束柱⾯号,知道每 ⼀个柱面多少个扇区,那么该分区多⼤,其实和解释LBA是多少也就清楚了.

也就是OS管理磁盘,通过分治思想,将磁盘进行分区处理,但分出的区大小还有几百GB ,进一步对区分组 分成Block Group ,直接将每个组管理好即可.

  • 文件 = 内容+属性 
  • 文件内容存储在(Block Group)的 Data blocks中
  • 文件属性也是数据 ,linux中 文件的属性数据(比如文件的创建者、文件的创建日期、文件的大小等等)以数据结构(inode)的方式 存储
  • 一个文件一个inode ,inode大小有128字节 或者256字节, inode又存在 inodetable中
  • ls -l -i    可以打印出文件详细信息   包括文件的inode值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2316238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

射频前端模块(FEM)的基本原理与架构:从组成到WiFi路由器的应用

射频前端模块(FEM)的基本原理与架构:从组成到WiFi路由器的应用 一、FEM是什么? 射频前端模块(Front-End Module, FEM)是无线通信系统中负责处理射频信号的核心组件。它将多个关键电路集成在一个模块中,包括功率放大器(PA)、低噪声放大器(LNA)、射频开关(Switch)、…

qemu分析之 KVM_EXIT_MMIO

基于qemu-2.8.1 address_space_rw 函数作用 这是QEMU内存子系统的核心函数&#xff0c;负责分块处理跨MemoryRegion的内存读取操作。主要场景包括&#xff1a; 处理跨越多个MemoryRegion的连续内存读取区分RAM直接访问与MMIO设备模拟处理不同位宽&#xff08;1/2/4/8字节&am…

OSI 七层网络模型

文章目录 OSI 七层模型应用层表示层会话层传输层网络层数据链路层物理层 TCP/IP 四层模型应用层传输层网络层数据链路层 TCP/IP 特点OSI 和 TCP/IP 两者关系通信过程及相关协议常用协议及端口号常用协议分类参考链接 OSI 七层模型 七层模型&#xff0c;亦称OSI&#xff08;Ope…

虚拟电商-数据库分库分表(二)

本文章介绍&#xff1a;使用Sharding-JDBC实现数据库分库分表&#xff0c;数据库分片策略&#xff0c;实现数据库按月分表 一、Sharding-JDBC使用 1.1.准备环境 步骤一&#xff1a;分库分表sql脚本导入 创建了两个数据库&#xff1a;chongba_schedule0 和chongba_schedule1…

进程间通信--匿名管道

进程间通信介绍 进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件&…

C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色

C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色 安装 Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.Windows 普通实现 using System; using System.Collections.Generic; using System.Linq; using OpenCvSharp; // 添加OpenCV引用…

基于SSM + JSP 的图书商城系统

基于SSM的图书商城 网上书城、图书销售系统、图书销售平台 &#xff5c;Java&#xff5c;SSM&#xff5c;HTML&#xff5c;JSP&#xff5c; 项目采用技术&#xff1a; ①&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Tomcat ②&#xff1a;技术栈&#xff1a;Java、…

【漫话机器学习系列】133.决定系数(R²:Coefficient of Determination)

决定系数&#xff08;&#xff09;详解 决定系数&#xff08;&#xff09;是回归分析中用于评估模型拟合优度的一个重要统计指标。它表示自变量&#xff08;特征变量&#xff09;能够解释因变量&#xff08;目标变量&#xff09;变异的程度&#xff0c;取值范围为 [0,1] 或 (−…

Machine Learning: 十大基本机器学习算法

机器学习算法分类&#xff1a;监督学习、无监督学习、强化学习 基本的机器学习算法&#xff1a; 线性回归、支持向量机(SVM)、最近邻居(KNN)、逻辑回归、决策树、k平均、随机森林、朴素贝叶斯、降维、梯度增强。 机器学习算法大致可以分为三类&#xff1a; 监督学习算法 (Sup…

【八股文】ArrayList和LinkedList的区别

先讲讲两者是如何实现的 ArrayList public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable {transient Object[] elementData; private int size; } 通过源码可以看出&#xff0c;ArrayLis…

汇编语言 | 王爽 | 学习笔记

汇编语言 | 王爽 | 学习笔记 文章目录 汇编语言 | 王爽 | 学习笔记一、基础知识1、指令2、存储器3、总线1、总线2、CPU对存储器的读写3、CPU对外设的控制 4、内存地址空间 二、寄存器1、寄存器2、通用寄存器3、8086CPU给出物理地址的方法4、段寄存器1、CS和IP2、DS 和 [address…

JumpServer基础功能介绍演示

堡垒机可以让运维人员通过统一的平台对设备进行维护&#xff0c;集中的进行权限的管理&#xff0c;同时也会对每个操作进行记录&#xff0c;方便后期的溯源和审查&#xff0c;JumpServer是由飞致云推出的开源堡垒机&#xff0c;通过简单的安装配置即可投入使用&#xff0c;本文…

EDID读取学习

简介 Video BIOS可以被认为是一个具有独立硬件抽象层的操作系统。它不会阻止或监视操作系统、应用程序或设备驱动程序对硬件的直接访问。虽然不推荐,但一些DOS应用程序确实可以改变基本的硬件设置,而根本不需要通过视频BIOS。大多数现代应用程序和操作系统都避免直接使用硬件…

【笔记】深度学习模型训练的 GPU 内存优化之旅:综述篇

开设此专题&#xff0c;目的一是梳理文献&#xff0c;目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化&#xff0c;所以最初思考的专题名称是“显存突围&#xff1a;深度学习模型训练的 GPU 内存优化之旅”&#xff0c;英文缩写是 “MLSys_GPU_Memory_Opt”。…

2024山东大学计算机复试上机真题

2024山东大学计算机复试上机真题 2024山东大学计算机复试机试真题 历年山东大学计算机复试上机真题 历年山东大学计算机复试机试真题 在线评测&#xff1a;传动门&#xff1a;pgcode.cn 最长递减子序列 题目描述 输入数字 n&#xff0c;和 n 个整数&#xff0c;输出该数字…

Vue 计算属性与 Data 属性同名问题深度解析

文章目录 1. 问题背景与核心概念1.1 Vue 响应式系统架构1.2 核心概念定义 2. 同名问题的技术分析2.1 同名场景示例2.2 问题发生机制 3. 底层原理剖析3.1 Vue 初始化流程3.2 响应式系统关键代码 4. 问题解决方案4.1 最佳实践建议4.2 错误处理机制 5. 性能影响分析5.1 递归调用性…

[文献阅读] 可变形卷积DCN - Deformable Convolutional Networks

**文献信息&#xff1a;**Deformable Convolutional Networks arxiv.org/abs/1703.06211 发表于ICCV 2017&#xff0c;提出了可变形卷积DCN&#xff08;Deformable ConvNets&#xff09; 摘要 卷积神经网络&#xff08;CNN&#xff09;由于其构建模块固定的几何结构天然地局限…

【统计学相关笔记】2. 多元正态的Cochran定理

fisher 引理 如何说明一个线性变换和二次型独立&#xff1a; 二次型矩阵和线性变换阵乘积0即可。

蓝桥杯刷题——第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

一、0握手问题 - 蓝桥云课 算法代码&#xff1a; #include <iostream> using namespace std; int main() {int sum0;for(int i49;i>7;i--)sumi;cout<<sum<<endl;return 0; } 直接暴力&#xff0c;题意很清晰&#xff0c;累加即可。 二、0小球反弹 - 蓝…

Canoe Panel常用控件

文章目录 一、Panel 中控件分类1. 指示类控件2. 功能类控件3. 信号值交互类控件4. 其他类控件 二、控件使用方法1. Group Box 控件2. Input/Output Box控件3. Static Text控件4. Button控件5. Switch/Indicator 控件 提示&#xff1a;Button 和 Switch 的区别参考 一、Panel 中…