操作系统基础:内存管理概述【上】

在这里插入图片描述

在这里插入图片描述

个人主页:godspeed_lucip
系列专栏:OS从基础到进阶


  • ️1 内存管理基础概念
    • 1.1 总览
    • 1.2 内存管理应有的功能
      • ️1.2.1 内存空间的分配和回收
      • ️1.2.2 从逻辑上扩充内存
      • ️1.2.3 地址转换
      • ️1.2.4 内存保护
    • 1.3 知识总结
  • ️2 覆盖与交换
    • 2.1 总览
    • 2.2 覆盖技术
      • ️2.2.1 覆盖技术的基本思想
      • ️2.2.2 例子
      • ️2.2.3 缺点
    • 2.3 交换技术
      • ️2.3.1 基本思想
      • ️2.3.2 待解决的问题
    • 2.4 总结
  • ️3 连续内存分配
    • 3.1 总览
    • 3.2 单一连续分配
      • ️3.2.1 思想
      • ️3.2.2 优点
      • ️3.2.3 缺点
    • 3.3 固定分区分配
      • ️3.3.1 基本思想
      • ️3.3.2 分类
      • ️3.3.3 特点
      • ️3.3.4 如何管理固定分区
      • ️3.3.5 优缺点
    • 3.4 动态分区分配
      • ️3.4.1 基本思想
      • ️3.4.2 记录内存使用情况的数据结构
      • ️3.4.3 空闲分区的分配
      • ️3.4.4 分区的分配和回收
  • 4 总结


️1 内存管理基础概念

1.1 总览

操作系统基础:内存管理概述【上】_第1张图片

1.2 内存管理应有的功能

️1.2.1 内存空间的分配和回收

示意图:
操作系统基础:内存管理概述【上】_第2张图片

️1.2.2 从逻辑上扩充内存

试想,随便下载一个大软件,其大小远远超过我们的内存大小,那么为什么这个软件可以运行呢?原因是操作系统采用了虚拟内存,即使物理空间较小,但是逻辑空间却可以很大。

️1.2.3 地址转换

提供地址转换功能,负责程序的逻辑地址与物理地址的转换

操作系统基础:内存管理概述【上】_第3张图片
三种装入方式为:
操作系统基础:内存管理概述【上】_第4张图片

️1.2.4 内存保护

提供内存保护功能,保证各进程在各自存储空间内运行,互不干扰。
使进程只可以访问属于自己的空间,不能去访问系统内核、其他进程的内存空间。那么,如何才可以实现内存保护呢?
以下图的进程1为例子
操作系统基础:内存管理概述【上】_第5张图片
(1)设置上下限寄存器。
image6
例如,进程1的实际物理地址为100-279,那么下限寄存器应该存放100,上限寄存器应该存放279。

(2)重定位寄存器、界地址寄存器
image7
重定位寄存器存放进程的实际物理地址的下限,界地址寄存器存放进程所需的最空间。例如,进程1的重定位寄存器存放100,界地址寄存器存放179-0=179。

1.3 知识总结

操作系统基础:内存管理概述【上】_第6张图片

️2 覆盖与交换

2.1 总览

操作系统基础:内存管理概述【上】_第7张图片

2.2 覆盖技术

️2.2.1 覆盖技术的基本思想

操作系统基础:内存管理概述【上】_第8张图片

️2.2.2 例子

操作系统基础:内存管理概述【上】_第9张图片
如图,这是一个程序的结构调用图。可以看到,A是程序运行所必须的代码段,因此放在固定区内;B、C不可能同时运行,因此可以分配同一个覆盖区,D、E、F同理。如图所示
操作系统基础:内存管理概述【上】_第10张图片
因此,本来应该将代码全部放入,但是操作系统只分配了一部分空间就实现了全部放入的结果,因此从逻辑上看,操作系统的内存大小是被拓展了的。

️2.2.3 缺点

