文件系统基础
(1) 核心定义
文件系统是操作系统用于在磁盘或分区上组织、存储和检索文件和目录的一种机制。它通过定义文件和目录的结构、存储方式以及访问权限等规则,为用户提供了一个高效、有序的方式来管理和使用数据。文件系统是连接用户与存储硬件之间的桥梁,抽象了硬件设备的物理特性,使得用户可以像操作文件和目录一样简单地进行数据存储和检索。
(2) 关键特征或步骤
文件属性包含文件的基本信息(文件名,文件类型,文件物理位置,文件逻辑结构),存取控制信息(所有者,访问修改日期),使用信息(创建、修改时间)
FCB是OS为每个文件建立的唯一数据结构,用于管理、控制、和按名存取文件,包含文件所有属性,文件由FCB和文件数据两部分组成,其中FCB的有序集合称为目录
为了提高文件查找速度,将文件名和索引节点指针保存在目录中。
索引结点可分为内存索引节点和磁盘索引节点,其中磁盘包含文件链接计数(指向该文件的指针个数,硬链接),文件物理地址,存取权限,类型,长度等,内存索引节点包含编号,状态,访问计数(访问i节点的进程个数),逻辑设备号和链接指针。
- 文件的逻辑结构
- 无结构文件:将文件看作是字符流的集合,操作系统不对文件内的数据进行结构划分,完全由应用程序来解释和管理文件的内容。这种结构简单灵活,适用于各种不同类型的数据,如文本文件、可执行文件等。应用程序可以根据自身的需要对文件进行读写操作,不受操作系统对文件内容结构的限制。
- 有结构文件:文件被划分为多个逻辑记录,每个记录具有固定的长度和格式,操作系统根据记录的边界进行读写操作。这种结构适用于具有固定数据格式的应用场景,如数据库文件等,能够提高数据存储和检索的效率,方便对数据进行批量操作和索引管理。
- 文件的物理结构
- 连续结构:文件的所有数据块在磁盘上是连续存放的,这种结构的优点是文件的读写速度快,因为磁头移动距离短,数据访问的延迟小。然而,缺点也非常明显,即在文件频繁增删改的情况下,很难找到足够大的连续存储空间来存放文件,容易导致存储空间的碎片化,降低了磁盘空间的利用率。
- 链式结构:文件的各个物理块通过链接指针顺序链接起来,每个物理块包含数据部分和指向下一个物理块的指针。这种结构的优点是文件的存储空间分配灵活,无需连续空间,能够有效地利用存储空间,避免碎片化问题。但是,缺点是文件的访问速度相对较慢,因为需要逐个通过链接指针访问各个数据块,增加了访问延迟。
- 索引结构:文件系统为每个文件建立一个索引表,索引表中存放文件数据块的地址信息。这种结构综合了连续结构和链式结构的优点,既能够灵活地存储文件数据,又能够实现较快的文件访问速度。通过索引表可以快速定位到文件的任意位置,便于对文件进行随机访问操作。
- 文件的存储空间管理
- 位图法:用一个位图来表示磁盘存储空间的使用情况,每一位对应磁盘上的一个物理块,0表示该块未被占用,1表示已被占用。这种方法的优点是空间分配和回收操作简单,能够快速找到连续的空闲空间。但是,缺点是位图本身会占用一定的存储空间,且当磁盘容量较大时,位图的管理开销也会相应增加。
- 空闲表法:通过一个空闲表来记录磁盘上所有空闲空间的信息,包括空闲块的起始位置和长度。这种方法的优点是能够详细地记录空闲空间的情况,便于进行高效的存储空间分配。然而,缺点是空闲表的管理比较复杂,特别是在文件频繁增删改的情况下,空闲表的更新和维护工作量较大。
- 成组链接法:将多个空闲块组织成一组,每组有一个头块,头块中存放该组空闲块的数量和下一组头块的指针。这种方法既能够简化空闲表的管理,又能够减少存储空间的浪费,是一种比较折中的存储空间管理方法。
- 文件的分配方式
- 顺序分配:按照文件的逻辑顺序依次分配存储空间,通常用于磁带等顺序存储设备。这种分配方式的优点是文件的读写速度较快,因为数据是顺序存放的,磁头移动距离短。但是,缺点是存储空间的利用率较低,容易产生存储碎片,且文件的扩展性较差,当文件需要增大时,很难找到连续的存储空间来扩展文件。
- 随机分配:文件的各个数据块可以在存储空间中任意位置分配,通常用于磁盘等随机存储设备。这种分配方式的优点是存储空间的利用率较高,能够灵活地利用存储空间,避免碎片化问题。然而,缺点是文件的访问速度相对较慢,因为需要进行复杂的地址转换和磁头寻道操作。
- 文件的目录结构
- 单级目录结构:所有文件都存放在同一个目录中,这种结构简单,但随着文件数量的增加,管理会变得困难,容易出现文件名冲突等问题。
- 两级目录结构:将目录分为用户文件目录和主文件目录,用户文件目录存放用户的文件控制块,主文件目录存放用户文件目录的索引。这种结构能够较好地解决文件名冲突问题,提高文件管理的效率。
- 多级目录结构:目录可以嵌套多层,形成树形结构。这种结构的优点是能够方便地组织和管理大量的文件和目录,用户可以按照自己的需要创建多级目录结构,对文件进行分类管理。同时,多级目录结构也能够提高文件检索的效率,通过路径名可以快速定位到目标文件或目录。
建立文件时,首先提供空闲管理方法找到空闲块,为其分配磁盘索引节点、内存索引节点和FCB,将磁盘索引节点指针和文件名组成新的目录项,记录到目录文件当中。之后是设置文件的内存索引信息,为新文件分配用户打开文件表和系统打开文件表,并为后者设置初值,最好返回用户文件表。
删除文件应删除文件目录中的相应目录项,把该文件占用的进程空间释放,包括FCB
打开文件首先检索目录,OS根据文件名来查找文件,找到文件后将其磁盘索引节点复制到内存索引节点表中,并将FCB调入内存。
如果文件已经被打开,则仅需把内存索引节点中的引用计数加一即可。
打开合法时,为文件分配用户打开文件表项和系统打开文件表项,并为后者设置初值,通过指针建立表项和内存索引节点之间的关系,将文件描述符FD返回给用户。
关闭文件时,根据fd找到用户打开文件表项,再找到系统打开我呢见表项,将该文件从用户打开文件表条目上删除,把对应系统打开文件表项中的文件打开计数减一,当为0时,说明此时没有其余进程共享,将其内存索引节点复制到相应磁盘索引节点,释放此内存索引节点。
(3) 典型应用场景
- 个人计算机操作系统
- 在个人计算机的Windows、macOS等操作系统中,文件系统负责管理用户的各种文档、图片、视频等数据文件。用户可以通过文件浏览器方便地查看、创建、修改和删除文件和目录,操作系统在后台根据文件系统的规则进行存储空间的分配和管理,保证文件数据的安全和完整性。例如,在Windows系统中,NTFS文件系统支持大容量存储设备,具有良好的文件安全性、稳定性和兼容性,能够满足用户日常的各种文件操作需求。
- 服务器操作系统
- 对于服务器操作系统如Linux、UNIX等,文件系统在服务器的运行和数据管理中发挥着关键作用。服务器通常需要存储大量的业务数据,如网站数据、数据库文件等。文件系统不仅要保证数据的高效存储和快速访问,还需要具备高可靠性、高并发访问能力和数据备份恢复功能。例如,Linux系统中的ext4文件系统具有良好的性能和可靠性,在服务器环境中能够稳定地运行,支持大容量存储设备和高并发文件访问操作。
- 移动设备操作系统
- 在智能手机、平板电脑等移动设备中,文件系统负责管理设备上的应用程序数据、用户照片、视频等文件。由于移动设备的存储空间相对较小,文件系统需要在有限的空间内高效地存储和管理文件数据,同时还要保证文件访问的速度和安全性。例如,Android系统的文件系统采用Linux内核的文件系统,通过合理的存储空间管理机制,能够有效地利用设备的存储空间,满足用户在移动设备上的各种文件操作需求。
- 分布式文件系统
- 在分布式计算环境中,如Hadoop分布式文件系统(HDFS)、Google文件系统(GFS)等,文件系统需要管理分布在多个节点上的文件数据,实现数据的分布式存储、高可用性和容错能力。分布式文件系统通过将文件分割成多个数据块,并将这些数据块存储在不同的节点上,同时进行数据备份和冗余存储,确保数据的可靠性和安全性。例如,在大数据处理场景中,HDFS能够高效地存储和处理海量的数据,支持大规模集群环境下的文件读写操作,为分布式计算提供了强大的存储基础。
- 云存储服务
- 云存储服务提供商如Amazon S3、阿里云OSS等,其底层也依赖于先进的文件系统技术。这些云存储服务通过文件系统实现了数据的分布式存储、弹性扩展和高可用性,用户可以通过网络接口方便地上传、下载和管理文件数据。云存储服务中的文件系统需要具备高度的可扩展性,能够根据用户的存储需求动态地分配存储资源,同时还要保障数据的安全性和隐私性。
浙公网安备 33010602011771号