其他分享
首页 > 其他分享> > 计算机操作系统第八章磁盘存储器的管理

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

作者:互联网

适用计算机操作系统(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 、空闲链表法

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

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

在这里插入图片描述

空闲盘区链的分配与回收

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

在这里插入图片描述

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个盘块号记入新回收的盘块中,再将其盘块号作为新栈底。

标签:文件,存储器,第八章,分配,索引,回收,磁盘,盘块,空闲
来源: https://blog.csdn.net/qq_45657669/article/details/112075864