mirror of
https://github.com/Didnelpsun/CS408.git
synced 2026-06-18 01:19:14 +08:00
更新
This commit is contained in:
@@ -655,6 +655,7 @@
|
||||
|
||||
+ 窗口尺寸就是驻留集的大小,约束工作集大小,工作集大小小于等于窗口尺寸,实际应用中,操作系统可以统计进程的工作集大小,根据工作集大小给进程分配若干内存块。如窗口尺寸为$5$,经过一段时间的监测发现某进程的工作集最大为$3$,那么说明该进程有很好的局部性,可以给这个进程分配$3$个以上的内存块即可满足进程的运行需要。
|
||||
+ 驻留集大小不能小于工作集大小,否则会产生抖动现象。
|
||||
+ 在进程运行时,若其工作集页面都在**主存储器**内,则能够使该进程有效地运行,否则会出现频繁的页面调入调出现象。
|
||||
+ 基于局部性原理可知,进程在一段时间内访问的页面与不久之后会访问的页面是有相关性的。因此,可以根据进程近期访问的页面集合(工作集)来设计一种页面置换算法――选择一个不在工作集中的页面进行淘汰。
|
||||
|
||||
#### 内存映射文件
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
|
||||
#### 文件打开
|
||||
|
||||
+ 开文件操作是将该文件的$FCB$存入内存的活跃文件目录表。
|
||||
+ 在很多操作系统中,在对文件进行操作之前,要求用户先使用$open$系统调用“打开文件”,需要提供的几个主要参数:
|
||||
1. 文件存放路径。
|
||||
2. 文件名。
|
||||
@@ -110,162 +111,6 @@
|
||||
2. 回收分配给该文件的内存空间等资源。
|
||||
3. 系统打开文件表的打开计数器$count$减$1$,若$count=0$,则删除对应表项。
|
||||
|
||||
### 文件逻辑结构
|
||||
|
||||
分为无结构文件与有结构文件。
|
||||
|
||||
+ 无结构文件(如文本文件):
|
||||
+ 由一些二进制或字符流组成,又称“流式文件”。
|
||||
+ 以$Byte$为单位。
|
||||
+ 只能通过穷举进行搜索。
|
||||
+ 管理简单,适用于字符流的无结构方式,如源程序文件、目标代码文件等。
|
||||
+ 有结构文件(如数据库表):由一组相似的记录(每条记录又若干个数据项组成,数据项又包含多个属性,是文件系统中最基本的数据单位)组成,又称“记录式文件”。每条记录有一个数据项可作为关键字(如$ID$)。
|
||||
|
||||
有结构文件可以根据各条记录的长度(占用的存储空间)是否相等,可分为定长记录和可变长记录两种。
|
||||
|
||||
有结构文件的逻辑结构:
|
||||
|
||||
+ 顺序文件。
|
||||
+ 索引文件。
|
||||
+ 索引顺序文件。
|
||||
|
||||
#### 顺序文件
|
||||
|
||||
文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
|
||||
|
||||
根据关键字与顺序之间的关系:
|
||||
|
||||
+ 串结构:记录之间的顺序与关键字无关。一般按记录存入时间决定记录的顺序。
|
||||
+ 顺序结构:记录之间的顺序按关键字顺序排列。
|
||||
|
||||
如何访存顺序文件:
|
||||
|
||||
+ 链式存储:无论是定长/可变长记录,都无法实现随机存取,每次只能从第一记录开始依次往后查找。
|
||||
+ 顺序存储:
|
||||
+ 可变长记录:无法实现随机存取。每次只能从第一个记录开始依次往后查找。因为需要显式地给出记录长度。
|
||||
+ 定长记录:
|
||||
+ 可实现随机存取。记录长度为$L$,则第$i$个记录存放的相对位置是$i\times L$。
|
||||
+ 若采用串结构,只能从头开始查找,无法快速找到某关键字对应的记录。
|
||||
+ 若采用顺序结构,可以快速找到某关键字对应的记录(如折半查找)。
|
||||
|
||||
顺序文件插入删除文件比较麻烦。一般实际实现时会隔一个时间段集中将修改写入到文件中。
|
||||
|
||||
#### 索引文件
|
||||
|
||||
+ 为了解决顺序文件查找问题,建立一张索引表存放每个文件所存放的块盘地址,以加快文件检索速度。每条记录对应一个索引项。
|
||||
+ 记录可以离散存放,而索引表必须连续存放。
|
||||
+ 索引表包含索引号,长度,指针三个部分。其本身是定长长度的顺序文件,所以可以快速找到索引,通过指针随机访问。
|
||||
+ 可将关键字作为索引号内容,若按关键字顺序排列,则还可以支持按照关键字折半查找。
|
||||
+ 每当要增加/删除一个记录时,需要对索引表进行修改。由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。
|
||||
+ 可以使用不同的数据项对一组数据建立多个索引表。
|
||||
+ 索引表其实是索引顺序结构的。
|
||||
+ 对于$N$条记录的顺序文件,查找关键字记录需要$N/2$次,在索引顺序文件中,将其分为$\sqrt{N}$组,每组$\sqrt{N}$条记录,所以索引表查找需要$\dfrac{\sqrt{N}}{2}$次,主文件顺序查找也需要$\dfrac{\sqrt{N}}{2}$次,所以一共需要查找$\sqrt{N}$次。
|
||||
|
||||
#### 索引顺序文件
|
||||
|
||||
+ 因为每个记录对应一个索引表项,因此索引表可能会很大。同时若数据长度本身远小于索引表项长度,则空间利用率会很低。
|
||||
+ 索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。
|
||||
+ 每个分组就是一个顺序文件,分组内的记录不需要按关键字排序。
|
||||
+ 索引项页不需要按关键字顺序排列,从而能便利插入删除。
|
||||
+ 索引表其实是索引串结构的。
|
||||
+ 为了进一步提高索引效率,可以建立多级索引表。
|
||||
|
||||
#### 散列文件
|
||||
|
||||
也称为直接文件。给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。
|
||||
|
||||
散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。
|
||||
|
||||
### 文件物理结构
|
||||
|
||||
文件物理结构即文件分配方式,是对非空间磁盘块的管理。
|
||||
|
||||
#### 文件块与磁盘块
|
||||
|
||||
+ 类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同。
|
||||
+ 内存与磁盘之间的数据交换(即读/写操作、磁盘$I/O$))都是以“块”为单位进行的。即每次读入一块,或每次写出一块。
|
||||
+ 在内存管理中,进程的逻辑地址空间被分为一个一个页面。同样的,在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”。于是文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式。
|
||||
+ 用户通过逻辑地址来操作自己的文件,
|
||||
操作系统要负责实现从逻辑地址到物理地址的映射,即文件的物理结构或文件分配方式。
|
||||
|
||||
#### 连续分配
|
||||
|
||||
+ 每个文件在磁盘上占有一组连续的块。
|
||||
+ (逻辑块号,块内地址)→(物理块号,块内地址)。只需转换块号就行,块内地址保持不变。
|
||||
+ 文件目录中记录存放的起始块号和长度(总共占用几个块)。
|
||||
+ 用户给出要访问的逻辑块号,操作系统找到该文件对应的目录项($FCB$),物理块号=起始块号+逻辑块号。
|
||||
+ 优点:
|
||||
+ 可以直接算出逻辑块号对应的物理块号,因此连续分配支持顺序访问和直接访问(即随机访问)。
|
||||
+ 连续分配的文件在顺序读写时速度最快。
|
||||
+ 缺点:
|
||||
+ 不便于拓展。
|
||||
+ 存储利用率低,产生大量外部碎片。
|
||||
|
||||
#### 链接分配
|
||||
|
||||
+ 采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。
|
||||
+ 隐式链接:
|
||||
+ 类似链表。
|
||||
+ $FCB$目录中记录了文件存放的起始块号和结束块号,当然也可以增加一个字段来表示文件的长度。
|
||||
+ 除了文件的最后个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针,这些指针对用户是透明的。
|
||||
+ 优点:
|
||||
+ 方便文件拓展。
|
||||
+ 不会有硬盘碎片。
|
||||
+ 缺点:
|
||||
+ 只支持顺序访问,不支持随机访问,查找效率低。
|
||||
+ 指向下一个盘块的指针也需要耗费少量的存储空间。
|
||||
+ 存储稳定性不足,若是中间毁坏后面的数据也会丢失。
|
||||
+ 显式链接:
|
||||
+ 类似静态链表。
|
||||
+ 把用于链接文件各物理块的指针显式地存放在一张表中。即文件分配表($FAT$,$File\,Allocation\,Table$)。$FAT$包含物理块号和下一块指针两项。
|
||||
+ $FCB$目录中只需记录文件的起始块号。
|
||||
+ 一个磁盘仅设置一张$FAT$。开机时,将$FAT$读入内存,并常驻内存。所以地址转换不需要读取内存,从而效率更高。
|
||||
+ $FAT$的各个表项在物理上连续存储,且每一个表项长度相同,因此“物理块号”字段可以是隐含的。
|
||||
+ 地址转换:目录项中找到起始块号,若$i>0$,则查询内存中的文件分配表$FAT$,往后找到$i$号逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作。
|
||||
+ 优点:
|
||||
+ 很方便文件拓展。
|
||||
+ 不会有外部碎片问题,外存利用率高。
|
||||
+ 支持随机访问。
|
||||
+ 相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
|
||||
+ 缺点:文件分配表的需要占用一定的存储空间。
|
||||
|
||||
#### 索引分配
|
||||
|
||||
+ 允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表——建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
|
||||
+ 索引表包含逻辑块号和物理块号两项。逻辑块号可以是隐含的。
|
||||
+ 每一个文件都有一个索引表。
|
||||
+ 地址转换:从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可只$i$号逻辑块在外存中的存放位置。
|
||||
+ 优点:
|
||||
+ 很方便文件拓展,不会有碎片问题,外存利用率高。
|
||||
+ 支持随机访问。
|
||||
+ 缺点:文件索引表的需要占用一定的存储空间。
|
||||
|
||||
索引块必须不能太大,但是索引块太小就无法支持大文件,解决方案:
|
||||
|
||||
+ 链接方案:
|
||||
+ 分配多个索引块并链接起来。
|
||||
+ 文件$FCB$中只需要记录第一个索引块的块号。
|
||||
+ 缺点:查找效率低。
|
||||
+ 多层索引:
|
||||
+ 建立类似多级页表的多层索引,使上层索引块指向下一层的索引块。
|
||||
+ $FCB$中只需要记录顶层索引块就可以了。
|
||||
+ 若采用多层索引,则各层索引表大小不能超过一个磁盘块。理由同多级页表。
|
||||
+ 采用$K$层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要$K+1$次读磁盘操作。
|
||||
+ 缺点:即使是小文件页需要$K+1$次读磁盘操作。
|
||||
+ 混合索引:
|
||||
+ 多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)等。
|
||||
+ 优点:对于小文件,只需较少的读磁盘次数就可以访问目标数据块。(一般计算机中小文件更多)。
|
||||
|
||||
如一共十三个地址项,前十个为直接地址,后面三个为一级间址、二级间址、三级间址。每个盘块的大小为$4KB$,索引块大小为$4B$。
|
||||
|
||||
所以文件不大于$4\times10=40KB$时可以直接读出。一个一级间址块中能包含$4KB\div4B=1K=2^{10}$个索引,所以能索引出$2^{10}\times4KB=4MB$的空间。同理,若文件长度大于$4MB+40KB$时可以使用二级间址块,索引出$4GB$的空间,三级间址能索引出$4TB$的空间。
|
||||
|
||||
|访问第n条记录|优点|缺点
|
||||
:----:|:----------:|:---:|:--:
|
||||
连续分配|需访问磁盘1次|顺序存取时速度快,文件定长时可根据文件起始地址及记录长度进行随机访问|文件存储要求连续的存储空间,会产生碎片,不利于文件的动态扩充
|
||||
链接分配|需访问磁盘n次|可解决外存的碎片问题,提高外存空问的利用率,动态增长较方便|只能按照文件的指针链顺序访问,查找效率低,指针信息存放消耗外存空间
|
||||
索引分配|m级需访问磁盘m+1次|可以随机访问,文件易于增删|索引表增加存储空间的开销,索引表的查找策略对文件系统效率影响较大
|
||||
|
||||
### 文件保护
|
||||
|
||||
口令保护和加密保护是为了防止用户文件被他人存取,而访问控制用于控制用户对文件的访问方式。
|
||||
@@ -314,6 +159,169 @@
|
||||
|
||||
如$755$,第一组的$7=4+2+1$表示所有者可读可写可执行,$5=4+0+1$表示同组用户和其他用户可读可执行但是不可写。
|
||||
|
||||
### 文件逻辑结构
|
||||
|
||||
分为无结构文件与有结构文件。
|
||||
|
||||
+ 无结构文件(如文本文件):
|
||||
+ 由一些二进制或字符流组成,又称“流式文件”。
|
||||
+ 以$Byte$为单位。
|
||||
+ 只能通过穷举进行搜索。
|
||||
+ 管理简单,适用于字符流的无结构方式,如源程序文件、目标代码文件等。
|
||||
+ 有结构文件(如数据库表):由一组相似的记录(每条记录又若干个数据项组成,数据项又包含多个属性,是文件系统中最基本的数据单位)组成,又称“记录式文件”。每条记录有一个数据项可作为关键字(如$ID$)。
|
||||
|
||||
有结构文件可以根据各条记录的长度(占用的存储空间)是否相等,可分为定长记录和可变长记录两种。
|
||||
|
||||
有结构文件的逻辑结构:
|
||||
|
||||
+ 顺序文件。
|
||||
+ 索引文件。
|
||||
+ 索引顺序文件。
|
||||
+ 散列文件。
|
||||
|
||||
#### 顺序文件
|
||||
|
||||
文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
|
||||
|
||||
根据关键字与顺序之间的关系:
|
||||
|
||||
+ 串结构:记录之间的顺序与关键字无关。一般按记录存入时间决定记录的顺序。
|
||||
+ 顺序结构:记录之间的顺序按关键字顺序排列。
|
||||
|
||||
如何访存顺序文件:
|
||||
|
||||
+ 链式存储:无论是定长/可变长记录,都无法实现随机存取,每次只能从第一记录开始依次往后查找。
|
||||
+ 顺序存储:
|
||||
+ 可变长记录:无法实现随机存取。每次只能从第一个记录开始依次往后查找。因为需要显式地给出记录长度。
|
||||
+ 定长记录:
|
||||
+ 可实现随机存取。记录长度为$L$,则第$i$个记录存放的相对位置是$i\times L$。
|
||||
+ 若采用串结构,只能从头开始查找,无法快速找到某关键字对应的记录。
|
||||
+ 若采用顺序结构,可以快速找到某关键字对应的记录(如折半查找)。
|
||||
|
||||
顺序文件插入删除文件比较麻烦。一般实际实现时会隔一个时间段集中将修改写入到文件中。
|
||||
|
||||
#### 索引文件
|
||||
|
||||
+ 为了解决顺序文件查找问题,建立一张索引表存放每个文件所存放的块盘地址,以加快文件检索速度。每条记录对应一个索引项。
|
||||
+ 记录可以离散存放,而索引表必须连续存放。
|
||||
+ 索引表包含索引号,长度,指针三个部分。其本身是定长长度的顺序文件,所以可以快速找到索引,通过指针随机访问。
|
||||
+ 可将关键字作为索引号内容,若按关键字顺序排列,则还可以支持按照关键字折半查找。
|
||||
+ 每当要增加/删除一个记录时,需要对索引表进行修改。由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。
|
||||
+ 可以使用不同的数据项对一组数据建立多个索引表。
|
||||
+ 索引表其实是索引顺序结构的。
|
||||
+ 对于$N$条记录的顺序文件,查找关键字记录需要$N/2$次,在索引顺序文件中,将其分为$\sqrt{N}$组,每组$\sqrt{N}$条记录,所以索引表查找需要$\dfrac{\sqrt{N}}{2}$次,主文件顺序查找也需要$\dfrac{\sqrt{N}}{2}$次,所以一共需要查找$\sqrt{N}$次。
|
||||
|
||||
#### 索引顺序文件
|
||||
|
||||
类似于字典。
|
||||
|
||||
+ 因为每个记录对应一个索引表项,因此索引表可能会很大。同时若数据长度本身远小于索引表项长度,则空间利用率会很低。
|
||||
+ 索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。
|
||||
+ 每个分组就是一个顺序文件(组间有序),分组内的记录不需要按关键字排序(组内无序)。
|
||||
+ 索引项页不需要按关键字顺序排列,从而能便利插入删除。
|
||||
+ 索引表其实是索引串结构的。
|
||||
+ 为了进一步提高索引效率,可以建立多级索引表。
|
||||
|
||||
#### 散列文件
|
||||
|
||||
也称为直接文件。给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。
|
||||
|
||||
散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。
|
||||
|
||||
### 文件物理结构
|
||||
|
||||
文件物理结构即文件分配方式,是对非空间磁盘块的管理。
|
||||
|
||||
#### 文件块与磁盘块
|
||||
|
||||
+ 类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同。
|
||||
+ 内存与磁盘之间的数据交换(即读/写操作、磁盘$I/O$))都是以“块”为单位进行的。即每次读入一块,或每次写出一块。
|
||||
+ 在内存管理中,进程的逻辑地址空间被分为一个一个页面。同样的,在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”。于是文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式。
|
||||
+ 用户通过逻辑地址来操作自己的文件,
|
||||
操作系统要负责实现从逻辑地址到物理地址的映射,即文件的物理结构或文件分配方式。
|
||||
|
||||
#### 记录成组分解技术
|
||||
|
||||
由于磁盘块的大小是预先划分好的,大小固定,而逻辑记录的大小是用户文件性质决定的,不一定和块大小一致,如果逻辑记录比物理块小得多时,可以把多个逻辑记录存放在一个块中,这就是记录的成组,用户使用时再把读取的一块信息中分离出所需的记录,这就是记录的分解。
|
||||
|
||||
#### 连续分配
|
||||
|
||||
+ 每个文件在磁盘上占有一组连续的块。
|
||||
+ (逻辑块号,块内地址)→(物理块号,块内地址)。只需转换块号就行,块内地址保持不变。
|
||||
+ 文件目录中记录存放的起始块号和长度(总共占用几个块)。
|
||||
+ 用户给出要访问的逻辑块号,操作系统找到该文件对应的目录项($FCB$),物理块号=起始块号+逻辑块号。
|
||||
+ 优点:
|
||||
+ 可以直接算出逻辑块号对应的物理块号,因此连续分配支持顺序访问和直接访问(即随机访问)。
|
||||
+ 连续分配的文件在顺序读写时速度最快。
|
||||
+ 缺点:
|
||||
+ 不便于拓展。
|
||||
+ 存储利用率低,产生大量外部碎片。
|
||||
|
||||
#### 链接分配
|
||||
|
||||
+ 采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。
|
||||
+ 隐式链接:
|
||||
+ 类似链表。
|
||||
+ $FCB$目录中记录了文件存放的起始块号和结束块号,当然也可以增加一个字段来表示文件的长度。
|
||||
+ 除了文件的最后个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针,这些指针对用户是透明的。
|
||||
+ 优点:
|
||||
+ 方便文件拓展。
|
||||
+ 不会有硬盘碎片。
|
||||
+ 缺点:
|
||||
+ 只支持顺序访问,不支持随机访问,查找效率低。
|
||||
+ 指向下一个盘块的指针也需要耗费少量的存储空间。
|
||||
+ 存储稳定性不足,若是中间毁坏后面的数据也会丢失。
|
||||
+ 显式链接:
|
||||
+ 类似静态链表。
|
||||
+ 把用于链接文件各物理块的指针显式地存放在一张表中。即文件分配表($FAT$,$File\,Allocation\,Table$)。$FAT$包含物理块号和下一块指针两项。
|
||||
+ $FCB$目录中只需记录文件的起始块号。
|
||||
+ 一个**磁盘**仅设置一张$FAT$。开机时,将$FAT$读入内存,并常驻内存。所以地址转换不需要读取内存,从而效率更高。
|
||||
+ $FAT$的各个表项在物理上连续存储,且每一个表项长度相同,因此“物理块号”字段可以是隐含的。
|
||||
+ 地址转换:目录项中找到起始块号,若$i>0$,则查询内存中的文件分配表$FAT$,往后找到$i$号逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作。
|
||||
+ 优点:
|
||||
+ 很方便文件拓展。
|
||||
+ 不会有外部碎片问题,外存利用率高。
|
||||
+ 支持随机访问。
|
||||
+ 相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
|
||||
+ 缺点:文件分配表的需要占用一定的存储空间。
|
||||
|
||||
#### 索引分配
|
||||
|
||||
+ 允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表——建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
|
||||
+ 索引表包含逻辑块号和物理块号两项。逻辑块号可以是隐含的。
|
||||
+ 每一个文件都有一个索引表。
|
||||
+ 地址转换:从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可只$i$号逻辑块在外存中的存放位置。
|
||||
+ 优点:
|
||||
+ 很方便文件拓展,不会有碎片问题,外存利用率高。
|
||||
+ 支持随机访问。
|
||||
+ 缺点:文件索引表的需要占用一定的存储空间。
|
||||
|
||||
索引块必须不能太大,但是索引块太小就无法支持大文件,解决方案:
|
||||
|
||||
+ 链接方案:
|
||||
+ 分配多个索引块并链接起来。
|
||||
+ 文件$FCB$中只需要记录第一个索引块的块号。
|
||||
+ 缺点:查找效率低。
|
||||
+ 多层索引:
|
||||
+ 建立类似多级页表的多层索引,使上层索引块指向下一层的索引块。
|
||||
+ $FCB$中只需要记录顶层索引块就可以了。
|
||||
+ 若采用多层索引,则各层索引表大小不能超过一个磁盘块。理由同多级页表。
|
||||
+ 采用$K$层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要$K+1$次读磁盘操作。
|
||||
+ 缺点:即使是小文件页需要$K+1$次读磁盘操作。
|
||||
+ 混合索引:
|
||||
+ 多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)等。
|
||||
+ 优点:对于小文件,只需较少的读磁盘次数就可以访问目标数据块。(一般计算机中小文件更多)。
|
||||
|
||||
如一共十三个地址项,前十个为直接地址,后面三个为一级间址、二级间址、三级间址。每个盘块的大小为$4KB$,索引块大小为$4B$。
|
||||
|
||||
所以文件不大于$4\times10=40KB$时可以直接读出。一个一级间址块中能包含$4KB\div4B=1K=2^{10}$个索引,所以能索引出$2^{10}\times4KB=4MB$的空间。同理,若文件长度大于$4MB+40KB$时可以使用二级间址块,索引出$4GB$的空间,三级间址能索引出$4TB$的空间。
|
||||
|
||||
|访问第n条记录|优点|缺点
|
||||
:----:|:----------:|:---:|:--:
|
||||
连续分配|需访问磁盘1次|顺序存取时速度快,文件定长时可根据文件起始地址及记录长度进行随机访问|文件存储要求连续的存储空间,会产生碎片,不利于文件的动态扩充
|
||||
链接分配|需访问磁盘n次|可解决外存的碎片问题,提高外存空问的利用率,动态增长较方便|只能按照文件的指针链顺序访问,查找效率低,指针信息存放消耗外存空间
|
||||
索引分配|m级需访问磁盘m+1次|可以随机访问,文件易于增删|索引表增加存储空间的开销,索引表的查找策略对文件系统效率影响较大
|
||||
|
||||
## 目录系统
|
||||
|
||||
### 目录结构
|
||||
|
||||
Reference in New Issue
Block a user