UNIX空间空间管理——成组链接法
成组链接法是将将空闲表和空闲链表结合起来,兼备两种方法的优点。
空闲盘块的组织
(1)空闲盘块号栈
用来存放当前可用的一组空闲盘块的盘块号(最多100),以及栈中尚有的空闲盘块号数N,N可以兼做栈顶指针用。
(2)分组
文件区所有空闲盘块被分成若干个组,如将每100个盘块作为一个组。
(3)成链
将每一组含有的盘块总数N和该组所有的盘块号记入其前一组的第一个盘块的s.free(0)---s.free(99)。由各组的第一个盘块链成一条链。
如图:
空闲盘块的分配和回收
分配
(1)空闲盘块是否上锁,未上锁 ,栈顶取一空闲盘块号
(2)将栈顶指针下移一格,空闲盘块号数-1
(3)若该盘块号已是栈底,调用磁盘读过程,将内容读入栈中,作为新的盘块号内容。并把栈底对应的盘块分配出去。(数据已读入栈中)
(4)再分相应缓冲区,作为该盘块的缓冲区。最后把栈中的空闲盘块数-1返回。
回收
将回收的盘块号放入空闲盘块号栈顶,空闲盘块数+1。若栈中空闲盘块号数已达100时,表示栈已满,将现有的100个盘块号记入新回收的盘块中,再将其盘块号作为新的栈底。
例题
成组链接法管理空闲盘块,每组4块,当前情况如图:
(1)画出回收801,802块后的情况:
(2)回收后,有一进程又需要分配4块空闲盘块,画出分配之后的情况。