文件系统知识内容详解

文件系统是操作系统管理持久数据的关键子系统,通过索引节点和目录项组织磁盘上的文件。本文详细介绍了文件系统的基本组成,包括索引节点、目录项的概念及其关系,以及文件数据的存储方式如数据块、逻辑块和磁盘空间管理。此外,还涵盖了文件系统的虚拟文件系统(VFS)、文件的使用、文件的读写操作、存储方式(如连续、链表和索引方式)、目录的存储结构、软链接和硬链接的区别,以及各种I/O模式如缓冲与非缓冲、直接与非直接、阻塞与非阻塞、同步与异步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 文件系统的基本组成

    • 文件系统是操作系统中负责管理持久数据的子系统

    • 负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。

    • 文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。

    • Linux 文件系统会为每个文件分配两个数据结构:索引节点(index node)和目录项(directory entry),它们主要用来记录文件的元信息和目录层次结构。

      • 索引节点,用来记录文件的元信息,索引节点是文件的唯一标识,它们之间一一对应,也同样都会被存储在硬盘中,所以索引节点同样占用磁盘空间。

      • 目录项,用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。目录项是由内核维护的一个数据结构,不存放于磁盘,而是缓存在内存。

    • 索引节点唯一标识一个文件,而目录项记录着文件的名字,所以目录项和索引节点的关系是多对一

    • 目录也是文件,也是用索引节点唯一标识,和普通文件不同的是,普通文件在磁盘里面保存的是文件数据,而目录文件在磁盘里面保存子目录或文件。

    • 目录项和目录是一个东西吗?

      • 不是一个东西

      • 目录是个文件,持久化存储在磁盘,而目录项是内核一个数据结构,缓存在内存。

      • 内核会把已经读过的目录用目录项这个数据结构缓存在内存,下次再次读到相同的目录时,只需从内存读就可以,大大提高了文件系统的效率。

      • 目录项这个数据结构不只是表示目录,也是可以表示文件的。

    • 那文件数据是如何存储在磁盘的呢?

      • 磁盘读写的最小单位是扇区,扇区的大小只有 512B 大小,如果每次读写都以这么小为单位,那这读写的效率会非常低。

      • 文件系统把多个扇区组成了一个逻辑块,每次读写的最小单位就是逻辑块(数据块),Linux 中的逻辑块大小为 4KB,也就是一次性读写 8 个扇区,这将大大提高了磁盘的读写的效率。

      • 索引节点是存储在硬盘上的数据,那么为了加速文件的访问,通常会把索引节点加载到内存中。

      • 磁盘进行格式化的时候,会被分成三个存储区域,分别是超级块、索引节点区和数据块区。

        • 超级块,用来存储文件系统的详细信息,比如块个数、块大小、空闲块等等。

        • 索引节点区,用来存储索引节点;

        • 数据块区,用来存储文件或目录数据

      • 加载进内存的时机是不同的:

        • 超级块:当文件系统挂载时进入内存;

        • 索引节点区:当文件被访问时进入内存

  • 虚拟文件系统

    • 操作系统希望对用户提供一个统一的接口

    • 用户层与文件系统层引入了中间层,这个中间层就称为虚拟文件系统(Virtual File System,VFS

    • VFS 定义了一组所有文件系统都支持的数据结构和标准接口

    • 根据存储位置的不同,可以把文件系统分为三类:

      • 磁盘的文件系统,它是直接把数据存储在磁盘中,比如 Ext 2/3/4、XFS 等都是这类文件系统。

      • 内存的文件系统,这类文件系统的数据不是存储在硬盘的,而是占用内存空间,我们经常用到的 /proc/sys 文件系统都属于这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值