3.1 内存管理概念

  • 3.1.1 内存管理的基本原理和要求
    • 程序的装入和链接
    • 逻辑地址与物理地址
    • 内存保护
  • 3.1.2 覆盖与交换
    • 覆盖
    • 交换
  • 3.1.3 连续分配管理方式
    • 单一连续分配
    • 固定分区分配
    • 动态分区分配

3.1.1 内存管理的基本原理和要求

内存管理:操作系统对内存的划分和动态分配。
内存管理的功能:

功能 说明
内存空间的分配与回收 由操作系统完成主存储空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。
地址转换 在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换为相应的物理地址
内存空间的扩充 利用虚拟存储技术和自动覆盖技术,从逻辑上扩充内存。
存储保护 保证各道作业在各自的存储空间内运行,互不干扰。

程序的装入和链接

创建进程首先要将程序和数据装入内存,将用户源程序变为可在内存中执行的程序。有以下三个步骤:
编译:由编译程序将用户源代码编译成若干目标模块。
链接:由链接程序,将编译后形成的一组目标模块及所需的库函数链接在一起,形成一个完整的装入模块。
装入:由装入程序将装入模块装入内存运行。
      程序的链接有以下三种方式:
静态链接:在程序运行之前,先将各目标模块及他们所需的库函数链接成一个完整的可执行程序,以后不再拆开。
装入时动态链接:将用户源程序编译后所得到的一组目标程序再装入内存时,采用边装入边链接的方式。
运行时动态链接:对某些目标模块的连接是在程序执行中需要该目标模块时才进行的。其优点是便于修改和更新,便于实现对目标模块的共享。

逻辑地址与物理地址

编译后,每个目标模块都从0号单元开始编址,这称为该目标模块的相对地址(逻辑地址)。当链接程序将各个目标程序链接成一个完整的可执行目标程序时,链接程序顺序依次按各个模块的相对地址构成统一的从0号单元开始编址的逻辑地址空间。
      物理地址空间是指内存中物理单元的集合,它是地址转换的最终地址,进程在运行时执行指令和访问数据,最后都要通过物理地址从主存中存取。当装入程序将可执行代码装入内存中,必须通过地址转换将逻辑地址转换为物理地址,这个过程称为地址重定位。

内存保护

(1)在CPU中设置一对上、下限寄存器,存放用户作业在主存中的下限和上限地址,每当CPU要访问一个地址时,分别和两个寄存器的值对比,判断有无越界。
(2)采用重定位寄存器和界地址寄存器来实现这种保护。重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址的最大值。每个逻辑地址值必须小于界地址寄存器。内存管理机构动态的将逻辑地址与界地址寄存器进行比较,若未发生地址越界,则加上重定位寄存器的值后映射成物理地址,再送交内存单元。

3.1.2 覆盖与交换

覆盖

由于程序运行时并非任何时候都要访问程序及数据的各个部分。因此,可把用户空间分成一个固定区和若干覆盖区,将经常活跃的部分放在固定区,其余部分按调用关系分段,首先将那些即将要访问到的段放入覆盖区,其他段放在外存中,在需要调用前,系统再将其调入覆盖区替换覆盖区中原有的段。
      覆盖技术的特点是打破了必须将一个进程的全部信息装入主存后才能运行的限制。但当同时运行程序的代码量大于储存时,仍不能运行。此外,内存中能够更新的地方只有覆盖区的段,不在覆盖区的段会常驻内存。

交换

把处于等待状态的程序从内存移到辅存,把内存空间腾出来,这一过程称为换出,把准备好竞争CPU运行的程序,从辅存移到内存,这一过程又称换入。

3.1.3 连续分配管理方式

连续分配方式是指为一个用户程序分配一个连续的内存空间。

单一连续分配

内存在此方式下分为系统区和用户区,系统区仅供操作系统使用,通常在低地址部分;用户区是为用户提供的除系统区之外的内存空间,这种方式无需进行内存保护,因为内存中永远只有一道程序,因此肯定不会因为访问越界而干扰其他程序。
      优点是简单,无外部碎片可以采用覆盖技术,不需要额外的技术支持。缺点是只能用于单用户单任务的操作系统,有内部碎片,存储器的利用率极低。

固定分区分配

固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干固定大小的区域,每个分区只装入一道作业,当有空闲分区时,便可在从外存的后备作业队列中选择适当大小的作业装入该分区,如此循环。
      固定分区分配在划分队列中有两种不同的方式:

(1)大小相等的分区:用于利用同一台计算机去控制多个相同对象的场合,缺乏灵活性。
(2)大小不等的分区:划分为多个较小的分区、适量的中等分区和少量大分区。
      为便于内存分配,通常将分区按大小排队,并为之建立一张分区说明表。其中个表象包括每个分区的初始地址、大小及状态。

分区号 大小/KB 起址 状态
1 12 20 已分配
2 32 32 已分配
3 64 64 已分配
4 128 128 已分配

这种分区方式存在两个问题:一是程序可能太大而放不进任何一个分区中,这时用户不得不使用覆盖技术来使用内存空间;二是主存利用率低,当程序小于固定分区大小时,也独占一个完整的内存分区空间,这样分区内部就存在空间浪费,这种现象称为内部碎片。
      固定分区是可用于多道程序设计的最简单的存储分配,无外部碎片,但不能实现多进程共享一个主存区,所以存储空间利用率低。

动态分区分配

