• 存储管理-物理内存管理


    分区表:记录分区的位置,大小和使用标志

    分区存储管理:

      单一区存储管理(不分区存储管理):

        定义:用户区不分区,完全被一个程序占用。例如DOS

        优点:简单,不需要复杂

        缺点:程序运行占用整个内存,

           内存浪费,效率低

      分区存储管理:把用户区内存划分为若干大小不等的分区

             适合单用户单任务系统

        固定分区:把内存固定地划分为若干个大小不等的分区

             每个分区的大小和位置都固定,系统运行期间不再重新划分

          使用特点:

            1.在程序装入之前,内存已被分区,不再改变

            2.每个分区大小不同,适应不同大小的程序

            3.系统要维护分区表

          缺点:

            1.浪费内存

            2.大程序可能无法运行

          建议:

            根据分区表安排程序装入顺序

            当程序的大小,个数,装入顺序都固定时内存使用效率高。

        动态分区:在程序装入时创建分区,使分区的大小刚好与程序大小相等。

          特点:

            分区动态建立

            分区的大小和个数都可以改变

            存在内存碎片

          问题:

            分区的分配,选择,回收和如何解决内存碎片问题。

    分区放置策略:

      空闲区表:描述内存空闲区的

      分区的分配:

        分配过程(假定需要空间大小为S)

          1.从空闲区表第一个区开始寻找≥S的空闲区

          2.找到后从分区中分割出大小为S的部分给用户使用

          3.分割后的剩余部分作为空闲区依然登记再空闲区表中

          //分割空闲区的时候从底部分割,这样只是大小改变但是区的地址不变。

      放置策略:

        1按照空闲区首地址递增排序:首次适应算法

        2.按照空闲区首地址递减排序

        3.按照空闲区大小的递增排序:最佳适应算法

        4.按照空闲区大小的递减排序:最坏适应算法

        

        首次适应算法:尽可能使用低地址空间

              当需要较大分区时再高地址的空间有满足可能性

        最坏适应法:

          优点:大空闲区分割后剩下部分还是可以装下较大的程序

          特点:只需要一次查找就可以找到需要的分区

        分区的回收:

          功能:回收程序释放分区,登记到空闲区表中,以便再使用

          收回算法:

            1.考虑释放区与现有空闲区是否相邻   

            2.若释放区与现有空闲区不相邻,则直接插入空闲区表

            3.若释放区与现有空闲区相邻,则与空闲区合并后更新空闲区表

    内存覆盖技术:

      覆盖——Overlay

      目的:在较小的内存空间中运行较大的程序

      内存分区:

        常驻区:被某段单独且固定地占用,可划分多个

        覆盖区:能被多段共用(覆盖),可划分多个

      缺点:

        编程复杂:程序员划分程序模块并确定覆盖关系

        程序执行时间长:从外存装入内存耗时

    内存交换技术:Swapping

      原理:内存不够时把进程写进磁盘(换出/Swap Out)

         当进程要运行时重新写回内存(换入/Swap In)

      优点:

        增加进程并发数

        不考虑程序结构

      缺点: 

        换入和换出增加CPU开销

        交换单位太大

      问题:

        减少交换传输的信息量

        外存交换空间的管理方法

        程序换入时的地址重定位

    内存碎片:

      过小的空闲区,难利用

      内存碎片会降低内存有效利用率

      碎片问题:

        动态分区的缺点:

          容易产生内存碎片:内存反复分配和分割

          最佳适应法最容易产生内存碎片

        解决办法1:规定门限值

          分割空闲区时,若剩余部分小于门限值,则不分割,全部给用户

        解决办法2:内存拼接技术

          将所有空闲区集中一起构成一个大的空闲区

          拼接的时机:

           1.释放区回收的时候

            拼接频率过大,系统开销大

           2.系统找不到足够大的空闲区时

            空闲区的管理复杂

           3.定期:

            空闲区的管理复杂

          拼接技术的缺点:

            消耗系统资源

            离线拼接//需要整个系统停止运作来拼接

            重新定义作业

         解决办法3:解除程序占用连续内存才能运行的限制

            把程序拆分成多个部分装入不同分区,充分利用碎片

          

  • 相关阅读:
    Windows 2008R2 安装PostgreSQL 11.6
    Redis-基础介绍
    SQL Server中的GAM页和SGAM页
    linux读写相关
    String 和 Stringbuild
    JVM(六)如何执行方法调用
    dubbo学习(三)实现细节
    dubbo学习(二)SPI
    spring boot
    MySQL学习(二十一)锁
  • 原文地址:https://www.cnblogs.com/beautiful7/p/12839791.html
Copyright © 2020-2023  润新知