第8章 磁盘存储空间的管理
第8章 磁盘存储空间的管理
- 8.2.1 空闲表法
- 8.2.2 空闲链表法
- 8.2.3 位示图
- 8.2.4 成组链接法
- 总结:磁盘空间管理方法
总图概览:
- 磁盘块:
- 磁盘块是存储介质上连续扇区所组成的一个区域。
- 磁盘块是主存和辅助进行信息交换的最小单位,每次总是交换一块或整数块信息。一般来讲,是2n个扇区。
- 为什么存在磁盘块?
- 读取方便。由于扇区的存储数量比较小,所以OS将相邻的扇区组合在一起,形成一个块,再对块进行整体的操作。
- 分离对底层的依赖:OS忽略对底层物理存储结构的设计。通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位。
8.2.1 空闲表法
- 空闲表法属于连续分配方式,与内存的动态分配方式类似,它为每个文件分配一块连续的存储空间。
- 系统为外存所有空闲区建立一张空闲表,每个空闲区对应一个空闲表项。再将所有空闲区按其起始盘块号递增的次序排列,形成空闲盘块表。
- 存储空间的分配与回收同内存动态分配方法。
- 特点:分配速度快,访问速度快;
- 分配算法:首次适应算法、最佳适应算法;
- 适应场景:对换空间一般采用连续分配方法;多媒体文件,为了减少磁头的寻道时间,采用连续分配算法。
8.2.2 空闲链表法
- 空闲盘块链
将磁盘上的所有空闲空间以盘块为单位组成一条链,其中的每一个盘块都有指向后继盘块的指针。
优点:分配回收方便;
缺点:盘块数量多,空闲盘块链会很长。
- 空闲盘区链
将磁盘上的所有空闲盘区组成一条链。在每个盘区上除含有用于指示下一个空闲盘区的指针外,还应有能指明本盘区大小(盘块数)的信息。
优点:空闲盘块链较短;
缺点:分配回收复杂。
8.2.3 位示图
- 位示图
- 利用二进制的一位(bit)表示磁盘中一个盘块的使用情况。 值:空闲,0;已分配,1;
- 磁盘上的所有盘块都有一个bit与之对应,由所有盘块所对应的位构成一个集合,称为位示图。 行号称为字号,列号称为位号;
- 二维数组表示:map[m][n];
- 盘块的分配
- 顺序扫描位示图,从中找出一个或一组其值为“0”的二进制位;并转换成与之相应的盘块号。例:A文件需要5个物理块.
- 修改位示图,令map[i][ j] = 1。
- 盘块的回收
- 将回收盘块的盘块号转换成位示图中的行号和列号。
- 修改位示图。令map[i][ j] = 0。
- 盘块号和位示图中元素地址的计算,假设都从0开始
- 由位示图计算磁盘的相对块号b,如(字号3,位号4)
b=字号16+4; 一般性: b=字号n+位号- 将盘块号转换为位示图中的字号和位号,如16盘块:
字号=16/16; 位号=16 mod 16
字号=b/n; 位号=b mod n;
- 例题
有3200个磁盘块(512byte)可用来存储信息,用字长为16位的字来构造位示图如下。假设CHS从0开始,扇区有8个,H有2个;
(1)位示图共需多少个字?(2)若某文件长度为3200字节,系统将为其分配哪些磁盘块?磁盘块从0开始编号。
解:(1) 共需字:3200/16=200;
(2) 3200/512=7块,从位示图中找到如下7块分配给该文件:19,23,24,25,26,36,37。
8.2.4 成组链接法
- 空闲表法和空闲链表法不适合大型文件系统,会使空闲表或空闲链表太长。
空闲块分成若干组,如每100个空闲块为一组,放在一个空闲块中,首先登记了空闲块总数和下一组空间块的物理盘块号。
初始化时,编号12~349为空闲块,共338个,利用空闲块来存放空闲链表,超级块中部分内容作为管理块,假设每个空闲块保存100个空闲块信息。
成组链接法-分配算法:顺序分配
现在在这样的情况下,在超级块中有38个空闲块,申请一个物理块就将超级块中的最上面的一块13给分出去,依次进行。当超级块中的情况变为下面这样:
此时将50号空块里面的内容复制到超级块中,并且修改超级块中的总个数位100,并且将超级块中第一块的空闲块的位置里面指向150号空块,然后将50号空块分配出去。成组链接法-回收算法
- 成组链接法占空间少(除超级块中内容外,均隐藏在空闲块中),分配、释放快,适合大型文件系统。
总结:磁盘空间管理方法
第8章 磁盘存储空间的管理相关推荐
- (五)磁盘存储空间的管理
为什么80%的码农都做不了架构师?>>> 主要有: 位示图 和内存的位示差不多 空闲块表 和可变内存管理差不多 空闲块链 主要是UNIX成组链接法的设计与实现 UNIX系统文件 ...
- 操作系统_第五章文件管理_磁盘存储空间的管理
如何实现存储空间的分配和回收取决于对空闲块的管理方法. 下面介绍几种常用的管理方法: 一 位示图法 注意,记住这几句话:每个盘面里面有扇区, 扇区里有磁盘组, ...
- java成组链接法的实现_c++磁盘存储空间的管理模拟(UNIX存储管理的成组链接法的设计与实现)...
[c++]代码库#include #include #include const int MAXGROUP=10;//定义组的大小 const int MAXJOB=100;//定义一个作业最大能申请 ...
- c语言实现磁盘存储空间的分配和回收,操作系统磁盘管理 借鉴资料
操作系统磁盘管理 借鉴资料 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所得 ...
- linux操作系统 第07章 磁盘管理
第7章 文件管理 7.1 文件管理概述 7.1.1 文件与文件系统 1. 文件 文件是具有名字的一组相关信息的有序集合,存放在外部存储器中.文件的名字称为文件名,它是文件的标识.文件的信息可以 ...
- 操作系统:第五章 磁盘管理 - I/O控制,缓冲区管理
本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...
- 原有磁盘上创建lvm_Linux 系统管理及服务配置实战-第12章 磁盘管理3(连载)
存储管理Ⅱ 1.逻辑卷LVM 1.1.LVM管理 在线扩容 online 数据迁移 online 创建LVM VG扩展/缩小 LV扩容 文件系统扩容 基本分区(MBR|GPT) ----> Fi ...
- (转)MVS-OS390系统管理-第二章 大型服务器外存管理
http://zmdxyboyandy.blog.bokee.net/bloggermodule/blog_viewblog.do?id=205821 更多文章首页 > 文章 > IBM大 ...
- Linux 第九章-系统进程和服务管理
Linux 第九章-系统进程和服务管理 1.管理Linux进程 进程是操作系统中非常基本的概念,在系统运维管理中经常设计到对进程的管理. 1.1.什么是进程 我们在系统中运行的所有文件都是通过 ...
最新文章
- Spring读取配置文件,获取bean的几种方式
- Python:执行精确的浮点数运算
- python dicom 器官分割_图像识别 | 使用Python对医学Dicom文件的预处理(含代码)
- LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复
- 【转】我们今年二十三四岁。。。
- python中使用函数的目的是什么_Python代码中os.mknod()函数起什么作用呢?
- 快排、归并、堆排序运用场景
- 不相交集java_不相交集类
- AD+邮件服务器搭建方案
- a59s刷机包卡刷 oppo_OPPO A59st刷机教程_OPPO A59st卡刷升级更新官方系统包
- java 在pdf中插入图片_新手教程!如何在PDF文件中插入图像
- Ubuntu Dolphinscheduler 执行命令 source: 未找到
- 黑马程序员————小牛皮糖学习笔记————IO流之未使用缓冲区读写文件
- redis实现坐标附近查询
- ​​​​​​​墨画子卿第三章:初心第2节:回家
- Python爬取酷狗音乐歌手信息
- Speedoffice(PPT)怎么自定义设置幻灯片大小
- linux中network启动不了的三种解决方案
- 第2周 Python基本图形绘制
- 按键控制8*8led点阵C语言程序,单片机按键控制8X8LED点阵屏显示图形 程序的几个问题...