第28讲 文件管理之文件存储空间管理.docVIP

第28讲 文件管理之文件存储空间管理.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二十八讲 文件管理之文件存储空间管理 文件存储空间的管理,就是空闲空间的管理。下面介绍几个常用的管理方法: 1 空闲表法和空闲链表法 1.1 空闲表法 空闲表:系统为空闲区建立一张空闲表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块数等信息。再将所有空闲区按其起始盘块号递增的次序排列, 如下图。 序号 第一空闲盘块号 空闲盘块数 1 2 4 2 9 3 3 15 5 4 — — 存储空间的分配和回收: 与内存的动态分配类似,同样是采用首次适应算法、循环首次适应算法等。 内存管理中虽然很少采用连续分配方式,然而在外存的管理中,由于它具有较高的分配速度,可减少访问磁盘的I/O频率,故仍可采用连续分配算法。 1.2 空闲链表法 空闲链表法是将所有空闲盘区拉成一条空闲链。根据构成链所用基本元素的不同,可把链表分成两种形式: 空闲盘块链:将磁盘上的所有空闲空间,以盘块为单位拉成一条链。 分配存储空间时,系统从链首开始,依次摘下适当数目的空闲盘块分配给用户。 释放存储空间时,系统将回收的盘块依次插入空闲盘块链的末尾。 优点:是用于分配和回收一个盘块的过程非常简单 缺点:是分配盘块时,可能要重复操作多次 空闲盘区链:将磁盘上的所有空闲盘区(每个盘区可包含若干盘块)拉成一条链。 在每个盘区上除含有用于指示下一个空闲盘区的指针外,还应有能指明本盘区大小的信息。 分配盘区的方法与内存动态分区分配类似,通常采用首次适应算法。 在回收盘区时,同样也要将回收区与相邻的空闲盘区相合并。 在采用首次适应算法时,为提高对空闲盘区的检索速度,可以采用显式链接方法,亦即,在内存中为空闲盘区建立一张链表。 2 位示图法 2.1 什么是位示图? 位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况。0表示盘块空闲,1表示已分配。磁盘上所有盘块所对应的位构成一个集合,称为位示图。通常可用m*n个位数来构成位示图,并使m*n等于磁盘的总块数。 如下图。可看成是二维数组。 2.2 盘块的分配 根据位示图进行盘块分配时,可分三步进行: 顺序扫描位示图。找到0二进制位。 将所找到的一个或一组二进制位,转换成与之对应的盘块号。 盘块号=列数*(i-1)+j;( i,j,b(盘块号)都从1开始) 盘块号=列数*i+j+1; ( i,j从0开始,b从1开始) 修改位示图。令map[I,j]=1 i,j,b(盘块号)都从1开始。 2.3 盘块的回收 盘块的回收分两步: 将回收盘块的盘块号转换成位示图中的行号和列号。转换公式为 ( i,j,b(盘块号)都从1开始): i=(盘块号-1)\列数+1 j=(盘块号-1)mod列数+1 i,j从0开始,b从1开始: i=(盘块号-1)\列数 j=(盘块号-1)mod列数 修改位示图。令map[I,j]=0 公式中减1加1的目的是凑齐最后一列的得数! 优点是从位示图中很容易找到一个或一组相邻接的空闲盘块。常用于微型机和小型机中。 3 成组链接法 3.1引入 空闲表法和空闲链表法都不适用于大型文件系统,因为这会使空闲表或空闲链表太长。 在UNIX系统中采用的是成组链接法 是将上述两种方法结合而形成的一种空闲盘块管理方法,它兼备了上述方法的优点而克服了表太长的缺点。 3.2 空闲盘块的组织 空闲盘块号栈。用来存放当前可用的一组空闲盘块的盘块号(最多含100个号),以及栈中尚有的空闲盘块号数N。引入一个数据结构,栈 N还兼作栈顶指针。例如当N=100时,它指向S.free(99)。S.free(0)是栈底,栈满时栈顶为S.free(99)。实际上就是利用N-1来做下标。 文件中的所有空闲盘块,被分成若干个组,如有100000个盘块,每100块为1组,将会分成1000个组。 将每一组含有的盘块总数N和该组的盘块号,记入其前一组的第一个盘块的S.free(0)~S.free(99)中。这样由各组的第一个盘块形成了一条链。 将第一组的盘块总数和所有的盘块号,记入空闲盘块号栈中,作为当前可供分配的空闲盘块号。 最末一组只有99个盘块,其盘块号分别记入其前一组的S.free(1)~S.free(99)中,而在S.free(0)中则存放0,作为空闲盘块链的结束标志。 空闲盘块的成组链接法示意图 3.3 空闲盘块的分配 首先检查空闲盘块号栈是否上锁,如没有,便从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格 若该盘块号已是栈底,即S.free(0),这是当前栈中最后一个可供分配的盘块号。由于在该盘块号所对应的盘块中即有下一组可用的盘块号,因此须调用磁盘读过程,将该盘块内容读入栈中,作为盘块号栈的新内容,并把原栈底盘块分配出去。

文档评论(0)

jhyy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档