详解文件存储空间管理中的位示图法
文章目录
- 何为位示图法?
- 位示图法简介
- 盘块的分配过程
- 盘块的回收过程
- 分配和回收时的转换公式
- 情况1 ) 行列号从0开始,盘块号从0开始
- 情况2) 行列号从0开始,盘块号从1开始
- 情况3) 行列号从1开始,盘块号从0开始
- 情况4) 行列号从1开始,盘块号从1开始
何为位示图法?
在给文件分配空间时,是以磁盘的盘块为基本单位分配的,必须记录磁盘可用于分配的盘块(即空闲盘块),以及提供磁盘分配和回收的手段。
文件存储空间管理就是用来完成上述功能的,位示图法文件存储空间管理的几种方法之一。
位示图法简介
利用二进制的一位来表示磁盘中的一个盘块的使用情况。当其值为“0”时,表示对应的盘块空闲;为“1”时,表示已经分配(或者把"0"作为盘块已分配的标记,把“1”作为空闲标志)。磁盘上的所有盘块都有一个二进制位与之对应,这样,由所有盘块所对应的位构成一个集合,称为位示图。通常可用m*n个位数来构成m行n列的位示图,并使m*n等于磁盘的总块数。
上段是位示图在存储空间管理中的作用。当然,位示图肯定不止这一种作用。其他作用与本文关系不大,故不叙述。
盘块的分配过程
1) 顺序扫描位示图,找到一个或一组代表空闲盘块的二进制位(如果是0代表空闲盘块就找0,如果1代表空闲盘块就找1).
2) 将所找到的一个或一组二进制位的行号和列号转换成相应的盘块号。
(转换公式在下面统一说)
3) 将位示图对应的一个或一组二进制位修改为代表已分配盘块的二进制位(如果1代表已分配,就修改为1,如果0代表已分配,就修改为0)。
盘块的回收过程
1) 将要回收的盘块号转换成对应的行号和列号。
(转换公式在下面统一说)
2) 修改位示图,令对应的二进制位为代表空闲盘块的二进制位(如果0代表空闲盘块就修改为0,如果1代表空闲盘块就修改为1。)
分配和回收时的转换公式
分四种情况
1.行列号从0开始,盘块号从0开始
2.行列号从0开始,盘块号从1开始
3.行列号从1开始,盘块号从0开始
4.行列号从1开始,盘块号从1开始
下面一一叙述:
ps: divdivdiv为整除, modmodmod为取余
ps:位示图每个位可以取0或1,下面表格的单元格中内容不代表位示图的取值,而是代表对应位的位置编号,即行号列号盘块号。每个单元格内容的格式如下:
盘块号( 行号,列号) |
---|
ps:为了方便说明,假设下面的位示图每行都只有4个位 |
情况1 ) 行列号从0开始,盘块号从0开始
如图:
^_^ | 第0列 | 第1列 | 第2列 | 第3列 |
---|---|---|---|---|
第0行 | 0(0,0) | 1(0,1) | 2(0,2) | 3(0,3) |
第1行 | 4(1,0) | 5(1,1) | 6(1,2) | 7(1,3) |
第2行 | 8(2,0) | 9(2,1) | 10(2,2) | 11(2,3) |
第…行 | … | … | … | … |
此种情况最好计算,类似于二维数组的行列下标与元素位置之间的转换 |
分配时,行列号转换为盘块号
盘块号=== 行号 ∗*∗ 一行位数 +++ 列号
回收时,盘块号转换为行列号:
行号===盘块号 divdivdiv 一行位数
列号===盘块号 modmodmod 一行位数
情况2) 行列号从0开始,盘块号从1开始
如图:
^_^ | 第0列 | 第1列 | 第2列 | 第3列 |
---|---|---|---|---|
第0行 | 1(0,0) | 2(0,1) | 3(0,2) | 4(0,3) |
第1行 | 5(1,0) | 6(1,1) | 7(1,2) | 8(1,3) |
第2行 | 9(2,0) | 10(2,1) | 11(2,2) | 12(2,3) |
第…行 | … | … | … | … |
相对于第一种情况,盘块号多了1,所以: | ||||
分配时,相对于第一种情况,计算后盘块号再加一 | ||||
盘块号=== 行号 ∗*∗ 一行位数 +++ 列号 +++ 1 |
回收时,相对于第一种情况,计算前盘块号先减一
行号===(盘块号 −-− 1) divdivdiv 一行位数
列号===(盘块号 −-− 1) modmodmod 一行位数
情况3) 行列号从1开始,盘块号从0开始
如图:
^_^ | 第1列 | 第2列 | 第3列 | 第4列 |
---|---|---|---|---|
第1行 | 0(1,1) | 1(1,2) | 2(1,3) | 3(1,4) |
第2行 | 4(2,1) | 5(2,2) | 6(2,3) | 7(2,4) |
第3行 | 8(3,1) | 9(3,2) | 10(3,3) | 11(3,4) |
第…行 | … | … | … | … |
相对于第一种情况,行列号多了1,所以: | ||||
分配时,相对于第一种情况,计算前行列号先减一 | ||||
盘块号=== (行号 −-− 1) ∗*∗ 一行位数 +++ 列号 −-− 1 |
回收时,相对于第一种情况,计算后行列号再加一
行号===盘块号 divdivdiv 一行位数 +++ 1
列号===盘块号 modmodmod 一行位数 +++ 1
情况4) 行列号从1开始,盘块号从1开始
如图:
^_^ | 第1列 | 第2列 | 第3列 | 第4列 |
---|---|---|---|---|
第1行 | 1(1,1) | 2(1,2) | 3(1,3) | 4(1,4) |
第2行 | 5(2,1) | 6(2,2) | 7(2,3) | 8(2,4) |
第3行 | 9(3,1) | 10(3,2) | 11(3,3) | 12(3,4) |
第…行 | … | … | … | … |
相对于第一种情况,盘块号、行列号都多了1,所以: | ||||
分配时,相对于第一种情况,计算前行列号先减一,计算后盘块号再加一 | ||||
盘块号=== (行号 −-− 1) ∗*∗ 一行位数 +++ (列号 −-− 1) +++ 1 | ||||
即: | ||||
盘块号=== (行号 −-− 1) ∗*∗ 一行位数 +++ 列号 |
回收时,相对于第一种情况,计算前盘块号先减一,计算后行列号再加一
行号===(盘块号 −-− 1) divdivdiv 一行位数 +++ 1
列号===(盘块号 −-− 1) modmodmod 一行位数 +++ 1
以上为个人理解,可能有偏颇疏漏,欢迎交流指正。
详解文件存储空间管理中的位示图法相关推荐
- 操作系统之文件系统:4、文件存储空间管理(空闲表法、空闲链表法、位示图法、成组链接法)
4.文件存储空间管理 思维导图 文件的初始化和划分 文件存储空间管理方法 1.存储空间管理--空闲表法 2.存储空间管理--空闲链表法 3.存储空间管理--位示图法 4.存储空间管理--成组链接法 思 ...
- 操作系统磁盘空闲管理之位示图法
位示图格式 从1开始的位示图 从0开始的位示图(最常用) 横向纵向N∗NN*NN∗N共N2N^2N2块 计算方式 已知第i行,第j列,盘块号B,位示图为N∗N的矩阵已知第i行,第j列,盘块号B,位示图 ...
- 15 操作系统第四章 文件管理 文件的物理结构 文件存储空间管理
文章目录 1 文件的物理结构 (文件分配方式) 1.1 文件块.磁盘块 1.2 文件分配方式--连续分配 1.3 文件分配方式--链接分配 1.3.1 链接分配--隐式链接 1.3.2 链接分配--显 ...
- 操作系统-文件存储空间管理
一.存储空间的划分与初始化 操作系统可以将一块磁盘划分为不同的逻辑盘(C盘/D盘),每个逻辑区分为目录区和文件区 二.存储空间管理方法 存储空间管理方法要从以下几个方面考量, 1)用什么方法管理和组织 ...
- 文件管理:文件存储空间管理
文件存储空间管理 文件管理:文件存储空间管理 1.1 存储空间的划分与初始化 1.1.1 逻辑卷 1.1.2 目录区与文件区 1.2 存储空间管理的方法 1.2.1 空闲表法 1.2.2 空闲链表法 ...
- 四十三、文件存储空间管理
一.知识总览 二.存储空间的划分与初始化 三.空闲表法(适用于连续分配方式) 四.存储空间管理-空闲链表法 五.存储空间管理-位示图法 六.总结
- (王道408考研操作系统)第四章文件管理-第一节5:文件存储空间管理
文章目录 一:空闲表法 (1)定义 (2)如何分配磁盘块 (3)如何回收磁盘块 二:空闲链表法 (1)空闲盘块链的分配和回收 (2)空闲盘区链的分配和回收 三:位示图法 (1)定义 (2)如何分配磁盘 ...
- 4.1.5 文件存储空间管理
目录 思维导图 存储空间的划分和初始化 空闲表法 空闲链表法 空闲盘块链 空闲盘区链 位示图法 成组链接法 思维导图 存储空间的划分和初始化 空闲表法 空闲链表法 空闲盘块链 空闲盘区链 位示图法 成 ...
- 文件管理 —— 文件存储空间管理
一.存储空间的划分与初始化 二.空闲表法 三.空闲链表法 (1)空闲盘块链 (2)空闲盘区链 四.位示图法 五.成组链接法 如何分配 如何回收
最新文章
- 《Python和Pygame游戏开发指南》——2.16 pygame.display.update()函数
- Delegate,Action,Func,匿名方法,匿名委托,事件
- BigPipe学习研究
- 【Servlet】Java Serlvet Listener 监听器
- acegis连接使用方法_正确打开效果器 连接方法和使用技巧必须要知道
- Python 内建函数 - sorted(iterable[, key][, reverse])
- retrofit2.6.0_RxAndroid和Retrofit 2.0
- can总线报文是固定的吗_CAN总线传输协议
- linux系统 (实验二)实验楼的课程笔记
- nodejs 任务调度bull 测试解析
- C++类复制构造函数
- asp.net 安装element ui_vue结合element-ui开发项目 一学就会
- java mxml_Java 之 XML
- MATLAB2020安装教程
- 电话用计算机接听,有了这个神器,在PC上也能接听iPhone电话、收发短息啦(安卓也可以哦~)...
- Centos7使用docke搭建openV
- oracle设置系统权限,Oracle数据库权限管理
- 最近招聘和面试的感想
- Git 修改提交者信息
- 11111122266666
热门文章
- Centos 安装OpenStack
- 斗地主的两种发牌方式
- Window环境下进入MySQL命令窗口
- 北京互联网创业者比上海广州加起来还多!(多图)
- js 实现在当前页面打开新窗口
- 解决Windows 10不显示打字框
- CentOS之——Bringing up interface eth0: Determining if ip address 192.168.1.81 is already in use for de
- RPA是什么?推荐让电商运营10倍提效的自动化工具
- 浅谈NLM非局部均值滤波
- 【软件应用】福昕pdf阅读器回退到上次阅读的位置