成组链接法 恩赐解脱

成组链接法  即空闲表和空闲链里两种方法相结合。


将空闲块按100块为一组进行组织,利用空闲块每组的第0块来存放前一组的100块的地址,所以第0块既是可以分配的空闲块,同时也充当了数据结构。

具体来说,每100块分为一组(第一组为99块,这里的是s_free[0]是用来标识空闲盘块链的链尾标志,即表示下面已经没有索引表登记空闲块了)


s_nfree表示这个表中有多少空闲块,s_free表示这个表中的第几块空闲块

1.png

每一组相当于一个栈,s_free[0]相当于栈底,s_free[99]相当于栈顶,在一个组存放到100之后,就开一个新组来存放,新组的栈底就是上一组的栈顶,这样就可以把这些组给连接起来,组间是链,组内是表。


分配时,先分配栈顶的空闲块,直到s_free[0]内的值为0,说明已经到了空闲盘块链尾,没有盘块可以分配了,这是分配程序就将错误信息打印出来,并返回一个NULL给调用者,相当于出栈。


回收时,把回收的空闲块放入栈顶,如果前一个栈已经放满,就再在这组之后开一个新组,放入新组栈顶,并置s_nfree:为1;如果前一个栈未放满,就填入原组表中第一个 占用的项,相当于压栈。


这种后进先出的栈式管理和成组链接方法加快了磁盘的分配和释放的速度,减少了系统的时空开销,提高系统效率。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值