文件存储空间的管理

存储空间的基本分配单位都是磁盘块

空闲表法

空闲表法属于连续分配方式,为每个文件分配一块连续的存储空间。系统为外存上的所有空闲表建立一张空闲表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块数等信息。
存储空间的分配与回收:采用首次适应算法和最佳适应算法等。
在内存分配上,虽然较少采用连续分配的方式,然而在外存的管理中,由于这种分配方式有较高的分配速率,可以减少访问磁盘的I/O频率
对换空间,连续分配
文件系统,文件较小时,连续分配
文件系统,文件较大时,离散分配
多媒体文件,为了减少磁头的寻道时间,连续分配

空闲链表法

空闲盘块链将所有空闲盘块区拉成一条链。

位示图法

位示图法利用二进制的一位来表示磁盘中一个盘块的使用,“0”代表空闲,“1”代表已分配。磁盘上所有盘块都有一个二进制位与之相对应。

空闲表法和空闲链表法都不适用于大型文件系统,因为这会使空闲表或空闲链表太长。

成组链接法

UNIX系统采用成组链接法
(1)空闲盘块号栈,用来存放当前可用的一组盘块号(最多一百个),以及栈中尚有的空闲盘块数N,N还兼栈顶指针,当N=100时,指向S.free(99).栈是临界资源,每次只允许一个进程去访问,所以系统为栈设置了一把锁。
s.free(0)是栈底,S.free(99)是栈顶。
(2)文件区中的所有空闲盘块被分为若干组。比如,每100个盘块为一组,假设盘上有10000个盘块,每块大小为1KB,其中第2017999用于存放文件。该区的最末一组盘块号为790179999,倒数第二组为78017900,第一组为201300
(3)将每一组含有的盘块总数N和该组所有的盘块号计入前一组的第一个盘块的s.ree(0)~s.free(99)中,由各组的第一个盘块可链成一条链
(4)将第一组的盘块总数和所有的盘块号计入空闲盘块号栈中,作为当前可分配的空闲盘块号
(5)最末一组只有99个可用盘块,其盘块号分别计入1~99,s.free(0)存放的是0,作为空闲盘块链的结束标志。

空闲盘块的分配与回收
当系统要为用户分配文件所需的盘块时,须调用盘块分配过程来完成。首先检验空闲盘块号栈是否上锁,若未上锁,便从栈顶取出一块空闲盘块号,将与之对应的空闲盘块分配给用户,然后栈顶指针下移一格,若该盘块号已是栈底,即S.free(0),这是当前栈中最后一个可分配的盘块号,由于在该盘块号中对应的盘块有下一组可用的盘块号,因此,须调用磁盘读过程将栈底盘块号所对应的盘块内容读入栈中,作为新的盘块号栈的内容,并把原栈底的盘块分配出去。然后,再分配一相应的缓冲区,最后,把栈中的空闲盘块数减一并返回。
系统回收盘块时,将回收盘块的盘块号计入空闲盘块号栈的顶部,并执行空闲盘块数+1的操作,当栈中空闲盘块号数达到100时,表示栈满,将现有栈中的100个盘块号计入新回收的盘块中,并将其盘块号作为栈底。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饼干饼干圆又圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值