计算机操作系统笔记第八章磁盘存储器的管理

适用计算机操作系统(OS)(第四版)
自己的学习笔记,PPT及图片来源网络及自己老师,侵删。
三硬一软一接口——2硬

第八章磁盘存储器的管理

8.1 外存的组织方式

1 )连续组织方式 :为每一个文件分配一组相邻接的盘块,由此所形成的文件物理机构将是顺序式的文件结构
2 )链接组织方式 :可以为每个文件分配不连续的磁盘空间,通过链接指针将一个文件的所有盘块链接在一起。
3 )索引组织方式 :对文件采取索引组织方式时,所形成的将是索引式文件结构。

8.1.1 连续组织方式

把逻辑文件中的记录顺序地存储到邻接地各物理盘块中,类似文件count的第一个盘块号是0,文件长度为2,因此盘块号为0和1的两盘块中存放着文件count的数据。
在这里插入图片描述
连续分配的主要优点如下:

  • 顺序访问容易。

  • 顺序访问速度快。

连续分配的主要缺点如下:

  • 文件不能动态增长。

  • 外部碎片问题。

  • 必须事先知道文件的长度。

8.1.2 链接组织方式

主要优点:

  • 消除了磁盘的外部碎片,提高了外存的利用率

  • 对插入、删除和修改记录都非常容易

  • 能适应文件的动态增长,无需事先知道文件的大小

1 、隐式链接

在文件目录的每个目录项中,都须含有指向链接文件第一个盘块和最后一个盘块的指针,而在每个盘块中都含有一个指向下一个盘块的指针。
在这里插入图片描述
隐式链接的主要优点如下:

  • 提高磁盘的空间利用率,不存在外部碎片。

  • 有利于文件的插入、删除和动态扩充。

隐式链接的主要缺点如下:

  • 存取速度慢,一般只适用于信息的顺序存取。

  • 可靠性问题。

主要问题:只适合顺序访问,它对随机访问是及其低效的。

2、显式链接
把用于链接文件各物理块的指针显式地存放在内存的一张链接表中(整个磁盘中仅设置一张),该表称为文件分配表FAT,表的序号是物理块盘号,从0开始,到N-1,盘块总数N,每个表项中存放链接指针(下一个盘块号),文件的FCB的物理地址中填入该文件的链首指针所对应的盘块号。
在这里插入图片描述

8.1.5 索引组织方式

链接分配方式虽然解决了连续分配方式所存在的问题, 但又出现了另外两个问题, 即:

1 )不能支持高效的直接存取。要对一个较大的文件进行直接存取,须首先在FAT中顺序地查找许多盘块号。

2 ) FAT需占用较大的内存空间。

索引分配的主要优点如下:

  • 保持了链接结构的优点,又解决了其缺点。

  • 有利于文件的插入、删除和动态扩充。

索引分配的主要缺点如下:

  • 索引表本身带来了系统开销。

1、单级索引组织方式(一级)

为每一个文件分配一个索引块(表),把分配给该文件的所有盘块号都记录在该索引块中,建立一个文件时,只须在为之建立的目录项中填上指向该索引块的指针.
在这里插入图片描述
2 、多级索引组织方式(二级)
若文件较大,存放索引表也需要多个盘块(索引盘块),索引盘块亦需要按顺序管理起来,索引盘块较多,需对索引盘块也采用索引方式管理,形成多级索引。
在这里插入图片描述
3、增量式索引组织方式
混合组织索引

直接索引 :每项存放的是该文件数据所在盘块的盘块号。
一次间接索引 :实质一级索引分配方式
多次间接索引 :实质是二级索引分配方式

在这里插入图片描述

8.2 文件存储空间管理

8.2.1 空闲表法和空闲链表法

1、空闲表法
系统为外存上的所有空闲区建立一张空闲表,每个空闲区对应一个空闲表项(表项包括序号、空闲区的第一个盘块号、空闲盘块数等),将所有空闲区按其起始盘块号递增的次序排列。
在这里插入图片描述
属于连续分配方式,空闲盘区的分配与内存的分区(动态)分配类似,同样是采用首次适应算法和最佳适应算法等,它们对存储空间的利用率大体相当,都优于最坏适应算法。

存储空间的分配与回收 :

空闲盘区的分配与内存的动态分配类似,同样是采用首次适应算法、循环首次适应算法等。

系统在对用户所释放的存储空间进行回收时,也采取类似于内存回收的方法, 即要考虑回收区是否与空闲表中插入点的前区和后区相邻接,对相邻接者应予以合并。

2 、空闲链表法

