【Linux】文件系统

发布于:2024-10-10 ⋅ 阅读:(125) ⋅ 点赞:(0)

目录

磁盘

磁盘的结构

小问题解答:

磁盘存储的逻辑抽象

文件系统

问题解答:⭐⭐⭐⭐


在学习文件系统前我们先来了解一下磁盘。

在我们之前的学习中,我们对于文件的操作,都是在文件已经被打开的前提下进行的;

被打开的文件 -->找到这个文件 -->磁盘中先找到 -->文件路径+文件名 -->执行文件操作

那你们有没有一个疑问?没有被打开的文件在哪里存放呢⁉️

没有被打开的文件是被放到磁盘里的!!磁盘中有磁盘文件,那这个没有被打开的文件是如何存取的呢?

想要知道这个问题的答案,我们先来了解一下磁盘;

磁盘

磁盘到底长啥样啊?

磁盘的结构

一个磁盘有多个盘片,一个盘片有两个盘面,每个盘面都有对应的磁头

我们知道,在计算机中只认识二进制,那么磁盘是怎么存储数据的呢

盘片的表面涂有磁性物质,这些磁性物质用来记录二进制数据。

注意:磁头并不会碰到盘面,如果磁头和盘面接触,那么读取数据的时候,就会使盘面受到损害,那么存储的数据就会丢失;所以磁头是悬浮在盘片上的;

把一个盘片单独的拿出来:

每个盘面被划分成一个个磁道,磁道又被划分为多个扇区

我们从图纸可以看到,每个磁道的大小都不一样,在外圈的磁道比较大,内圈的磁道比较小,但是不管有多大有多小,每个磁道存储内容的大小都是一样的;只不过扇区小的存储的数据紧密点已;

磁盘读写的基本单位是扇区,一个扇区大部分存储的是512字节,但是也有的扇区存储的是4KB;

小问题解答:

如何找到一个指定位置的扇区?

  1. 找到指定的磁头(Header)
  2. 找到指定的磁道(Cylinder)
  3. 找到指定的扇区(Sector)

上面的方法就是CHS定址法

磁片中的盘面为什么要旋转?

  • 通过旋转来定位扇区;

磁头为什么要左右摇摆?

  • 通过左右摇摆来定位磁道;

通过学习磁盘的结构,我们可以知道,文件就是在磁盘中占几个扇区的问题!!

磁盘存储的逻辑抽象

对磁盘的存储进行逻辑抽象其实就是OS对磁盘进行管理和抽象;

为什么要对磁盘的存储进行逻辑抽象呢?

  • OS直接使用CHS定址法,耦合度太高;
  • 方便实现内核进行磁盘管理

不知道你们有没有见过磁带(没有见过的可以看下面图片):

我们就可以把整个磁盘看成一个一个的扇区这样来分:

假如有一个盘面1000个扇区,10个磁道;我们可以知道1个磁道有100个扇区;index为扇区的编号;

index/1000=H;

index%1000=tmp;[0,999]

tmp/100=C;

tmp%100=S;

文件系统

假如磁盘可以存储800GB,OS管理数据时会把它先分区在分组;

文件=文件内容+文件属性;

文件在磁盘中存储,本质上文件内容+文件属性数据;

Linux文件系统特定,文件内容和属性并不是存放在同一个地方,而是分开放的;

我们来看分别看一下每个组里面有什么;

  • data blocks:数据区,存放文件内容;
  • block bitmap:块位图,Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息
  • 超级块(Super Block):存放文件系统本身的结构信息。(并不是每个分组都有)

注意:

        inode 内部不含文件名!!!

        内核层面,每一个文件都要有inode number,我们可以通过inode号标识文件!!!

如何查找文件的inode号呢?

ll -li

每个分区内部分组,然后写入文件系统的管理数据(格式化!!!)-->在磁盘中写入文件系统!!!

问题解答:⭐⭐⭐⭐

我们先来看目录:

目录也是一个文件,目录里面有什么呢?

存放的是文件名和inode号的映射关系

我们要查找一个文件 ,要先找到他的inode号(inode号是以分区为单位),我们平时查找一个文件时并没有用它的inode号啊,我们用的一直都是文件名,他俩有什么关系呢?我们上面不是说文件名和inode号不存放在同一个地区嘛,怎么通过文件名查找到inode号的?

找到指定文件:先找到文件所在目录 --->打开目录  ---->根据文件名查找inode号 ---->目标文件的inode号

补充:(文件名和inode映射关系)

  • 一个目录下不能建立同名文件
  • 查找文件顺序:文件名-->inode号
  • 进入目录,要x权限;r权限:本质是是否允许读取目录的内容文件名;w:是否新建文件;

那又会有一个疑问,我们通过目录来查找,可是目录也是文件啊,目录的inode怎么找到?

其实就是递归似的一直向上进行路径解析,解析完毕后,找到根目录,然后再反向逐次打开我们对应的文件!!!

我们指定每一个分区都有它的inode机制,我们怎么指定这个inode在哪一个分区呢?

因为一个文件在访问之前,都是先有目录的!!!/a/b/c...

这样就可以直接找到路径下的哪一个分区,就能找到inode,根据inode就直接去指定分区下找指定文件了; 

磁盘-->分区-->写入文件系统(格式化)-->挂载到指定目录下-->进入该目录-->在指定分区下进行文件操作;

那目录是由谁提供的呢?

内核文件系统提前写入并组织好,然后你或你的进程提供!!!

以上就是文件系统的全部内容,希望有所帮助。😉😉😉


网站公告

今日签到

点亮在社区的每一天
去签到