zoukankan      html  css  js  c++  java
  • 动态存储管理(小结篇)-待完善

    动态存储管理
      假设在系统刚开工时, 整个内存区是一个“空闲块”(在编译程序中称为“堆”)。
      下图a为依次给8个用户进行分配后的系统的内存状态。
      下图b为一段时间后,有的用户运行结束,它所占用的内存区变成空闲块,这时整个内存区呈现出占用块和空闲块犬牙交错的状态。
      假设又有新的用户进行系统请求分配内存,那么系统通常有两种做法:
      1 继续从高地址的空闲块中进行分配,而不理会已分配给用户的内存区是否空闲,直到分配无法进行时,系统才区回收所有用户不再实用的空闲块,并且重新组织内存,将所有空闲的内存区连接在一起成为一个大的空闲块。
      2 用户一旦运行结束,便将它所占内存区释放成为空闲块,同时,每当新的用户请求分配内存时,系统需要巡视整个内存区中所有空闲块,并从中找出一个“合适”的空闲块分配之。此时系统需建立一张记录所有空闲块的“可利用空间表”,此表的结构可以是“目录表”,也可以是“链表”。如下图所示,无论那种,表结构中每一项都要包含至少3个信息:初始地址、空闲块大小和使用情况。

      2.1 可利用空间表及分配方法
        可利用空间表中包含所有可分配的空闲块,每一块是链表中的一个结点。当用户请求分配时,系统从可利用空间表中删除一个结点分配之;当用户释放其所占内存时,系统即回收并将它插入到可利用空间表中。因此,可利用空间表也叫作“存储池”。大致可以以下3中不同结构形式的可利用空间表。
      2.1.1 系统运行期间所有用户请求分配的存储量大小相同。
        这种情况,可以把初期将内存区按所需大小分割成若干相同大小的块,并用指针连接成一个可利用空间表。分配时,可直接将第一个结点分配用户;释放时,将用户释放的空闲块插入在表头即可。这时,可利用空间表实际上就是一个链栈。
      2.1.2 系统运行期间用户请求分配的存储量有若干种大小的规格。
    这种情况,可以建立若干个可利用空间表,同一链表中的结点大小相同。每个结点中的第一个字设有链域(link,下一个结点地址),标志域(tag,空闲或者占用)和结点类型(type,可以由类型知道结点大小);如下图所示。此时的分配和回收方法基本和上种情况类似。只是当
      2.1.3 系统运行期间分配给用户的内存块的大小不固定,可以随请求而变。

  • 相关阅读:
    java操作html格式数据
    FineReport启动后访问404
    Linux环境安装配置JDK
    微信小程序-获取地理位置
    Redis模糊查询
    文件的上传与下载
    Java批量压缩下载
    Xcode7.x中安装Alcatraz
    环信其他设备登录返回登录界面
    UTF-8编码规则(转)
  • 原文地址:https://www.cnblogs.com/aimmiao/p/10251629.html
Copyright © 2011-2022 走看看