空闲盘块链:适合于离散分配
空闲盘区链

空闲盘块链的分配与回收 :

  • 若某文件申请K个盘块,则从链头依次摘下K个盘块分配,并修改空闲链的链头指针。

  • 回收的盘块依次挂到链尾,并修改空闲链的链尾指针。

在这里插入图片描述

空闲盘区链的分配与回收

  • 若某文件申请K个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区,分配给文件。若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据。

  • 若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾。

离散分配、连续分配都适用。为个文件分配多个盘块时效率更高

在这里插入图片描述

8.2.2 位示图法

是利用二进制的一位来表示磁盘中一个盘块的使用情况,“0”,表示对应的盘块空闲,为“1”时,表示已分配。(有的系统正好相反,但本质上没有区别),磁盘上的所有盘块都有一个二进制位与之对应,这样,由所有盘块所对应的位构成一个集合,称为位示图。
在这里插入图片描述
盘块的分配与回收 :

1、分配

1 )顺序扫描位示图,从中找出一个或一组其值为“0”的二进制位(“0”表示空闲时)。

2 )将所找到的一个或一组二进制位, 转换成与之相应的盘块号。假定找到的其值为“0”的二进制位,位于位示的第i行、第j列,则其相应的盘块号应按下式计算:

				b = n*( i - 1 ) + j

式中, n代表每行的位数,注意盘块号、位号(列号)、字号(行号)是从零开始还是从一开始。

3)修改位示图, 令map[i,j]=1。

2、回收

1 )将回收盘块的盘块号转换成位示图中的行号和列号。 转换公式为:

 			    i = ( b - 1 ) DIV n + 1
 				j = ( b - 1 ) MOD n + 1

2 )修改位示图。 令map [i,j]=1。

8.2.3 成组链接法

1 、空闲盘块的组织

1 )空闲盘块号栈,用来存放当前可用的一组空闲盘块的盘块号(最多含100个号),以及栈中尚有的空闲盘块(号)数N。顺便指出,N还兼作栈顶指针用。例如,当N=100时,它指向S.free(99)。其S.free(0)是栈底,栈满时的栈顶为S.free(99)。
在这里插入图片描述
2 )文件区中的所有空闲盘块被分成若干个组,比如,将每100个盘块作为一组。假定盘上共有10000个盘块,每块大小为1KB,其中第201 ~ 7999号盘块用于存放文件,即作为文件区,这样,该区的最末一组盘块号应为7901~ 7999;次末组为7801~ 7900,倒数第二组的盘块号为301~ 400;第一组为201~300。

3 )将每一组含有的盘块总数N和该组所有的盘块号记入其前一组的第一个盘块的S.free(0)~S.free(99)中。这样,由各组的第一个盘块可链成一条链。

4 )将第一组的盘块总数和所有的盘块号记入空闲盘块号栈中,作为当前可供分配的空闲盘块号。

5 )最末一组只有99个盘块,其盘块号分别记入其前一组的S.free(1)~ S.free(99)中而在S.free(0)中则存放“0”作为空闲盘块链的结束标志。(注:最后一组的盘块数应为99,不应是100,因为这是指可供使用的空闲盘块。其编号应为(1~99),0号中放空闲盘
块链的结尾标志。

2、空闲盘块的分配与回收

分配:

1 )当系统要为用户分配文件所需的盘块时,须调用盘块分配过程来完成。该过程首先检查空闲盘块号栈是否上锁(栈是临界资源,每次只允许一个进程进去访问,设置了锁)

2 )如未上锁,便从栈顶取出一空闲盘块号,将与之对应的盘块分
配给用户,然后将栈顶指针下移一格。

3 )若该盘块号已是栈底,即S.free(0),这是当前栈中最后一个可分配的盘块号。由于在该盘块号所对应的盘块中记有下一组可用的盘块号,因此,须调用磁盘读过程将栈底盘块号所对应盘块的内容读入栈中,作为新的盘块号栈的内容,并把原栈底对应的盘块分配出去(其中的有用数据已读入栈中)。

4 )然后,再分配一相应的缓冲区(作为该盘块的缓冲区)。最后,把栈中的空闲盘块数减1并返回。

2 、回收

1 )在系统回收空闲盘块时,须调用盘块回收过程进行回收。它是将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加1操作。

2 )当栈中空闲盘块号数目已达100时,表示栈已满,便将现有栈中的100个盘块号记入新回收的盘块中,再将其盘块号作为新栈底。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

从今天起请叫我小张

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

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

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

打赏作者

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

抵扣说明:

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

余额充值