墨篙和小奶猫

现实者不功利,理想者不空谈;仁爱者不软弱,刚直者不偏激

操作系统&文件管理之FCB

操作系统的外存(主要指磁盘)管理模块根据各磁盘块的当前状态(磁盘管理程序可配置bitmap数据结构,用来统一表示各磁盘块忙闲情况)可分为两类,一是空闲磁盘块的调度管理,二是已占用了磁盘块的文件管理。本文便讨论已使用了外存存储设备的文件的索引和读取管理。

前面提到操作系统的磁盘管理为了和内存管理配合,也是将磁盘分割为最小单元进行统一调度,和内存的页帧概念对应,磁盘管理模块以磁盘块作为最小单元管理磁盘(常见的磁盘块为1KB,对应2个512B扇区,磁盘块是OS概念,磁盘驱动读取是以扇区作为最小单元)。

FCB (file control block)文件控制块

对于操作系统而言,当任何一个文件存储在本地后,会为了方便后续读取管理,而为每个文件建立专门的用以收集必要属性信息的数据结构,称为FCB(概念借鉴自进程管理模块中的PCB process control block)。将数据结构FCB中的信息收集如下。

这里写图片描述

Fig.1 FCB示意图

在UNIX系统中的FCB的具体实现如下

文件名 扩展名 属性 保留 时间 首块号 大小

文件逻辑结构

按照文件逻辑可分为结构文件(数据表格)和字符流式文件(源程序,dll程序,普通文档)。
对于结构文件,又存在定长记录文件(表格项数目和长度固定)和非定长记录文件(非结构性数据,如每条评论留言,长短不一,当然也可以粗暴地预留足够空间统一规格对待,但是空间利用效率会低)

文件物理结构

结构类型 定义 优点 缺点 其他
连续文件 文件顺序存放在外存的若干个连续物理块中 读取速度快,占用盘块可能处于相连甚至相同的磁道上,故而磁头移动距离较短。 该类占用的磁盘块需要连续成块分配,长期使用会导致较多的磁盘内部碎片,静态分配方式不利于文件长度的动态增删。 常用这种方式来存放频繁使用的程序文件,如boot程序、系统文件经常存放在序号较前的磁盘块连续序列中。
串联文件 该类文件使用的磁盘块不连续,盘块之间通过指针相连,行成串联的队列。 支持文件动态增删,磁盘利用率提高。 文件读取速度低下,磁盘块索引保存方式鲁棒性较差,一旦中间任一磁盘块的指针部分缺损,将导致整个文件无法读取。 指针若是直接埋在个磁盘块中,并没有集中二次处理成查询目录,则称之为隐式连接;若是这些指针统一放置在一张表中(Windows2000以前采用的FAT:file allocation table系统便是采用这种方式),则称为显式连接。每个表项对应一个物理块,存放的指针指向同一文件的逻辑上的下一物理块,这样该FAT表其实还间接地实现了此前提到的bitmap各磁盘块忙闲情况表示功能。当然对于现在的动辄1T的硬盘,其FAT表可不小,想要遍历一次FAT表可能得分批次读入FAT表,性能堪忧,所以现在Windows采用了更好的NTFS文件系统。
索引文件 为每个文件占用的磁盘块建立一张专属的索引表,即文件逻辑块号和物理磁盘块号的对照表。 即实现了磁盘块的动态分配,利于文件长度动态增减,因为索引表的引入故而速度介于连续文件和串联文件之间。 系统需要为每个文件维护一张索引表,系统存在额外开销。 索引表的size显然是和文件size的直接相关的,FBC中便保留了指向该索引表的指针,当然文件如果太大,还是需要多重索引来解决索引表过大的问题。如图2。


Fig.2 多重索引文件结构

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/roger_ranger/article/details/77972677
个人分类: Linux内核
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