文件管理学习之文件存储空间分配管理
磁盘的逻辑组织
一个物理磁盘在逻辑上可分为几个区域,分区信息存放在主引导块分区表中。分区表中保存磁盘各种分区起始和终止的磁头、柱面、扇区、总的扇区数等信息。在主引导块中有三种类型分区:主分区、扩展区和逻辑分区。主分区是常用的,加载一个操作系统所需文件安装其上,操作系统必须从主分区上引导,一个硬盘上只能有四个主分区。为了突破四个分区的限制,就要在四个分区中创建立一个扩展分区。扩展分区其实是一个逻辑盘,它不能格式化,也不能分配盘符。但可在扩展分区中创建一个或多个逻辑分区,或称逻辑驱动器、卷(volume)。每个逻辑分区分配一个盘符,可以格式化成一个特定的文件系统。
为了实现存储空间的分配和回收,系统应为存储空间设置相应的结构以记住存储空间的使用情况,并配以相应算法方便地对存储空间进行分配和回收,下面介绍几种常用的文件存储空间管理方法。
1. 空闲表法
空闲表法属于连读分配方法,它为外存上所有空闲区建立一张空闲表,每个空闲区对应一个空闲表项,其中包括序号、该空闲区的第一盘块号,该区的空闲盘块数等信息,再将所有空闲区按起始盘块号递增的次序排列。UNIX S V操作系统盘对换区空间管理采用空闲表法,它与内存系统页表管理采用同样的数据结构和分配回收算法,这在第二章已作介绍。空闲表法的缺点是盘利用率不高,需要专用盘区来存放空闲表,在文件系统中较少采用连续分配。
2. 位示图法
位示图是利用二进制的一位来表示磁盘中一个块的作用情况,当其值为0 时表示对应盘块空闲;值为1时盘块已分配。磁盘上所有盘块都有一个二进制位与之对应,这样,由所有盘块所对应的位形成了一个集合称为位示图,位示图用磁盘块存放,称为位图块。例如:SCO UNIX 操作系统盘块大小为1KB,每个位图块有8192位,即每个位图块能管理8MB磁盘空间,要管理大的磁盘空间就需要多个位图块,这就需增设位图索引块,每个位图块块号用4B记录,这样一个位图索引块可管理256个位图块,总共管理2GB大小磁盘空间。位图块在管理的8192块盘块的最前面,位图块中第i个字节(i=0,1,……1023)的第j位(j=0,1……7)管理的块在该图块后块数为N=i*8+j。 Windows2000、Linux等操作系统的盘块管理都采用位示图法。
3. 空闲块链接法
空闲块链接法是将磁盘上所有空闲盘区链接在一个队列中,称为空闲块链。请求分配时从链头依次摘下适当数目的空闲盘块来分配,回收时将回收空闲盘块链入空闲块链尾部。空闲块链接法的优点是不需专用块存放管理信息,它的缺点是连续分配回收多块空闲块时需增加盘I/O操作。
4、链接索引块
将空闲的物理存储块分组,每组通过指针链接起来,每组设置头指针指向下一组空闲物理存储块。此链表称为连接索引块。链表的头指针存放在特殊的块中。一般头指针存放在每一组的第一表目中,因此分配空闲分块时应该从每一组的表尾开始查询,直到表头。当到表头时,将表头的内容赋值到特殊块中,此时特殊块中指向下一组空闲存储组进行分配。
回收时,将空闲块加到链表头指针所指向的空闲组后就行,将空闲组加到链表表尾的空闲组后即可。
由于文件系统安装后,磁盘专用块拷入内存系统缓冲区,即空闲块栈和空闲块栈指针在内存缓冲区,所以成组链接法分配和回收操作大部分情况只与内存进行读写,所以速度较快。
--------------------------------------------------------------------------------------
文件存储空间分配有三种方法:连续分配、链表分配、索引分配。
连续分配:针对物理存储结构为连续存储的文件,在FAT表中对连续文件的记录是文件名、文件存储的起始块、文件存储的长度。
连续分配的优点是查找速度快,但是不适合文件的动态增长和减少的情况。
索引分配:对每一个文件存储空间分配一个索引块存储文件存储块索引表,索引表中可以使存储块标号,或者是存储块起始标号和长度。这样文件就可以不连续的存储在存储介质中,有利于文件的动态变化。但是缺点是,要为索引块单独分配存储块,当索引块较大时浪费存储空间。
链表分配:解决了上述两种方法的缺点,FAT中记录了文件存储块的起始位置和长度,而实际中每一个存储块之间用指针链接,该方法最大的优点就是有利于消除碎片,有效的利用零散的存储空间,但是缺点是查找搜索时间将会较长,而且在存储块中指针要占用一定的空间。