image5

2.3 交换技术

️2.3.1 基本思想

image6
比如说,假设内存中有进程1、2、3,如图
操作系统基础:内存管理概述【上】_第11张图片
此时内存紧张,进程1、2需要暂时换出外存,因此在内存保留它们的PCB后(方便操作系统的后续管理)将它们置于挂起队列,空出的内存空间给更为紧张的进程使用。

️2.3.2 待解决的问题

操作系统基础:内存管理概述【上】_第12张图片
对于问题1:
操作系统基础:内存管理概述【上】_第13张图片
磁盘空间的示意图:
操作系统基础:内存管理概述【上】_第14张图片

对于问题2:
image11

对于问题三
image12

2.4 总结

操作系统基础:内存管理概述【上】_第15张图片

️3 连续内存分配

3.1 总览

操作系统基础:内存管理概述【上】_第16张图片

3.2 单一连续分配

️3.2.1 思想

操作系统基础:内存管理概述【上】_第17张图片
如图:
操作系统基础:内存管理概述【上】_第18张图片

️3.2.2 优点

操作系统基础:内存管理概述【上】_第19张图片
一个进程独占内存,就不会发生进程访问其他进程的内存空间的情况,且即使进程访问了操作系统的内核程序,通常也可以通过重启解决,所以这种方式下不一定需要采取内存保护?

️3.2.3 缺点

操作系统基础:内存管理概述【上】_第20张图片

3.3 固定分区分配

️3.3.1 基本思想

操作系统基础:内存管理概述【上】_第21张图片

️3.3.2 分类

根据分配的空间相等与否可以分为以下两类
操作系统基础:内存管理概述【上】_第22张图片
如图
操作系统基础:内存管理概述【上】_第23张图片

️3.3.3 特点

操作系统基础:内存管理概述【上】_第24张图片

️3.3.4 如何管理固定分区

可以通过分区说明表进行管理,其具体内容如图:
操作系统基础:内存管理概述【上】_第25张图片
这种数据结构可以通过数组或链表实现
image11

️3.3.5 优缺点

操作系统基础:内存管理概述【上】_第26张图片

3.4 动态分区分配

️3.4.1 基本思想

image13

️3.4.2 记录内存使用情况的数据结构

可以采取空闲分区表、空闲分区链表示
(1)空闲分区表
例子:
操作系统基础:内存管理概述【上】_第27张图片
操作系统基础:内存管理概述【上】_第28张图片
(2)空闲分区链
例子:
操作系统基础:内存管理概述【上】_第29张图片

️3.4.3 空闲分区的分配

分配算法在下一小节进行详细描述
image17

️3.4.4 分区的分配和回收

假设操作系统采用空闲分区表管理分区(使用空闲分区链同理)
(1)分配操作
假设起始表内容如下:
操作系统基础:内存管理概述【上】_第30张图片
①假如一个空闲分区的大小大于进程申请的空间,那么直接修改内容和即可。 假设一个4MB的进程进入,需要分配到分区1中,那么分区表应该修改如下:
操作系统基础:内存管理概述【上】_第31张图片

②假如一个空闲分区的大小等于进程申请的空间,那么需要删除该内容。假设一个4MB的进程进入,需要分配到分区3中,那么分区表应该修改如下:
操作系统基础:内存管理概述【上】_第32张图片

(2)回收操作
①回收分区的后面(后面)有空闲分区
直接修改表项内容
操作系统基础:内存管理概述【上】_第33张图片

②回收分区的后面没有空闲分区
增加一个表项内容
操作系统基础:内存管理概述【上】_第34张图片

③回收分区的前后均为空闲分区
合并表项内容
操作系统基础:内存管理概述【上】_第35张图片

注意:各表项的排序不一定按照分区地址的大小进行排序

4 总结

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。

在这里插入图片描述

在这里插入图片描述

你可能感兴趣的:(服务器,linux,运维)