精华内容
下载资源
问答
  • 2021-12-16 19:25:30

    1.内容:模拟文件存储空间的管理,采用空白文件目录法和空白块链法实施空间分配。

    2.思想

    文件存储空间管理是文件系统的重要内容。常用的管理思想有空白文件目录法、空白块链法和位示图法。本实验采用前两种方法进行空间分配。

    (1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。为此需建立两张表格,分别记录相关数据。

    空白文件目录表(初始)

    序号

    首空白块号

    空白快个数

    物理块号

    备注

    1

    0

    100

    0,1,2,……,98,99

    空白文件目录(中间)

    序号

    首空白块号

    空白块个数

    物理块号

    标志

    1

    2

    4

    2,3,4,5

    未分配

    2

    9

    3

    9,10,11

    未分配

    3

    25

    5

    25,26,27,28,29

    未分配

    4

    39

    2

    39,40

    未分配

    5

    ……

    ……

    ……

    未分配

    文件标识

    首块号

    文件块个数

    状态

    备注

    beta

    0

    2

    占用

    Alpha

    6

    3

    占用

    Toyota

    12

    13

    占用

    Sony

    30

    9

    占用

    Ford

    50

    4

    占用

    ……

    ……

    ……

    ……

    已使用区域表(中间)

    参考了网上部分文献的思想和输出设计,部分代码不够准确和完善,可以用来参考,源代码如下

    ​
    import java.util.ArrayList;
    import java.util.Scanner;
    public class Run1 {
        public  static  fileInUse[] fileList = new fileInUse[6];//初始化空白文件目录
        protected  static  int nowEmptyFile = 100;//初始化空闲区
        protected  static  void addFile(){
            int i;
            for (i=0;i<3;i++) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入文件名");
                String fileName = sc.nextLine();
                System.out.println("请输入申请块号");
                int M = sc.nextInt();
                System.out.println("请输入首空白号");
                int firstPiece = sc.nextInt();
                if (M>nowEmptyFile) return;
                fileList[i] = new fileInUse();
                fileList[i].fileName = fileName;
                fileList[i].firstPiece = firstPiece;
                fileList[i].emptyNums = M;
                nowEmptyFile = nowEmptyFile - M;
                }
              System.out.println("----------当前已用的文件目录--------------");
                for (i=0;i<fileList.length;i++){
                if (i == 3) release();//转去执行释放操作
                System.out.println("文件名 首块号 空白块个数 ");
                System.out.println(fileList[i].getFileName() + "\t\t" + fileList[i].getFirstPiece() + "\t\t" + fileList[i].getEmptyNums());
                for (int j = 0; j < fileList[i].getEmptyNums(); j++) {
                    int firsPiece = fileList[i].getFirstPiece();
                    System.out.println("物理块号:" + (firsPiece + j));
                }
            }
        }
        public  static  void release(){
            int i,j;
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入要删除的首块号");int F = sc.nextInt();
            System.out.println("请输入要删除的文件块数");int B = sc.nextInt();
            for ( j=1;j<2;j++){
                for (i=0;i<fileList.length;i++){//遍历空白文件目录表
                    if (F+B == j){//有下邻
                        fileList[j].emptyNums += B;
                        fileList[j].firstPiece = F;
                    }else if(F == fileList[j].getFirstPiece() + fileList[j].getEmptyNums()){//有上邻
                        if(fileList[j].firstPiece == F+B){//有上邻也有下邻;
                            fileList[j].emptyNums = fileList[j+1].emptyNums + B;
                            fileList[j+1].emptyNums = 0;
                            fileList[j+1].firstPiece = 0;//清空j+1栏
                        }
                    }else{
                        fileList[j].emptyNums += B;
                    }
                    System.out.println("-----------当前空闲文件目录-------------");
                    System.out.println("序号  首块号  空白文件块");
                    for (i = 0;i<fileList.length-1;i++){
                        System.out.println(i + "\t\t" + fileList[i].getFirstPiece() +"\t\t" +
                                (nowEmptyFile-fileList[i].getEmptyNums()));
                        if (i == 2) break;
                    }
                    System.out.println("----------当前已用的文件目录--------------");
                    for (i=0;i<fileList.length;i++){
                        System.out.println("文件名 首块号 空白块个数 ");
                        System.out.println(fileList[i].getFileName() + "\t\t" + fileList[i].getFirstPiece() + "\t\t" + fileList[i].getEmptyNums());
                        for (j = 0; j < fileList[i].getEmptyNums(); j++) {
                            int firsPiece = fileList[i].getFirstPiece();
                            System.out.println("物理块号:" + (firsPiece + j));
                        }
                    }
                }
            }
        }
        public static void main(String[] args) {
                addFile();
        }
    }
    
    public class fileInUse {
        protected  String fileName;//文件名
        protected  int firstPiece;//首块号
        protected  int emptyNums;//空白块个数
    
        public String getFileName() {
            return fileName;
        }
    
        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
    
        public int getFirstPiece() {
            return firstPiece;
        }
    
        public void setFirstPiece(int firstPiece) {
            this.firstPiece = firstPiece;
        }
    
        public int getEmptyNums() {
            return emptyNums;
        }
    
        public void setEmptyNums(int emptyNums) {
            this.emptyNums = emptyNums;
        }
    }
    
    
    
    ​

    更多相关内容
  • 设计一个m行n列(自定)二维数组表示位示图结构,利用初始化操作模拟给出位示图的原始状态或者某一时刻的当前状态,设计算法完成给某文件分配几个盘块的过程,完成磁盘块的回收过程
  • 存储空间分配算法模拟
  • 对已分配盘块采用索引方式管理, 闲闭盘块采用成组连接管理, 实现分配, 回收和盘块一致性检查
  • 处理器调度算法: 先来先服务, 时间片轮转, 短作业优先, 最高响应比优先 存储管理: FIFO, LRU 磁盘移臂调度: SSTF, SCAN 文件管理: 运用空闲盘块表的方式组织磁盘空间, 模拟文件的 create() 和 delete() 操作
  • 一、文件存储空间管理(一)存储空间的划分与初始化 安装 Windows 操作系统的时候,一个必经步骤是——为磁盘分区(C: 盘、D: 盘、E: 盘等) (二)存储空间管理 1. 空闲表法 适用于“连续分配方式” 如何分配磁盘...

    一、文件存储空间管理

    在这里插入图片描述
    在这里插入图片描述

    (一)存储空间的划分与初始化

    • 安装 Windows 操作系统的时候,一个必经步骤是——为磁盘分区(C: 盘、D: 盘、E: 盘等)
      在这里插入图片描述

    (二)存储空间管理

    1. 空闲表法

    • 适用于“连续分配方式”
      在这里插入图片描述
    • 如何分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。
      在这里插入图片描述
    • 如何回收磁盘块:与内存管理中的动态分区分配很类似,当回收某个存储区时需要有四种情况:
      ①回收区的前后都没有相邻空闲区;
      ②回收区的前后都是空闲区;
      ③回收区前面是空闲区;
      ④回收区后面是空闲区。
      总之,回收时需要注意表项的合并问题

    2. 空闲链表法

    在这里插入图片描述

    (1)空闲盘块链

    在这里插入图片描述

    (2)空间盘区链

    • 连续分配、离散分配都适用
      在这里插入图片描述

    3. 位示图法

    在这里插入图片描述

    • 如何分配:若文件需要K个块,
      ①顺序扫描位示图,找到K个相邻或不相邻的“0”;
      ②根据字号、位号算出对应的盘块号,将相应盘块分配给文件;
      ③将相应位设置为“1”。
    • 如何回收:
      ①根据回收的盘块号计算出对应的字号、位号;
      ②将相应二进制位设为“0”

    4. 成组链接法

    • 空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX系统中采用了成组链接法对磁盘空闲块进行管理。
    • 文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。并且要保证内存与外存中的“超级块”数据一致。
      在这里插入图片描述
      在这里插入图片描述
    • 如何分配?
    • Eg :需要1个空闲块
      ①检查第一个分组的块数是否足够。1<100,因此是足够的。
      ②分配第一个分组中的1个空闲块,并修改相应数据
      在这里插入图片描述
    • Eg :需要100个空闲块
      ①检查第一个分组的块数是否足够。100=100,是足够的。
      ②分配第一个分组中的100个空闲块。但是由于300号块内存放了再下一组的信息,因此300号块的数据需要复制到超级块中每个分组正式分配出去之前,需要把下一个分组的链接信息复制到超级块中;而且超级块永远要保持在连头。
      在这里插入图片描述
    • 如何回收?
      Eg :假设每个分组最多为100个空闲块,此时第一个分组已有99个块,还要再回收一块
      在这里插入图片描述
    • 假设每个分组最多为100个空闲块,此时第一个分组已有100个块,还要再回收一块
    • 需要将超级块中的数据复制到新回收的块中,并修改超级块的内容,让新回收的块成为第一个分组
      在这里插入图片描述

    在这里插入图片描述

    展开全文
  • c语言,运行成功,比较基础,模拟存储管理(页面调度),页面淘汰算法采用先进先出(FIFO)
  • 详解文件存储空间管理中的位示图法

    万次阅读 多人点赞 2020-01-04 17:24:52
    可以用不同的文件存储空间管理方法来完成这些功能,位示图法是这些方法其中之一。 位示图: 利用二进制的一位来表示磁盘中的一个盘块的使用情况。当其值为“0”时,表示对应的盘块空闲;为“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: d i v div div为整除, m o d mod mod为取余
    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)
    第…行
    此种情况最好计算,类似于二维数组的行列下标与元素位置之间的转换

    分配时,行列号转换为盘块号
    盘块号 = = = 行号 ∗ * 一行位数 + + + 列号

    回收时,盘块号转换为行列号:
    行号 = = =盘块号 d i v div div 一行位数
    列号 = = =盘块号 m o d mod mod 一行位数

    情况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) d i v div div 一行位数
    列号 = = =(盘块号 − - 1) m o d mod mod 一行位数

    情况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

    回收时,相对于第一种情况,计算后行列号再加一
    行号 = = =盘块号 d i v div div 一行位数 + + + 1
    列号 = = =盘块号 m o d mod mod 一行位数 + + + 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) d i v div div 一行位数 + + + 1
    列号 = = =(盘块号 − - 1) m o d mod mod 一行位数 + + + 1



    以上为个人理解,可能有偏颇疏漏,欢迎交流指正。

    展开全文
  • 一设计任务 完成存储器动态分区分配算法的模拟实现 二设计思想 在对数据结构有一定掌握程度的情况下设计合理的数据结构来描述存 储空间实现分区存储管理的内存分配功能 应该选择最合适的适应算法 (首 次适应算法最佳...
  • 代码是在TC下运行的。包含有:存储管理分区分配算法、工资管理、计算器、进度调度、迷宫、扑克、扫雷、贪吃蛇、通讯录、五子棋、学生成绩管理
  • 一实验目的 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解熟悉可变分区存 储管理的内存分配和回收 二实验内容 确定内存空间分配表 采用最优适应算法完成内存空间的分配和回收 编写主函数对所做工作...
  • 分区存储管理算法模拟 实验 日期 2014/12/2 5 实验 成绩 实验类型 验证型 实 验 目 的 与 要 求 一个好的计算机系统不仅要有一个足够容量的存取速度高的 稳定可靠的主存储器而且要能合理地分配和使用这些存储空间当 ...
  • 操作系统4.1.5 文件存储空间管理

    千次阅读 2020-07-12 09:55:27
    目录区:主要存放文件目录信息(FCB)、用于磁盘存储空间管理的信息 文件区:主要存放文件数据 有些系统支持超大型文件,可支持由多个物理磁盘组成一个文件卷,如下图。 二、存储空间管理——空闲表法 ...

    本节学习需要注意的三个方面:

    1. 用什么方式记录、组织空闲块?
    2. 如何分配磁盘块
    3. 如何回收磁盘块

     

    一、存储空间的划分与初始化

    存储空间的划分(为磁盘分区):将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)

    在存储空间初始化时,需要将各个文件卷划分为目录区、文件区。

    1. 目录区:主要存放文件目录信息(FCB)、用于磁盘存储空间管理的信息
    2. 文件区:主要存放文件数据

    有些系统支持超大型文件,可支持由多个物理磁盘组成一个文件卷,如下图。

     

     

    二、存储空间管理——空闲表法

    空闲表法:即用一张表记录磁盘中空闲的盘块。此方法适用于“连续分配方式”

    空闲表的表项由空闲盘的起始块号空闲盘块数组成。如下图所示

     

    Q:采用这种方法如何分配磁盘块?

    与内存管理中的动态分区分配类似,为一个文件分配连续的存储空间。同样可以采用首次适应算法、最佳适应算法、最坏适应算法,临近适应算法来决定要为文件分配哪些区间。

    例如,如果新创建的文件请求3个块,按照首次使用算法,从10号块开始有5个连续的块可以满足需求,所以把10、11、12三个块分配给文件,分配后的空闲盘块表如下

     

    Q:如何回收磁盘块?

    与内存管理中的动态分配很类似,当回收某个存储区时需要分为四种情况:

    1. 回收区前后都没有相邻空闲区——为空闲盘块表增加一个表项即可;
    2. 回收区前后都是空闲区——将回收区和回收区前后的两个空闲区合并为一个空闲区;
    3. 回收区前是空闲区——将回收区和前空闲合并为一个空闲区;
    4. 回收区后是空闲区——将回收区和后空闲合并为一个空闲区。

    这里以回收区前后都是空闲区为例,磁盘是第一幅图的状态,

    如果回收21、22号磁盘块,那么回收后的空闲盘块表如下图所示。

    其他情况与之类似,回收时注意表项能合并的话就需要合并。

     

     

    三、存储空间管理——空闲链表法

    空闲链表法分为两种:空闲盘块链和空闲盘区链。

    下图分别表示空闲盘块链和空闲盘区链。

    空闲盘块链中存储着下一个空闲盘块的指针。

    空闲盘区链中连续的空闲盘块组成了一个空闲盘区,每个盘区中的第一个盘块记录了盘区长度和指向下一个盘区的指针。

    如21、22、23号3个盘块组成的盘区,21号盘块中记录了指向下一个盘区的指针(即指向6、7号盘块组成的盘区的指针)和盘区的长度3,其他的盘块类似。

     

    1、空闲盘块链

    操作系统保存着链头、链尾指针

    ①如何分配:如过某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针。

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

    下图表示分配了3个盘块:


    下图表示回收了3个盘块:

    从上面可以看出,空闲盘块法适用于离散分配的物理结构。为文件分配多个盘块时可能要重复多次操作

     

    2、空闲盘区链

    操作系统保存着链头、链尾指针

    ①如何分配:

    1)若某文件申请K个盘块,由于空闲盘区链将连续的盘块组成一个盘区,所以若某个盘区大小满足可以实现一次分配,同样可以采用首次适用、最佳适用等算法,从链头开始检索,按照一定的规则找到一个大小符合要求的空闲盘区分配给文件。

    2)若没有合适的连续空闲块,也可以将不同的盘区的盘同时分配给一个文件,同样分配后也需要修改相应的指针链和盘区大小等数据。

    ②如何回收:

    1)若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。

    2)若回收区没有和任何空闲区相邻,将回收区作为一个单独的一个空闲盘区挂到链尾。同样也需要修改链表指针和盘区大小等信息。

    下图表示按照首次适应算法分配3个盘区

    从上面可以看出,空闲盘区链对离散分配、连续分配都适用为一个文件分配多个盘块时效率更高

     

     

     

    四、存储空间管理——位示图法(最常考)

    位示图:磁盘内存被划分为一个个磁盘块,可以用二进制位对应一个盘块。

    “0”代表盘块空闲,“1”代表盘块已分配。

    位示图一般用连续的“字”来表示,下图中一个字的字长是16位,字中的每一位对应一个盘块。

    因此可以用(字号,位号)对应一个盘块号。

    也可能用(行号,列号)来表示。


    注:盘块号、字号、位号也可以从1开始,只是本案例中从0开始。

    (王道书上给的是从1开始的算法)

     

    ①如何实现盘块号与(字号、位号)相互转换?

    n表示字长

    (字号,位号) = (i, j)的二进制位对应的盘块号 b = n * i + j

    b号盘块对应的字号 i = b / n位号 j = b % n

    1. (0,1)—> b = 16 * 0 + 1 = 1号块,从图可看出1号图已分配,同时位示图中(0,1)的二进制位也是1表示已分配
    2.   (1,10) —> b = 16 * 1 + 10 = 26号块,从图可看出26号块是未分配的
    3.  b = 13 —> i = 13 / 16 = 0,j = 13 % 16 =13,对应的(字号,位号) = (0,13),从位示图可以查出对应的二进制位为0,表示未分配
    4.  b = 31 —> i = 31 / 16 = 1,j = 31 % 16 =15,对应的(字号,位号) = (1,15),从位示图可以查出对应的二进制位为0,表示未分配

    ②如何分配:

    若文件需要k个块,

    1. 顺序扫描位示图,找到k个相邻或不相邻的“0”;
    2. 根据字号、位号算出对应的盘块号,将相应的盘块分配给文件;
    3. 将相应的位设置为“1”(设置为已分配状态)

    ③如何回收:

    1. 根据回收的盘块号计算出对应的字号、位号;
    2. 将相应的二进制位设置为“0”(设置为未分配状态)

    从上面可以看出:位示图法对连续分配和离散分配都适用

     

     

    五、存储空间管理——成组链接法

    空闲表法、空闲链表法不适用大型文件系统,因为空闲表或空闲联保可能过大。

    UNIX系统中采用了成组链接法对磁盘空闲块进行管理。这是将上述两种方法相结合的而形成的一种空闲管理方法。

    文件卷的目录区中专门用一个磁盘块作为超级块,当系统启动时需要将超级块读入内存。并且要保证与外存中的“超级块”的数据一致

    1、超级块实际上是一个栈结构,用来存放当前可用的一组空闲盘块号(最多含100个号)以及栈中尚有空间的块号数量N

    2、文件区中的所有空闲盘块分为若干个组,假设所有空闲盘块号是201~9999(实际上分组中的盘块号码是不要求连续的,不要求连续的,不要求连续的,这里是为了表述方便,认为空闲盘块连续的),将这些盘块进行分组,每组100个。

    3、每一组含有的盘块总数N和该组的所有盘号块记入前一组的第一个盘块中。这样各组的第一个盘块可以链成一条链。

    4、如果是最后一组,那么将前一个分组的第一个盘块的中存放空闲盘块链的结束标志符,如“-1”表示下一组是最后一个分组了

    ①如何分配?

    分配过程是从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格,若该盘块号已是栈底(即第一个盘块),这是当前栈中最后一个可分配的盘块号。

    由于在该盘块号所对应的盘块中记有下一组可用的盘块号,因此,不能直接将它分配掉,需要将它记录的下一组信息保存下来,所以必须调用磁盘读过程,将栈底盘块号所对应盘块的内容读入栈中,作为新的盘块号栈的内容,并把原栈底对应的盘块分配出去(其中的有用数据已读入栈中)。

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

    Eg1:如果此时新建一个文件需要一个空闲块

    1. 检查第一分组的块数是否足够。1<100,所以足够分配
    2. 将栈顶的盘块号即201号盘块对应的盘块分配出去,且将那个空闲块的数据删除,如下图
    3. 空闲盘块号由100减为99

    Eg2: 需要100个空闲块

    1. 检查分组的块数是否足够。100=100,是足够的
    2. 将第一分组中的100个空闲块分配出去。但是由于300号盘块记录了再下一组的信息,因此需要将300号盘块从外存(磁盘)读入内存,将300号盘块记录的信息写入空闲盘块号栈(复制到超级块中)
    3. 将100个空闲区都删除

     

    ②如何回收?

    在系统回收空闲盘块时,须调用盘块回收过程进行回收。

    它是将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加 1 操作。

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

    Eg1:以分配的第一个图为例,201盘块被分配出去了,如果此刻有个文件被删除了,其占用的盘块是199号,系统需要回收这个盘块,发现此时空闲盘块号栈中记录空闲块数为99,直接将盘块号记录栈顶,将空闲盘块数加1即可。

    Eg2:如果此时又有一个文件被删除了,其占用的盘块是190,此时空闲盘块号数已经达到100了,就需要将现在空闲盘块栈中信息记入新回收的块中。

     

     

    六、小结

    注意:

    1. 目录区包含什么 
    2. 空闲表法分配时会与哪些算法结合
    3. 位示图法要能推出盘块号、字号、位号的公式
    4. 字号、位号、盘块号到底从0开始还是1开始
    5. 成组链接法很难出考题
    展开全文
  • 文件存储位示图算法

    2007-12-14 13:29:06
    操作系统中文件存储中,用c语言模拟位示图存储
  • 提高内存管理的效率始终是操作系统研究的重要课题之一,虚拟存储技术是用来提高存储容量的一种重要方法,所以,本项实验的目的是立地设计几个常用的存储分配算法,并用高级语言编写程序对各种算法进行分析比较,评测...
  • 如何实现存储空间的分配和回收取决于对空闲块的管理方法。 下面介绍几种常用的管理方法: 一 位示图法 由于磁盘被分块后,每一块的大小都是一样的,所以也可仿照 页式存储空间管理方法,对每个磁盘可以用一张位...
  • 目的 为提高闪存的整体操作性能和使用寿命,提出新型的闪存文件管理算法。方法 在传统的文件管理系统的基础上加入了线性排序和连续空间功能,在文件存储之前完成闪存各部分利用程度和文件连续性的排序,使得新存储的...
  • 一设计任务 完成存储器动态分区分配算法的模拟实现 二设计思想 在对数据结构有一定掌握程度的情况下设计合理的数据结构来描述存储空间实现分区存储管理的内存分配功能应该选择最合适的适应算法首次适应算法最佳适应...
  • 熟悉主存的分配与回收 理解在不同的存储管理方式下如何实现主存空间的分配与回收 掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理 方式及其实现过程 实验原理 建立两张表空闲表和已分配表分别将未...
  • 存储管理的主要功能之一是合理的分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是:通过编写和调试请求页式存储管理中页面置换算法的模拟程序以加深对存储管理方案的理解,了解虚拟存储技术的...
  • 1、在该实验中,采用可变分区方式完成对存储空间管理(即存储空间的分配与回收工作)。 2、设计用来记录主存使用情况的数据结构:已分区表和空闲分区表。 3、在设计好的数据结构上设计一个主存分配算法,要求实现...
  • 计算机操作系统 实验报告 实验二 实验题目存储器管理 系别计算机科学与技术 系 班级 姓名 学号2 一实验目的 深入理解动态分区存储管理方式下的内存空间的分配与回收 二实验内容 编写程序完成动态分区存储管理方式下...
  • 用位示图管理磁盘存储空间 算法思想 (1) 为了提高磁盘存储空间的利用率,可在磁盘上组织成链接文件、索引文件,这类文件可以把逻辑记录存放在不连续的存储空间。为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的...
  • 模拟操作系统的主存分配运用可变分区的存储管理算法设计主存分配和回收程序并不实际启动装入作业 2. 采用最先适应法最佳适应法最坏适应法分配主存空间 3. 当一个新作业要求装入主存时必须查空闲区表从中找出一个
  •   存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。...
  • 存储管理方式及页面置换算法

    千次阅读 2018-12-11 22:33:18
    1、虚拟存储器的基本概念 引入、实现、特征 2、请求分页存储管理方式 硬件支持、地址变换、分配算法 页面置换算法 性能分析 3、请求分段存储管理方式 一、 ...
  • 实验目的 学会主存空间分配与回收的基本方法首次适应算法和循环首次适应算法 实验原理 理解在连续分区动态的存储管理方式下如何实现贮存空间的分配与回收 采用可变式分区管理使用最佳适应算法实现主存空间的分配与...
  • 实验六 可变分区存储管理实验

    千次阅读 2022-04-21 16:55:59
    通过编写和调试可变分区存储管理的模拟程序以加深对可变分区存储管理方案的理解,熟悉可变分区的分配和回收算法。 通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 二、实验类型 综合性实验。...
  • 4、存储保护 防止内存地址越界 二、装入模块放入内存方式 1、绝对装入 适合单道程序 2、可重定位装入 静态重定位,适合多道程序 3、动态运行时装入 动态重定位 三、内存保护两种方式 1、在CPU中设置一对上下寄存器 ...
  • 虚拟存储器指的是主存-外存层次,它以透明的方式为用户提供了一个比实际主存空间大得多的程序地址空间。 架构图如下所示: 2、虚拟存储器特征 常规存储器管理方式特征: 一次性: 作业必须一次全部装入内存后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 207,475
精华内容 82,990
关键字:

文件存储空间管理算法