六、文件系统
索引结构
磁盘空间管理
空闲链表法
将所有的空闲盘区连成一条空闲链,可有两种方式:空闲盘块链、空闲盘区链。
位图法
磁盘块大小
块过大:读取磁盘次数少,但浪费空间
块过小:磁盘空间利用率高,但因多次读取磁盘而浪费时间
文件控制块FCB
基本信息 文件名:字符串,通常在不同系统中允许不同的最大长度,可修改 物理位置 文件逻辑结构:有/无结构(记录文件,流式文件) 文件物理结构:(如顺序,索引等) 访问控制信息 文件所有者(属主):通常是创建文件的用户,或者改变已有文件的属主 访问权限(控制各用户可使用的访问方式):如读、写、执行、删除等 使用信息 创建时间,上一次修改时间,当前使用信息等。
测试题
在文件系统中,访问一个文件f时首先需要从目录中找到与f对应的目录项。已知文件系统数据块大小为1KB,一个目录项的大小为128字节,文件平均大小为100KB。该文件系统的目录结构如图所示。不考虑磁盘块的提前读和缓存等加速文件读写的技术,请回答以下问题:
1)如果采用串联文件实现,同时文件属性直接存储在目录项中,并且根目录的目录项已读入内存中。访问第三级目录下的一个文件中的一个块平均需要访问几次磁盘?
2)如果采用索引文件实现,目录项中仅存储文件名和i节点指针,其中文件名占14个字节,i节点指针占2个字节。如果仅采用直接索引,每个第三级目录下的文件数不超过50个,且根目录的i节点已读入内存,访问第三级目录下的一个文件的一个块平均需要访问几次磁盘?
3)假设该文件系统所管理的磁盘空间为16ZB(1ZB=270B)。如果inode中包括512字节的索引区,且允许采用一级间接索引进行组织,那么该文件系统支持的最大文件是多少字节?
- 因为根目录在内存里,那么读取二级目录不用访问磁盘。访问三级目录时,一个磁盘块1KB,一个目录项128B,则一个磁盘块可以放8个目录项,共有128个目录项,分布在16个磁盘块上。因为是串联实现,所以线性访问1-16次,所以访问目录项平均8.5次;访问文件块时,一个文件100KB,每个文件要100个磁盘块,串联访问平均50.5次。总共59次
- 访问二级目录时,访问二级目录的i节点一次,访问二级目录内容1次,一共2次;访问三级目录时,访问i节点1次;访问三级目录内容时,一个目录项14+2=16B,一个磁盘块存放64个目录项,则三级目录存放在2个磁盘块上,访问三级目录项1-2次平均1.5次磁盘,总2.5次;访问文件块,访问i节点1次,访问磁盘块1次,总2次。总共6.5次(注意只是访问文件的一个块,访问i节点是得知某块的磁盘位置)
- 16ZB对应2^64^个磁盘,块号就要有64位即8B空间,inode索引区用了64个磁盘块,每个磁盘块可以存储1kb/8b=128个块号,最终支持文件大小64*128*1K=8M