文章目录
前言:
在现代操作系统中,文件系统的管理是核心功能之一,它负责处理文件的存储、访问和组织。文件系统不仅需要高效地管理磁盘空间,还要能够快速地定位和检索文件。本文将深入探讨文件系统的工作原理,包括磁盘的物理结构、逻辑存储方式以及操作系统如何管理文件和目录。通过理解这些概念,我们可以更好地理解操作系统如何与硬件交互,以及如何优化文件系统的使用。
进程打开文件!
系统中是不是所有的文件都被被打开了呢? 大部分文件是没有被打开的。
如果没有被打开呢? 在哪里保存?磁盘,SSD。OS 要不要管理一下磁盘文件呢? 如何让OS快速定位一个文件。
1. 磁盘机械结构
2. 磁盘物理结构
磁道/柱面:唯一的编号。
扇区:是磁盘IO的基本单位(512字节,4KB) ,但不一定是系统和磁盘IO的基本单位。
磁头、盘面:都有唯一的编号
如果我想访问磁盘中的一个扇区:
通过磁头定位:磁道/柱面(cylinder),使用哪一个磁头(head),哪一个扇区(sector)。(CHS定位法)
那么任何文件,不就是多个扇区承载的数据吗?
3. 磁盘的逻辑存储
Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的,
Linux 磁盘文件特性:文件 = 内容 + 属性 (内容和属性分开存储)
类容: 大小不确定,可能很大,可能很小。
属性:固定大小的。(属性的类别是一样的,只不过每个类别内容不一样)
struct inode // 128字节
{
// inode编号 (识别唯一性)
// 类型
// 大小
// 权限
// 时间
// ...
}
注意:文件名不属于文件属性!
系统中,标识一个文件不是用的文件名,而是 inode!
3. 1. 文件名呢?
- 任何一个普通文件,一定在一个目录中。
- 目录 是不是文件?
是,inode(inode编号) + 目录内容(文件名:inode编号的映射关系) - 如果一个目录没有r , w , x 表现是什么?
因为创建文件最终是要修改目录的内容的,所以没有就创建不了。
3.2 对文件的增删查改与 路径
对一个文件,进行增删查改,都和改文件所在的目录由关系!
查找一个文件,在内核中,都要逆向的递归得到 / ,从根目录进行路径解析。
访问一个文件,可以根据路径前缀,优先区分出文件在哪一个分区下!
- 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下的快捷方式。
通过理解这些概念,用户和开发者可以更有效地与文件系统交互,优化存储空间的使用,并提高文件访问的效率。操作系统的文件管理是一个复杂但至关重要的过程,它确保了数据的安全性、完整性和可访问性