成组链接法

首先说一下,成组链接法出现的背景和意义,它的出现带来了什么好处。

成组链接法作为文件存储空间管理方法之一(主要是空闲盘区的管理),还有其他三种管理方法分别是:空闲表法、空闲链表法和位示图法,它克服了空闲链表法表太长的缺点,但是保持了其优点,即分配和回收一个盘块比较简单。

这么好的文件存储空间管理方法,我们当然要认真学咯。。

首先来看文字解释:成组链接法是Unix系统中常见的管理空闲盘区的方法,它把空闲块分为若干组,每100个空闲块为一组,每组的第一个空闲块记录了空闲块总数和下一组物理空闲块的物理盘块号。理解这一点很重要。特别是对于看下面这张神图。

成组链接法_第1张图片

这张图我得好好解释一下,首先来看左边绿色的空闲盘块号栈,这是第一组(唯一进入内存的一组,只有它会占据存储空间)。看到S.free = 100了没,这表示该组有100个空闲块数目,再往下看,第0号对应的是300,表示下一组物理空闲块的物理盘块号为300,你看它指向的是不是300号对应的磁盘块。再看黄色的块,这些块里保存的才是真正的可用的空闲块,也就是说每组中只有99个块可用。尽管如此,每组还是有100个块的。特别要注意的是,最后一组的下一组盘块号不是没有么,我们这里采用的是结束标记“0”,也就是最右边一个蓝色块的第二项为0。


下面说一下,磁盘块分配和回收的过程。

首先检查超级空闲盘块号(第一组)栈是否已上锁,(提示:这是临界资源),若已上锁则进程睡眠等待;否则,给空闲磁盘块号栈上锁后,将S.free减1,若S.free仍大于0,即第一组不止一个空闲盘块,则将s_free[s_nfree]中登记的空闲盘块分配出去;若S.free为0,即当前空闲盘块号栈中只剩下最后一个空闲盘块,必须先将该盘块的内容读入超级块的空闲盘块号栈中,然后再将该盘块分配出去。若s_nfree为0,而且栈底登记的盘块号为0,则表示系统中无空闲盘块可分配。


磁盘回收过程:

系统回收空闲盘块时,若第一组不满100块,则只需将回收块的块号填入超级块的空闲盘块号栈栈顶,并将其中的空闲盘块数加1;若第一组已有100块,则必须先将超级块中的空闲盘块数和空闲盘块号写入回收块中,然后将盘块数1和回收块号记入超级块中。


记住一点的是,分配过程是从前往后分配,先分配第一组,然后分配第二组……

回收过程是正好相反,从后往前分配,先将释放的空闲块放入第一组,第一组满了,再开辟一组,之前的第一组变为第二组……


你可能感兴趣的:(操作系统)