1、第9章 文件,当对象以文件形式存放于磁盘上的时候, 通常是按物理块存储的。,物理块也叫做页块。每个页块可存放几个对象。操作系统按页块对磁盘信息进行读写。 磁盘通常是指由若干片磁盘组成的磁盘组, 各个盘片安装在同一主轴上高速旋转。各个盘面上半径相同的磁道构成了柱面。各盘面设置一个读写磁头,它们装在同一动臂上,可以径向从一个柱面移到另一个柱面上。 为了访问某一页块, 先寻找柱面: 移动动臂使读写磁头移到指定柱面上: 寻查(seek)。再根据磁道号(盘面号)选择相应读写磁头, 等待指定页块转到读写磁头下: 等待(latency)。 在磁盘组上存取一个页块的时间:,tiotseektlatencytr
2、w,一. 索引文件1. 单关键字索引文件结构 文件具有相同性质的记录的集合。顺序文件具有顺序存储结构的文件:文件的物理记录和逻辑记录的顺序一致。索引文件具有索引存储结构的文件。索引文件结构: 主文件原有数据文件;索引表指示逻辑记录与物理地址关系的表。索引表中每一表项索引项。各索引项按各记录关键字有序排列。主文件记录关键字顺序排列索引顺序文件;否则索引非顺序文件。,例如: 主文件: 索引表:,上例为索引非顺序文件。若主文件中记录按照学号从小到大排列,则成为索引顺序文件。若索引表的索引项与主文件的各记录对应稠密索引;若索引项对应主文件的一组记录稀疏索引(非稠密索引)。查找记录的过程:读入索引表,查
3、找出关键字为k的记录的物理地址。读入相应的物理记录,找出关键字为k的记录。好处:减少访问外存的次数,提高查找速度。显见,查找时访问外存次数与索引表大小有关:当索引表1个物理记录,读入索引表访问外存1次。否则,读入索引表要访问外存多次。,若索引表很大,对索引表再建立索引查找表。 查找表的查找项索引表的一组索引项。 例如:,假设每个物理记录存放三个索引项。即查找索引需访问外存两次: 读入查找表,查到相应的查找项; 读入相应的索引块,查到需要的索引项。索引文件记录插入操作:对索引非顺序文件: 把记录写入主文件尾;(若最后一块满,需新分配一个物理块) 把插入记录相应的索引项插入到索引表中。对索引顺序文
4、件: 在主文件中查到插入位置,插入记录; 修改索引表(稀疏索引),或插入相应的索引项到索引表中(稠密索引)。记录删除操作(逻辑删除): 在文件中对删除记录加“删除”标记; 在索引表中删除相应记录的索引项(稀疏索引不做)。,(1) 多重表文件次关键字项经常需要对其查询的数据项(一项或多项)。次关键字每个记录的次关键字项的值。多重链表文件结构: 主文件为顺序文件; 对主关键字建立索引表主索引表; 主文件中对每个次关键字项设一指针域,用以链接相同关键字的记录(单链表); 对每个次关键字分别建立索引表辅索引表。,例如: 主文件,适用:多关键字查询。 问题:记录插入、删除不方便。,(2) 倒排文件适用:
5、多关键字查询。与多重链表文件相同之处:主文件+主索引表+辅索引表。与多重链表文件不同之处:辅索引表结构不同。物理地址序列相同次关键字的记录的物理地址的顺序排列。 辅助索引表倒排表。,例如,对上例主文件建立的“班级” 倒排表和“平均分”倒排表如下:优点: 处理多关键字查询时,通过集合运算直接查取记录。 如:查W01班8090分的学生,只要做 : W018089=120,260根据运算结果可直接查找相应记录 120,260。 缺点:倒排表中的各索引项长度不同,文件管理维护困难。,四. 散列文件散列文件直接存取文件,用散列方法组织的文件。散列文件的组织方法与散列表不同之处是: 根据散列函数计算的结果
6、是“存储块”号,一个存储块m个文件记录,可以把m个文件记录存于同一存储块(不是冲突); 当有m+1个同义词记录时发生存储块“溢出”,“冲突”。处理“溢出”(解决冲突)主要采用链地址方法。常用“按桶散列法和可扩充散列法”。,1. 按桶散列法桶存储单位,可存放m个文件记录信息。按桶散列方法存放文件步骤: 根据文件记录数n确定需要的桶数(桶容量为m)t一般取tn/m 选取一种散列函数,使文件记录的散列地址尽可能均匀分布在0 t-1之间; 以每个记录的散列地址为桶号,把记录存入相对的桶中基桶。若桶已满须做溢出处理(冲突处理方法):分配一个与基桶同样大小的桶溢出桶,链接到基桶; m个的同义词存入溢出桶;
7、再溢出,依次类推。例如,对于关键字元素:77,53,25,18,75,54,90,46,67,42,11,65,27,02,假设桶容量=3,取桶数t=5,散列函数为i=mod(k,t)则按桶散列得到的存储结果为:(目录表是具有t个分量的向量,存放t个基桶的指针),查找记录步骤: 计算桶号 i=H(k); 根据目录表第i项指针,读入基桶中信息; 顺序查找基桶,若找到关键字k的记录,查找成功,若没找到且基桶未满或指针为空,则查找失败。否则,读第一个溢出桶做查找,依次类推,直到成功或失败,目录表,基桶,溢出桶,空指针,删除文件记录: 找到欲删除记录所在的桶,并读入信息; 把欲删除记录与桶中最后一个记
8、录交换位置并删除(使空闲单元在桶的最后)。,2. 可扩充散列法可扩充散列文件按桶散列文件的改进。可扩充散列文件结构:一个目录表+一组存储页面(相当于桶)。目录项用二进制位从0开始依次编号,编号位数d目录深度(2d个目录项)。每个目录项一个页面。前d(0d d)位编号相同的目录项同一页面;d页面局部深度。,例如,记录写入: k H(k) 二进制位串k伪关键字 取k的前d位(d是目录深度)为目录项号,找出对应的页面。若该页面未满,则把记录插入到该页面若待插入的页面已满,则要进行页面分裂。, 若dd,直接进行页面分裂:开辟缓冲区B1,B2读入满页面P的记录 缓冲区B1;检查k的d+1位:d+1位为0
9、保留在B1中 否则 B2中B1 P页, B2 新申请的P页。页面局部深度+1。若d=d,则要先把目录扩大一倍(目录深度增加1),再进行页面分裂。 例如,(a) 00页满,且做插入 (b) 00页分裂为 00页、 01页,局部深度2,新页面局部深度2,页分裂, 例如:(c) 00页满,且做插入(b) 目录扩充,指向页面指针2,局部深度2,局部深度2,局部深度2,局部深度2,局部深度2,记录查找: 计算H(k) k 取k的前d位(目录深度)为目录项号,读入所指页面,并作顺序查找。只要访问一次外存。 记录删除: 先做查找; 再做删除; 必要的话,可做页合并及目录收缩以节省空间。适合:文件记录变化大的情况。散列文件的特点:文件结构简单,按关键字直接存取直接存取文件。,