Linux教程

操作系统(内存管理)

本文主要是介绍操作系统(内存管理),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

内存管理

内存管理相关概念

内部碎片、外部碎片(紧凑技术解决)

操作系统对于内存管理需要实现的功能

  1. 操作系统负责内存空间的分配和回收
  • 操作系统如何记录内存当前状态?
    固定分区分配:通过分区说明表,记录内存的分配与回收(分区号、大小、起始地址、状态)
    动态分区分配:空闲分区表 or 空闲分区链
  • 操作系统如何为新的进程分配内存?
    动态分区分配算法
    可能出现的情况:空闲分区表记录数量不变,表项需要修改(分配分区大);空闲分区表记录数量减少一个(分配大小相等)
  • 操作系统如何将结束的进程使用的内存进行回收?
    可能出现的情况:(1)回收后产生的空闲分区和上或下分区相邻,需要两个分区合并(数量:表项不变)(2)回收的分区上下都是空闲分区,需要三个相邻分区合并(数量:表项-1)(3)回收分区上下都无空闲分区,产生新的空闲分区(数量:表项+1)
  • 连续分配管理方式(分配的空间一定连续)

    1. 单一连续分配,内存中只能有一道用户程序,分为系统区和用户区。(好处:简单、无外部碎片、不一定提供内存保护;缺点:单用户单任务,内部碎片,空间利用率低)
    2. 固定分区分配:将用户空间分为若干固定大小分区,每个分区可以装入一道作业,可运行多道程序管理方式。(又分为分区大小相等与不等两种方式)相等分区不够灵活、但实现简单适用于控制多个相同对象的情况。分区大小不等灵活性强,满足不同需求。
      实现简单,无外部碎片,数据不共享。
      缺点:用户程序太大,可能不能满足需求;内部碎片,利用率低。
    3. 动态分配分区:不预先划分内存分区,在进程状图内存时根据进程大小动态建立分区,使其满足进程需要。无内部碎片,但有外部碎片。
  • 动态分区分配算法(连续分配方式)

    1. 首次适应算法:按照地址顺序排列,从低地址顺序检索,找到第一个满足要求的分区进行分配。
    2. 最佳适应算法:按照容量递增的顺序进行连接,顺序查找,找到第一个满足要求、大小最小的分区。(缺点:留下越来越多很小的外部碎片)
    3. 最坏适应算法:每次分配优先使用最大的空闲分区。按容量递减的分区进行分配(后来的大进程可能无法运行)
    4. 邻近适应算法:按地址排列,每次从上次结束的位置开始查找。(循环链表)

1,4链表不会重新排列;2,3链表顺序会动态变化
在这里插入图片描述

  1. 操作系统需要提供某种技术从逻辑上对内存空间进行扩充(虚拟内存)

  2. 需要提供地址转换功能(逻辑地址->物理地址)

  3. 提供内存保护功能,进程运行互不干扰(上下位寄存器、从定位寄存器和限长寄存器进行越界检查)

其他

  1. 按字节编址,每个存储单元的大小为一个字节。内存单元的大小看计算机编址方式。
这篇关于操作系统(内存管理)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!