存储器管理之物理内存的管理

  • 分区内存管理
  • 单一区存储管理
    定义:用户区不分区,完全被一个程序占用。
    优点:简单,不需要复杂的硬件支持
    缺点:内存浪费,利用率低
  • 分区存储管理
    定义:把用户区划分为若干大小不等的分区,共不同程序使用。适用单用户单任务系统。
    ①固定分区
    把内存固定地划分为若干个大小不等的分区供各个程序使用,每个分区的大小和位置都固定,系统运行期间不再重新划分。
    分区表:为了方便内存分配,通常将分区按大小排好序,并建议一张对应的分区表,该表包括每个分区的起始地址,大小及状态。当用户程序装入内存的时候,依据用户程序大小检索分区表,从中找出一个满足要求的、尚未分配的分区,将之分配给该程序,并将表中该分区的状态改为已分配,若未找到大小满足的分区,则拒绝分配。
    在这里插入图片描述
    使用特点:在程序装入前,内存已被分区,不再改变。每个分区大小不同,适应大小不同的程序,系统要维护分区表,适应具有固定任务数的多道程序系统。
    缺点:浪费内存,程序比所在分区小;另外大程序可能无法运行。
    建议:根据分区表安排程序装入顺序,使每个程序都能找到合适的分区运行。
    在通用操作系统中,程序的数量大小都是不确定的,显然固定分区不太适合
    ②动态分区
    定义:在程序装入的时候创建分区,使分区大小与程序的大小相等。
    特点:分区动态建立。会产生内存碎片。
    需要解决的问题分区的分配?分区的选择?分区的回收?解决内存碎片问题?
  • 分区的分配
    空闲区表:描述内存空闲区的位置和大小的数据结构
    在这里插入图片描述
    分配过程(假定用户要求的空间是s)
    (1)从空闲区表的第一个区开始,寻找大于等于s的空闲区
    (2)找到后从分区分割出大小为s的部分给用户使用
    (2)分割后的剩余部分作为空闲区仍登记在空闲区表中
    注意:分割空闲区时一般从底部分割,这样基址不变,容易更新
    空闲区表如何排序——放置策略(空闲区表排序原则)
    (1)按空闲区位置(首址)递增排序:首次适应算法
    (2)按空闲区位置(首址)递减排序:没有用
    (3)按分区大小递增排序:最佳适应算法
    (4)按分区大小递减排序:最坏适应算法
  • 分区的回收
    功能:回收程序释放分区(释放区),登记到空闲区表中,以便再分配。
    回收算法:要考虑释放区与现有空闲区是否相邻?若相邻,则合并后更新表,若不相邻,直接插入表中。
  • 内存覆盖技术 (覆盖overlay)(物理内存管理范畴)
    目的:在较小的内存空间中运行较大的程序。
    内存分区
    ①常驻区:被某段单独且固定地占用,可划分多个
    ②覆盖区:能被多段共用(覆盖),可划分多个
    在这里插入图片描述
    缺点:编程复杂,程序员划分程序模块并确定覆盖关系;程序执行时间长,从外存装入到内存很耗时。
  • 内存交换技术(Swapping)(物理内存管理范畴)
    原理:内存不够时把进程写道磁盘(换出/Swap out),当进程要运行时重新写回内存(换入/Swap 呕吐)
    优点:增加进程并发数,不考虑程序结构
    缺点:换入和换出增加CPU开销,交换单元太大(整个进程)
    需要考虑的问题:减少交换传送的信息量(模块/段);
    ①外存交换空间的管理方法;
    ②程序换入时的地址重定位。
    ③换出换入的地址重定位:
    放到什么位置?
    ①原来位置(容易引起地址冲突)
    ②任一空的位置(地址要重定位)
  • 内存碎片
    在这里插入图片描述
    动态分区的缺点:容易产生内碎片。
    碎片问题的解决方法
    规定门限值
    分割空闲区时,若剩余部分小于门限值,则此空闲区不进行分割,而是全部分配给用户。
    内存拼接技术
    将所有空闲区集中构成一个大的空闲区。
    拼接的时机:
    释放区回收的时候(拼接频率过大,系统开销大);
    系统找不到足够大的空闲区的时候(空闲区管理复杂);
    定期(空闲区管理复杂)
    缺点:消耗系统资源;离线拼接(系统需要暂停下来进行整理);重新定义作业。
    解除程序占用连续内存才能运行的限制(分页和分段就是借鉴了这种思想)
    把程序分拆为多个部分装入到不同分区,充分利用碎片

posted on 2019-04-28 17:20  的先生在打码  阅读(156)  评论(0编辑  收藏  举报

导航