4.1.2 文件的逻辑结构
无结构文件
即常见的文本文档,".txt"文件,文件内部的数据是没有规则的字符或者字符流,又称为“流式文件”
有结构文件
又称为记录式文件,每条记录又有若干个数据项组成,每条记录又有一个数据项做关键字,比如“姓名”,“性别”等,而其他数据项记录的是实实在在的数据比如“小明”,“男”等
这里重点讲述有结构文件:
顺序文件
文件中的记录一个接一个地顺序排列(逻辑上),各个存储可以是顺序存储或者链式存储。
顺序存储又分为可变长记录和定长记录。
而链式存储和顺序存储的可变长记录都无法实现随机存取(原因是可变长记录需要有记录长度和记录内容两个部分组成,所以每次都只能从第一个记录依次往后查找)
索引文件(计算平均查找次数)
索引表本身是定长记录的顺序文件。因而可以快速找到第i个记录对应的索引项,应用于对信息处理的及时性要求比较高的场合。
索引顺序文件
由于索引表所占的空间太大,可能本身要存储的数据项只占4B,而每个索引项占8B,所占空间过大
若一般顺序文件有10000个数据项,关键字检索,平均需要10000/2=5000次
而索引顺序文件会将10000个记录分为100组,每组100个数据项,平均需要查找50+50=100次
结论:索引顺序文件提高了检索效率
多级索引顺序文件
假设一个顺序文件有10的6次方个数据项,就分为3级索引表,每级索引表有100个大组,每个大组又有100个小组,总共平均查找次数为50+50+50次
4.1.3文件目录
文件控制块(实现文件目录的关键数据结构)
FCB(file control block)是文件目录项,包含了文件的基本信息(文件名,物理地址等),存取控制信息(可读可写等信息),使用信息(创立时间等信息)
其中最重要,最基本的是文件名,文件存放的物理地址。
由文件控制块(FCB)的有序集合就组成了文件目录。
目录结构
单级目录结构
一个系统只有一个目录表,不允许文件重名
两级目录结构
不同用户的文件可以重名,但是不能进行分类
树形目录结构
绝对路径:从根目录出发的路径称为绝对路径
eg:/2015-08/自拍.jpg
相对路径:从当前的目录出发的“相对路径”
优点:可以减少访问磁盘io的次数(原因在于每查询下一级时,都需要查询io,将外存中的文件调入内存)
eg:./2015-08/自拍.jpg "."表示当前目录
树形目录缺点:不易实现文件共享
无环图目录结构
用不同的文件名可以指向同一个文件:
为每个共享节点设置一个共享计数器,上图的共享文件设置一个共享计数器,起始为2,当删除其中一个目录下的该文件时,共享计数器的值减1
直到共享计数器的值为0,才删除文件
索引节点(优化FCB)
目录项只包括文件名和索引点指针,而索引点指针指向的索引节点的内容包括了其他所有信息
注意图中的例题
4.1.4 文件的物理结构(重点)
问题一:操作系统需要对哪些磁盘块进行管理:
1.对非空闲磁盘块的管理(存放了文件数据的磁盘块)
2.对空闲磁盘块的管理
主要讨论1.:
首先,在外存中,文件存储的方式和内存中的(页号,页内地址)的形式很像,在外存中,文件存储方式为(块号,块内地址)
连续分配
连续分配方式要求每个文件在磁盘上占有一组连续的块:
1)物理块号=起始块号+逻辑块号
2)优点:可以顺序访问和随机访问,且访问顺序较快(因为地址连续,省去了磁头移动的时间)
3)缺点:
1.采用连续分配的文件不方便拓展(因为已经分配了固定的空间,且空间连续)
2.
链接分配
隐式链接
只支持顺序访问,不支持随机访问
1)逻辑块号向物理块号转变:先读入一个逻辑上的0号块(对应上图物理块号9号块),然后再访问下一个块(物理块号2),依次类推
2)缺点:只支持顺序访问,不支持随机访问
3)优点:文件方便拓展,不会有碎片问题,外存利用率高
显式链接
类似于静态链表
注意:
一个磁盘只有一张FAT表,开机时,将FAT读入内存,并常驻内存,物理块号是隐含的
1)逻辑块号向物理块号转变:
如果要访问aaa文件的0号逻辑块,起始块号2号物理块就是用户要访问的块号
逻辑块号转化为物理块号的过程不需要读磁盘操作
2)优点:可以顺序访问,也可以随机访问
3)缺点:文件分配表(FAT)需要占用一定的空间
索引分配
索引分配允许文件离散的分配到各个磁盘块中,系统为每个文件建立一个索引表,索引表中记录了每个逻辑块对应的物理块,索引表存放的磁盘块称为索引块。
与FAT的对比:
FAT是每个磁盘有一个文件分配表
而索引表是每个文件对应一个,存在一个内存块中,这个内存块是一个索引块,里面存放的是文件中的数据对应的物理块号
共有2的30次方个磁盘块,可以用32位比特位来表示,所以一个4B就可以表示一个索引表的表项
链接方案
如果索引表太大,一个索引块装不下,将多个索引块链接起来存放:
每个索引块会有一定的空间用来存放指向下一个索引块的指针。
缺点:要访问最后一个块号,必须一个一个找最后一个索引块
由此提出来多级索引
多层索引(注意计算文件最大长度的题目)
如果采用k级索引访问目标数据块,需要访问(k+1)次磁盘io
缺点:对于小文件,也需要访问k+1次io
混合索引(计算文件最大长度)
是直接地址索引,多级间接索引的结合: