在学习成组链接法时,不太明白这个回收和分配的原理。书上讲的不太明白,之后找了一个例题就明白了,特此来分享一下。
例题:
某个系统采用成组链接法来管理磁盘的空闲空间,目前磁盘的状态如图1所示。
(1) 该磁盘中目前还有多少个空闲盘块?
(2) 请简述磁盘块的分配过程,在为某个文件分配3个盘块后磁盘情况。
(3) 系统要删除另一文件,并回收它所占的5个盘块,它们的盘块号依次为700、711、703、788、701,请画出回收后的盘块链接情况。
图1
1.磁盘中有301块磁盘块,空闲盘块号栈,N=2,表示有两个空闲盘块299、300,而盘块300号上面又写着有100个空闲盘块:301-400,它还有下一个链接的盘块400;在盘块400中,记录有100个空闲盘块401-500;然后又链接到500号盘块,在500号盘块中,虽然N=100,但是第一个是0,它表示空闲盘块链的结尾。因此,总共的空闲盘块有:299、300、301-400、401-500、501-599;2+100+100+99=301块空闲磁盘块。
2、分盘3个磁盘块,先后分配了299 300 301三块空闲磁盘块
3、回收700、711、703、788、701号盘块
回收的过程也是从栈顶开始的,首先看N=99,然后回收700,会将700放在S.free[N]的位置,然后将N加1变成100:
然后回收711号盘块,因为此时空闲栈的N=100,已经满了,如果再回收,需要将空闲盘块栈的内容移动到711号盘块上,然后将空闲盘块栈的S.free[0]设置为711,N设置为1:
回收700号盘块
参考:https://blog.csdn.net/qq_37579082/article/details/85996897
https://blog.csdn.net/ajay666/article/details/73569654