文件介绍

操作系统中对磁盘使用的第三层抽象------文件。这一层抽象建立在**盘块(block)和文件(file)之间,**使得用户可以以更直观和易于理解的方式与磁盘交互,而无需直接处理磁盘的物理细节如扇区(sector)、柱面(cylinder)和磁头(head)。
-
用户视角的文件:
- 在用户眼中,文件是字符序列或字符流的集合。用户通常通过文件名和路径来访问文件,而不是直接操作磁盘的物理地址。
-
磁盘上的文件:
- 在磁盘上,文件被存储为一系列的盘块集合。这些盘块在物理上可能不是连续的,但文件系统通过**文件系统的索引结构(如inode或文件分配表)**来跟踪这些盘块。
-
文件抽象:
- **文件抽象是操作系统提供的一种机制,它将用户对文件的操作转换为对盘块的操作。**这种抽象隐藏了磁盘的物理细节,使得用户可以透明地读写文件。
-
字符流到盘块集合的映射:
- 操作系统负责建立字符流(即用户文件内容)和盘块集合之间的映射关系。这意味着用户写入文件的数据会被操作系统分割并存储到磁盘上的不同盘块中,而读取文件时,操作系统会重新组合这些盘块中的数据以重建原始的字符流。
-
文件系统的作用:
- 文件系统不仅管理文件和目录的层次结构,还管理文件数据到磁盘块的映射。它处理文件的创建、删除、读写等操作,并确保数据的一致性和完整性。
-
简化用户操作:
- 通过引入文件抽象,用户无需了解磁盘的物理结构和复杂的I/O操作,可以像操作本地文件一样简单地操作磁盘文件。
文件的建立
数组映射

