文件和文件系统
文件:具有名字(文件名)的若干相关元素的集合
元素通常是记录
记录又是一组有意义的数据项的集合
数据分为数据项、记录、文件三级
- 文件、记录和数据项
记录:一组相关数据相的集合,用于描述一个对象在某方面的属性
有结构文件:由若干相关记录组成,记录式文件
无结构文件:被看成字符流。流式文件 - 文件类型和文件系统模型
- 文件系统模型
该模型分为三个层次:- 底层是对象及其属性
文件、目录、磁盘存储空间 - 中间层是对对象进行操纵和管理的软件集合:
对文件存储空间的管理、对文件目录的管理、用于将文件的逻辑地址转换为物理地址的机制、对文件读、写的管理、对文件的共享和保护等功能一一文件系统的核心部分 - 高层是文件系统提供给用户的接口
命令接口、程序接口
- 底层是对象及其属性
- 文件系统模型
- 文件操作
最基本的文件操作有:创建、删除、读、写文件等
还有:打开文件、关闭文件、文件更名。- 最基本的文件操作
- 创建文件
系统为新文件分配必要的外存空间
在文件目录中为其建立目录项。目录项中应包含文件名及其在外存的地址等属性 - 删除文件
找到要删除文件的目录项,使之成为空项
回收文件所占的存储空间 - 读文件
在相应的系统调用中给出文件名和应读入的内存目标地址
为此,须先查找目录,找到指定的目录项,从中得到被读文件的外存地址和文件读指针 - 写文件
在相应的系统调用中给出文件名和该文件在内存的(源)地址
找目录,找到指定的目录项,再利用目录中的写指针进行写操作
- 创建文件
- 文件的打开和关闭操作
当前OS所提供的大多数文件操作,其过程大致都是这样两步:- 过检索文件目录来找到指定文件的属性及其在外存上的位置
- 文件实施相应的操作,如读文件或写文件等
打开文件一一是指系统将指明文件的属性(包括该文件在外存上的物理位置)从外存拷贝到内存打开文件表的一个表目中,并将该表目的编号(或称索引号)返回给用户。
作用:以后,当用户再要求对该文件进行相应操作时,便可利用该索引号向系统提出操作请求。这时系统便可直接利用该索引号到打开文件表中去查找,从而避免了对该文件的再次检索。这样不仅节省了大量的检索时间,也显著提高了对文件的操作速度。
关闭文件一一如果用户已不再需要对该文件操作时,可利用“关闭”(Close)系统调用来关闭此文件,OS将会从打开文件表中把该文件对应的表目删除
- 最基本的文件操作
文件的逻辑结构
- 通常,文件是由一系列的记录组成的。
文件系统设计的关键要素是:- 这些记录构成一个文件的方法——逻辑结构
- 将一个文件存储到外存上的方法——存储结构
文件的逻辑结构
这是从用户观点出发所观察到的文件组织形式,是用户可以直接处理的数据及其结构,它独立于文件的物理特性,又称为文件组织。
文件的物理结构
又称文件的存储结构,是指文件在外存上的存储组织形式。它不仅与存储介质的存储性能有关,而且与所采用的外存分配方式有关。
对文件逻辑结构所提出的基本要求:
- 提高检索速度
- 便于修改
- 降低文件的存储费用
- 文件逻辑结构的类型
- 有结构文件
又称记录式文件
数据库常采用有结构文件
每个记录都是描述实体集中的一个实体,各记录着相同或不同数目的数据项- 定长记录
- 文件长度使用记录数目表示
- 记录的处理方便、开销小
- 是目前较常用的一种记录格式,被广泛用于数据处理中。
- 变长记录
变长的原因:
可能是记录中包含的数据项数目不相同;也可能是数据项长度不相同
根据用户和系统管理上的需要,可采用多种方式来组织这些记录,形成下述几种文件:- 顺序文件
这是有一系列记录按某种顺序排列所形成的文件。通常是定长记录组成,也可以是变长记录的 - 索引文件
当记录可变长时,通常为之建立一张索引表,并为每个记录设置一个表项,以加快对记录的检索速度
定长记录也可用 - 索引顺序文件
为文件建立一张索引表,为每一组记录中的第一个记录设置一个表项
至少每组内是定长记录
- 顺序文件
- 定长记录
- 有结构文件
外存分配方式
物理结构直接与外存分配方式有关。
目前常用的外存分配方式有:连续分配、链接分配、索引分配。
在一个系统中,仅采用其中的一种外存分配方式。
- 连续分配
- 连续分配方式
要求为每一个文件分配一组相邻的盘块
把逻辑文件中的记录顺序地存储到相邻的物理盘块中
成为顺序文件结构,又称顺序文件(连续文件)。
文件目录项:文件名、第一个盘块号、文件长度(以盘块数进行计量)
会形成磁盘碎片(外部碎片),可以用紧凑方法消除碎片,但将花费比内存紧凑多得多的时间
- 连续分配方式
- 连续分配的主要优缺点
优点:- 顺序访问容易
从第一个盘块开始,顺序地、逐个地往下读/写,也支持直接存取。 - 顺序访问速度快
磁头移动得距离最少。
缺点: - 要求有连续的存储空间
- 必须事先知道文件的大小。文件大小不宜动态变化。
- 顺序访问容易
- 链接分配
在采用链接分配时,可通过在每个盘块上的链接指针,将同属于一个文件的多个离散的盘块链接成一个链表,把这样形成的文件称为链接文件
优点:- 消除了外部碎片,提高了外存利用率
- 便于文件动态增长,文件的增、删、改也十分方便
链接方式又可以分为隐式链接和显式链接两种
隐式链接
每个文件的目录项中,包含第一个盘块和最后一个盘块号(指针),而在每个盘块中,都有一个指向下一个盘块的指针。如果盘块大小为512字节,指针占4个字节,则每个盘块中只有508个字节可供用户使用
- 隐式链接缺点:
- 只适合顺序访问,对随机访问极其低效
- 可靠性差——任何一个指针出现问题,都将导致整个链的断开
为了提高检索速度和减少指针所占用的存储空间,可以将几个盘块组成一个簇(cluster)。但增大了内部碎片
显式链接
用于链接文件物理块的指针(块号),显式地存放在外存的一张链接表中,整个磁盘仅一张表
表中的序号是物理块号,从0开始,直至N-1;N为磁盘总块数。
每个表项中存放链接指针,即下一个盘块号
文件的第一个块号,存放在文件目录项(FCB)中
系统启动时,该表调入内存——提高检索速度
该表称为文件分配表FAT(FileAllocationTable)
显式链接结构:
文件物理结构
索引分配
-
单级索引
链接分配解决了连续分配存在的问题,但又出现了另外两个问题:- 不能支持高效的直接存取
- FAT需要占用较大的内存空间
由于一个文件所占用的盘块号是随机地分布在FAT中的,因而只有将整个FAT调入内存,才能保证在FAT中找到一个文件的盘块号。当磁盘容量很大时,FAT可能要占用数MB以上的内存空间,这是令人难以接受的。事实上,在打开文件时,只需要把该文件的盘块号调入内存即可,完全没有必要将整个 FAT调入内存。
为此,应将每个文件的盘块号集中放在一起。索引分配方法就是基于这种思想所形成的一种分配方法。它为每个文件分配一个索引块(表),把分配给该文件的盘块号都记录在索引块中。
在建立文件时,其目录项中包含指向索引块的指针。
索引分配的优点:
1. 索引分配支持直接访问
2. 索引分配不会产生外部碎片
3. 文件较大时,优于链接分配
索引分配的缺点:
可能要花费较多的外存空间——
每个文件都要一个索引表,小文件仍需分配一个盘块 -
多级索引分配
当OS为一个大文件分配磁盘空间时,若盘块号装满一个索引l块时,OS便为该文件分配另一个盘块,依次类推,再通过链指针将各索引块链接起来。这种方法是低效的。
解决的办法是采用多级索引
例
如果盘块大小为1KB,每个盘块号占4个字节,则一个索引块可存放256个盘块号。
这样在两级索引时,文件的最大盘块数为N=256x256=64K个盘块号
即允许的文件最大长度为64MB
若采用一级索引,允许的最大文件长度为
1KBx256=256KB
计算盘块大小为4KB的情况
题目:二级索引,可以有256x256个的盘块号,把盘块号都占满的情况,盘块的数量乘以盘块的大小,就是允许的文件最大长度
1
K
B
⋅
256
⋅
256
=
1
K
B
⋅
2
8
⋅
2
8
=
2
26
B
=
2
6
M
B
=
64
M
B
1KB \cdot 256 \cdot 256 =1KB \cdot 2^{8} \cdot 2^{8} =2^{26}B=2^{6}MB=64MB
1KB⋅256⋅256=1KB⋅28⋅28=226B=26MB=64MB
索引块可存放
4
K
B
4
B
=
2
2
⋅
2
10
2
2
=
2
10
=
1024
\frac{4KB}{4B}=\frac{2^{2} \cdot 2^{10}}{2^{2}}=2^{10}=1024
4B4KB=2222⋅210=210=1024
个盘块号
二级索引时允许的文件最大长度
4
K
B
⋅
1024
⋅
1024
=
4
⋅
2
10
⋅
2
10
⋅
2
10
B
=
4
⋅
2
30
B
=
4
G
B
4KB \cdot 1024 \cdot 1024=4 \cdot 2^{10} \cdot 2^{10} \cdot 2^{10}B=4 \cdot 2^{30}B= 4GB
4KB⋅1024⋅1024=4⋅210⋅210⋅210B=4⋅230B=4GB
一级索引为
4
K
B
⋅
1024
=
4
⋅
2
10
⋅
2
10
B
=
4
M
B
4KB \cdot 1024=4 \cdot 2^{10} \cdot 2^{10}B=4MB
4KB⋅1024=4⋅210⋅210B=4MB
46
某文件系统为一级根目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次创建新文件。请回答如下问题。
- 在连续、链式、索引三种文件的数据块组织方式中,哪种更合适?要求说明理由。为定位文件数据块,需在FCB中设置哪些相关描述字段?
- 为快速找到文件,对于FCB,是集中存储好,还是与对应的文件数据块连续存储好?要求说明理由
- 连续数据块组织方式更合适。因为系统规定文件不可修改,即文件长度不可能动态增长或缩小,在这种情况下,连续组织方式的缺点不再存在,而它的优点是顺序访问容易、读写文件速度快,而且磁盘空间利用率高。为定位文件数据块,需在FCB中设置首块号和文件长度值
- 为快速找到文件,对于FCB集中存储好,因为这样目录查找速度比FCB与对应的文件数据块连续存储时快得多
混合索引分配方式
将多种索引|方式相结合而形成的一种索引方式
有直接索引l、一级索引、二级索引,甚至三级索引l
UNX系统采用混合索引I方式
设盘块大小为4KB
直接地址。为了提高对文件的检索速度度,设置了10个直接地址项,i.addr(0)~i.addr(9)。当文件大小不超过40KB时,可直接索引|得到。
一次间接地址。i.addr(10)。文件大小不超过 4MB+40KB。(假设盘块号4字节)
二次间接地址。i.addr(11)。文件大小不超过 4GB+4MB+40KB。
三次间接地址。i.addr(12)。文件大小不超过 4TB+4GB+4MB+40KB。
例
设文件索引节点中有7个地址项,其中4个地址项是直接地址索引,2个地址项是一级间接地址索引,1个地址项是二级间接地址索引,每个地址项大小为4字节。若磁盘索引块和磁盘数据块大小均为256字节,则可表示的单个文件最大长度是
每一个磁盘块可以存储多少个地址项
256
4
=
64
\frac{256}{4}=64
4256=64
一个盘块可以存放64个盘块号
直接地址索引:盘块大小是256字节,有4个直接地址索引
256
⋅
4
=
1024
=
2
10
B
256 \cdot 4 = 1024=2^{10}B
256⋅4=1024=210B
一级间接地址索引,有2个,每个盘块存储64个盘块号,每个盘块号指向1个盘块,一个盘块存放256B数据
2
⋅
64
⋅
256
=
2
15
B
2 \cdot 64 \cdot 256=2^{15}B
2⋅64⋅256=215B
二级间接地址索引,有一个,能存放64乘以64个盘块号,每个盘块号指向一个盘块
64
⋅
64
⋅
256
=
2
20
B
64 \cdot 64 \cdot 256=2^{20}B
64⋅64⋅256=220B
总和
1
K
B
+
2
5
K
B
+
2
10
K
B
=
1
K
B
+
32
K
B
+
1024
K
B
=
1057
K
B
1KB+2^{5}KB+2^{10}KB=1KB+32KB+1024KB=1057KB
1KB+25KB+210KB=1KB+32KB+1024KB=1057KB