【Linux】操作系统中的文件系统管理:磁盘结构、逻辑存储与文件访问机制

发布于:2024-06-04 ⋅ 阅读:(68) ⋅ 点赞:(0)

前言:

在现代操作系统中,文件系统的管理是核心功能之一,它负责处理文件的存储、访问和组织。文件系统不仅需要高效地管理磁盘空间,还要能够快速地定位和检索文件。本文将深入探讨文件系统的工作原理,包括磁盘的物理结构、逻辑存储方式以及操作系统如何管理文件和目录。通过理解这些概念,我们可以更好地理解操作系统如何与硬件交互,以及如何优化文件系统的使用。

进程打开文件!
系统中是不是所有的文件都被被打开了呢? 大部分文件是没有被打开的。
如果没有被打开呢? 在哪里保存?磁盘,SSD。OS 要不要管理一下磁盘文件呢? 如何让OS快速定位一个文件。

1. 磁盘机械结构

在这里插入图片描述

盘片(Platters):硬盘内部通常包含多个金属或玻璃盘片,数据会被存储在这些盘片的表面上。盘片通常被涂覆有磁性材料,用于记录数据。

磁头(Read/Write Heads):硬盘内部会有多个磁头,它们位于每个盘片的上下两面,用于读取和写入数据。磁头会在盘片的表面上移动,以实现对数据的访问。

手臂(Actuator Arm):硬盘内部还包含一个或多个手臂,用于支撑磁头,并能够在盘片的表面上移动,从而让磁头能够定位到正确的磁道上进行读写操作。

主轴电机(Spindle Motor):硬盘内部的主轴电机用于旋转盘片,使得磁头能够在正确的位置上读取或写入数据。硬盘的旋转速度通常以每分钟转数(RPM)来表示。

2. 磁盘物理结构

在这里插入图片描述
磁道/柱面:唯一的编号。
扇区:是磁盘IO的基本单位(512字节,4KB) ,但不一定是系统和磁盘IO的基本单位。
磁头、盘面:都有唯一的编号

如果我想访问磁盘中的一个扇区:
通过磁头定位:磁道/柱面(cylinder),使用哪一个磁头(head),哪一个扇区(sector)。(CHS定位法)
那么任何文件,不就是多个扇区承载的数据吗?

3. 磁盘的逻辑存储

在这里插入图片描述
Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的,

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例 子
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super
    Block的信息被破坏,可以说整个文件系统结构就被破坏了
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • 数据区:存放文件内容

Linux 磁盘文件特性:文件 = 内容 + 属性 (内容和属性分开存储)
类容: 大小不确定,可能很大,可能很小。
属性:固定大小的。(属性的类别是一样的,只不过每个类别内容不一样)

struct inode // 128字节
{
	// inode编号 (识别唯一性)
	// 类型
	// 大小
	// 权限
	// 时间
	// ...
}

注意:文件名不属于文件属性!
系统中,标识一个文件不是用的文件名,而是 inode!

3. 1. 文件名呢?

  • 任何一个普通文件,一定在一个目录中。
  • 目录 是不是文件?
    是,inode(inode编号) + 目录内容(文件名:inode编号的映射关系)
  • 如果一个目录没有r , w , x 表现是什么?
    因为创建文件最终是要修改目录的内容的,所以没有就创建不了。

3.2 对文件的增删查改与 路径

对一个文件,进行增删查改,都和改文件所在的目录由关系!
查找一个文件,在内核中,都要逆向的递归得到 / ,从根目录进行路径解析。

一个被写入文件系统的分区,要被Linux使用,必须要把这个文件具有文件系统的分区进行“挂载”。
一个文件系统所对应的分区,挂载在对应的目录中! 分区的访问,都是通过所挂载的路径访问的!

访问一个文件,可以根据路径前缀,优先区分出文件在哪一个分区下!

  1. open、fopen,都需要我们提供文件路径的
  2. 进程的当前路径!

3.3. 文件

  1. 打开的文件
  2. 没有打开的文件

4. 软硬链接

4.1. 操作观察现象

  • 创建软链接
ln -s test.txt soft 

软连接本质是一个文件,有独立的 inode

  • 创建硬链接
ln hello.txt link.hard

硬链接本质不是一个独立的文件,因为它的 inode 编号和目标文件相同,写入道指定目录的数据块中。

4.2. 软硬链接的原理

  • 硬链接本质就是在指定的目录下,插入新的文件名和目标文件的映射关系,并让 inode 引用计数++
  • 软链接本质就是一个独立文件,软链接内容里面存放的目标文件的路径!软链接类似 windows 下的快捷方式。

4.3. 软硬链接的应用场景

硬链接:维护目录间映射的关系,一个目录下有多少个子目录:硬链接数 - 2 计算得到。

因为环路问题,不允许给目录建立硬链接。

总结

本文详细介绍了文件系统的工作机制,从磁盘的物理结构到逻辑存储,再到操作系统如何管理文件和目录。我们了解到,尽管大部分文件在任何给定时间都是未被打开的,操作系统仍然需要有效地管理这些文件。磁盘的机械结构和物理结构决定了数据的存储方式,而文件系统的逻辑结构则决定了文件的组织和访问方式。

Linux文件系统,如ext2,通过使用块设备、块组、超级块、块位图和inode等概念来管理文件。每个文件都有其对应的inode,其中包含了文件的属性,而文件名则存储在目录中,目录本身也是一个文件。操作系统通过路径解析来查找文件,并可能需要跨多个分区进行搜索。

此外,我们还探讨了硬链接和软链接的概念及其应用场景。硬链接通过增加inode的引用计数来实现,而软链接则是一个包含目标文件路径的独立文件。硬链接常用于维护目录间的映射关系,而软链接则类似于Windows下的快捷方式。

通过理解这些概念,用户和开发者可以更有效地与文件系统交互,优化存储空间的使用,并提高文件访问的效率。操作系统的文件管理是一个复杂但至关重要的过程,它确保了数据的安全性、完整性和可访问性