映射的作用
-
文件与盘块的映射:
-
文件系统中,文件内容被映射到磁盘上的一系列盘块。这种映射关系由文件系统维护,对用户透明。
-
图中显示了文件
test.c
的一部分内容(200-212字符)被映射到磁盘块789。
-
-
连续结构实现文件:
- 文件在磁盘上可能不是连续存储的,但文件系统通过映射信息将这些分散的盘块组织成一个逻辑上的连续文件。
-
读写操作:
- 用户对文件的读写操作(读入、修改、读出)通过文件系统转换为对相应盘块的操作。
-
处理文件修改:
- 当文件被修改时(如删除字符),文件系统需要更新映射信息,以反映新的文件内容和结构。
如何工作
具体来说,它描述了文件如何在磁盘上存储,以及**操作系统如何通过文件控制块(FCB)来管理文件的存储位置。**以下是图中内容的详细解释:
-
文件内容与FCB(File Control Block):
-
图中显示了一个C语言文件
test.c
,其中包含一个main()
函数。 -
文件的FCB记录了文件名、起始块和块数等信息。例如,
test.c
的FCB显示文件名是test.c
,起始块是6,块数是3。
-
-
文件内容的映射:
-
文件内容被映射到磁盘上的块中。图中显示了
test.c
文件中的一段内容(200-212字符)被映射到磁盘块789。 -
这种映射是通过文件系统将文件内容分割成多个块,并在FCB中记录每个块的磁盘位置来实现的。
-
-
文件操作:
-
图中还展示了文件的读写操作。用户可以通过FCB找到文件的起始块和块数,然后进行读取、修改等操作。
-
例如,图中显示了一个操作员正在删除
test.c
文件中的200-212字符。
-
优缺点
图中实现映射的方式将文件内容映射到一系列连续的盘块,类似于数组索引的方式。这种映射方式通常称为连续分配(contiguous allocation)或连续分配策略。以下是这种映射方式的优缺点:
优点
-
简单性:
- 映射方式简单直接,易于理解和实现。
-
访问速度:
- 由于文件数据存储在连续的盘块上,顺序访问速度很快。
-
缓存效率:
- 连续存储的数据可以更好地利用缓存机制,提高整体性能。
-
无碎片:
- 不会产生外部碎片,因为文件占用的是连续的磁盘空间。
-
易于扩展:
- 文件扩展时只需分配额外的连续空间,操作简单。
缺点
-
灵活性差:
- 文件大小固定,不适合大小频繁变化的文件。
-
扩展困难:
- 如果需要扩展文件,可能需要重新分配一块连续空间并复制数据,效率低
-
碎片化问题:
- 删除文件后,可能会在磁盘上留下不连续的空闲空间,导致碎片化。
-
单点故障风险:
- 如果存储文件映射信息(如文件大小、起始块号等)损坏,可能导致整个文件不可访问。
链式映射
链式映射 是一种文件存储结构,其中文件的每个块通过指针链接到下一个块。
实现方式和工作原理
-
文件控制块(FCB):
-
每个文件都有一个FCB,其中包含文件的基本信息,如文件名、起始块地址等。
-
在链式结构中,FCB还包含指向文件第一个块的指针。
-
-
块链接:
-
文件的每个数据块都包含数据以及一个指向下一个数据块的指针。
-
最后一个数据块的指针通常设置为NULL,表示链的结束。
-
-
访问文件:
-
操作系统通过FCB找到文件的第一个块,然后通过块间的指针顺序访问文件的所有块。
-
这种结构允许文件在存储时不必是连续的,从而更有效地利用磁盘空间。
-
优缺点:
优点:
-
文件长度增减容易:
-
由于文件块是通过指针链接的,添加或删除块只需要修改相关块的指针,不需要移动大量数据。
-
这使得文件的动态扩展和收缩变得简单和高效。
-
-
空间利用率高:
- 文件块可以分布在磁盘的任何位置,这有助于减少磁盘空间的浪费,特别是在文件大小经常变化的情况下。
缺点:
-
顺序访问慢:
-
由于文件块可能分散在磁盘的不同位置,顺序访问文件时需要频繁地寻道和旋转延迟,这会降低访问速度。
-
这种结构不适合需要频繁顺序访问的应用场景。
-
-
可靠性差:
-
如果某个块的指针损坏或丢失,可能会导致整个文件无法访问。
-
需要额外的机制来维护数据的一致性和完整性。
-
-
管理开销大:
-
每个块都需要额外的指针空间,这增加了存储开销。
-
操作系统需要更多的时间来管理这些指针和块。
-
索引映射


索引结构是文件系统中的一种文件存储方式,它结合了连续分配和链式分配的优点,以提高文件访问的效率和灵活性。以下是索引结构的实现方式、工作原理以及其优缺点:
实现方式和工作原理:
-
索引块(Index Block):
-
索引结构使用一个或多个索引块来存储指向文件数据块的指针。
-
索引块可以是一级索引、二级索引或多级索引,具体取决于文件的大小和系统的实现。
-
-
一级索引:
-
在一级索引结构中,FCB包含一个索引块的地址,该索引块直接包含指向所有数据块的指针。
-
这种方式适用于小型文件,因为索引块的大小有限。
-
-
二级或多级索引:
-
对于大型文件,可以使用二级或多级索引。在二级索引中,索引块包含指向其他索引块的指针,这些索引块再包含指向数据块的指针。
-
这种方式可以支持更大的文件,但增加了查找数据块的复杂性。
-
-
访问文件:
-
操作系统通过FCB找到索引块,然后根据索引块中的指针找到数据块。
-
这种方式允许文件块在磁盘上非连续存储,同时避免了链式结构中的指针跟踪开销。
-
优缺点:
优点:
-
灵活性高:
-
文件块可以在磁盘上非连续存储,提高了磁盘空间的利用率。
-
文件大小可以动态变化,添加或删除数据块只需更新索引块。
-
-
访问速度快:
-
通过索引块直接访问数据块,减少了磁盘寻道和旋转延迟。
-
适用于随机访问模式,因为可以直接定位到任何数据块。
-
-
支持大文件:
- 通过使用二级或多级索引,可以支持非常大的文件。