不预先划分内存,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。

      随着进程的换入/换出,在内存中会产生越来越多的碎片,如上图的6MB,4MB。这些小的内存快成为外存碎片。克服外部碎片可以通过紧凑技术来解决。即操作系统不断地对进程进行移动和整理,但这需要动态重定位寄存器的支持,且相对费时。
      在进程装入或换入主存时,若内存中有多个足够大的空闲块,则操作系统必须确定分配哪个内存块给进程使用,这就是动态分区的分配策略。有以下几种算法:

  • 首次适应算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
  • 最佳适应算法:空闲分区以容量递增的方式形成分区链,找到第一个能满足要求的空闲分区。
  • 最坏适应算法:空闲分区以容量递减的次序链接,找到第一个能满足要求的空闲分区。
  • 邻近适应算法:由首次适应算法演变而成,不同在于分配内存时从上次查找结束的位置开始继续查找。

操作系统0x08-内存管理概念相关推荐

  1. 操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)

    4.基本地址变换机构 页式 1.页式 硬件实现流程 地址变化步骤 例 问题 2.页式+快表 什么是快表? 引入快表后地址变换步骤 引入快表后的硬件实现 快表无法装入完整的慢表,达到高命中率的基础原理是 ...

  2. 操作系统之内存管理详解

    1 内存管理概念 1.1 基本原理和要求 内存管理: 操作系统对内存的划分和动态分配 内存管理的功能有: 内存空间的分配与回收 由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高 ...

  3. 操作系统之内存管理:2、内存管理的功能(内存分配回收、扩充、地址转化、存储保护)

    2.内存管理的功能 功能1:内存空间的分配与回收 连续分配管理: 方法1:单一连续分配 方法2:固定分区分配 方法3:动态分区分配 1.什么是动态分区分配? 2.系统用什么样的数据结构记录内存使用情况 ...

  4. 操作系统之内存管理:3、基本分页存储管理

    3.基本分页存储管理 思维导图 页框(页帧.内存块.物理块.物理页面)与页面(页) 如何确定进程的每个页面在内存中存放的位置?--------->页表 每个页表项多大?占几个字节?i号页表项的起 ...

  5. 操作系统:内存管理(概念)

    对于计算机系统而言,操作系统充当着基石的作用,它是连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统相关资源,同时提供配套的系统软件支持.对于专业的程序员而言,掌握一定的操作系统 ...

  6. 操作系统内存管理_操作系统6内存管理基础

    引言 花了一段时间才把之前的笔记整理了一部分,平时太忙也没啥时间.今天开始整理内存管理部分的,内存管理部分大致分为三部分笔记,第一部分就是本篇内存管理基础,第二部分是虚拟内存,第三部分高速缓存. 一个 ...

  7. 【操作系统】内存管理

    简介 ​ 内存是计算机中最重要的资源之一,通常情况下,物理内存无法容纳下所有的进程.虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所以无论物理内存如何增长,都赶不上程序增长的速度 ...

  8. 操作系统--03内存管理

    内存管理 第三章:内存管理(存储器管理) 3.内存保护的两种办法: 3.1 覆盖与交换 3.2 连续分配管理方式 3.3 动态分区分配算法 1.首次适应算法: 2.最佳适应算法: 3.最坏适应算法: ...

  9. 408 知识点笔记——操作系统(内存管理)

    文章目录 3 内存管理 3 内存管理 [虚拟存储器] 在程序装入时,可以只将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行.采用连续分配方式时,会使相当一部分内存空间都处于暂时或 &q ...

最新文章

  1. c++中的基本知识点
  2. linux常用命令记录
  3. 数据与知识管理属于计算机科学研究方向中的,知识管理技术与应用
  4. 【Pytorch神经网络基础理论篇】 04 线性代数
  5. ccs读取dat文件c语言程序,TMS320DM642学习----第六篇(CCS中.dat文件类型详解)
  6. 配置java编译环境
  7. Python学习笔记:PMT与PV函数
  8. python configure函数 循环_使用python统计git仓库中频繁修改的热点函数
  9. java基础练习题(含答案)
  10. 【神通数据库】图形化界面安装、命令行安装、静默安装、命令行建数据库、日常维护(超详细)
  11. 信息系统项目管理师学习笔记10-项目沟通管理和干系人管理
  12. 点击计算机 不支持此接口
  13. c++ 向量化_一种新的FIR滤波器系数量化方法
  14. 创业者的噩梦 - 怎么就侵权了
  15. 操作系统期末实验:多用户二级文件系统
  16. 计算机视觉笔记11.26
  17. 华为设备常见SNMP操作
  18. 《UnityAPI.Network网络》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Network+isClient+Connect+Server+立钻哥哥++OK++)
  19. 系统分析师历年真题免费分享
  20. 3g手机android应用新浪微博,无智能不手机 3G智能微博强机推荐

热门文章

  1. 企业密信——打造企业专属的安全通信互联网
  2. linux下如何重启或停止sssd_be
  3. 最浪漫的爱是得不到的
  4. 史上最高春晚红包活动来电,百度十个亿的项目参与下?
  5. 安卓视频播放器(VideoView)
  6. containerd安装和使用
  7. HTML: 10年SEO专员的经验分享
  8. 三星分屏多任务(MULTIWINDOW)引发的问题
  9. 数据中心如何助力大数据、区块链、人工智能结合应用,推动数字经济发展?
  10. “邮件门”愈演愈烈,如何避免成为“下一个”