文章目录
- 前言:
- 1. 磁盘机械结构
- 2. 磁盘物理结构
- 3. 磁盘的逻辑存储
- 3. 1. 文件名呢?
- 3.2 对文件的增删查改与 路径
- 3.3. 文件
- 4. 软硬链接
- 4.1. 操作观察现象
- 4.2. 软硬链接的原理
- 4.3. 软硬链接的应用场景
- 总结
前言:
在现代操作系统中,文件系统的管理是核心功能之一,它负责处理文件的存储、访问和组织。文件系统不仅需要高效地管理磁盘空间,还要能够快速地定位和检索文件。本文将深入探讨文件系统的工作原理,包括磁盘的物理结构、逻辑存储方式以及操作系统如何管理文件和目录。通过理解这些概念,我们可以更好地理解操作系统如何与硬件交互,以及如何优化文件系统的使用。
进程打开文件!
系统中是不是所有的文件都被被打开了呢? 大部分文件是没有被打开的。
如果没有被打开呢? 在哪里保存?磁盘,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使用,必须要把这个文件具有文件系统的分区进行“挂载”。
一个文件系统所对应的分区,挂载在对应的目录中! 分区的访问,都是通过所挂载的路径访问的!
访问一个文件,可以根据路径前缀,优先区分出文件在哪一个分区下!
- open、fopen,都需要我们提供文件路径的
- 进程的当前路径!
3.3. 文件
- 打开的文件
- 没有打开的文件
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下的快捷方式。
通过理解这些概念,用户和开发者可以更有效地与文件系统交互,优化存储空间的使用,并提高文件访问的效率。操作系统的文件管理是一个复杂但至关重要的过程,它确保了数据的安全性、完整性和可访问性