内存管理

224 阅读3分钟

内存的基础知识

内存?

是用于存放数据的硬件

内存作用

程序执行前需要先放到内存中才能被cpu处理

存储单元

在多道程序环境下,系统中会有多个程序并发的执行,也就是说会有多个程序和数据需要同时放到内存中,那如何区分各个程序的数据放在什么地方?

给内存的存储单元编址

如果计算机“按字节编址”,则每个存储单元大小为1字节,即1B,即8个二进制位

如果字长为16位的计算机“按字编址”,则每个存储单元大小为1个字,一个字大小为16个二进制位

image.png

逻辑地址和物理地址

逻辑地址--相对地址

物理地址--绝对地址

地址转换(重定位)

把程序和数据的逻辑地址转换为物理地址

  • 静态重定位
  • 动态重定位

静态重定位

在一个作业装入内存时作业装入程序实现地址转换必须分配要求的全部内存空间,如果没有足够的内存,就不能装入作业

作业一旦进入内存后,在运行期间不能再移动,也不能再申请内存空间

image.png

动态重定位

装入程序把装入模块装入内存后,并不会把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行

image.png

内存管理

  • 内存分配和回收
  • 内存扩充
  • 地址转换
  • 存储保护和共享

内存扩充

  • 覆盖技术
  • 交换技术

覆盖技术

思想:

  • 将程序分为多个段,常用的段常驻内存,不常用的段在需要时调入内存
  • 内存中分为一个固定区若干个覆盖区
  • 需要常驻内存的段放在固定区,不常用的段放在覆盖区,需要时调入内存,不需要时调出内存

image.png 缺点: 需由程序员声明覆盖结构,怎加了编程负担

交换技术

思想: 内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存和磁盘间动态调度)

  • 1.应该在外存(磁盘)的什么位置保存被换出的进程?
  • 2.什么时候应该交换?
  • 3.应该换出哪些进程? 1.具有交换功能的os中,通常把磁盘空间分为文件区对换区两部分。文件区追求存储空间的利用率,因此采用离散分配方式;对换区空间只占磁盘空间的小部分,被换出的进程数据放在对换区主要追求换入换出速度,因此采用连续分配方式对换区的IO速度比文件区的更快 2.多线程运行且进程吃紧时进行交换,例如发现许多进程运行时经常发生缺页 3.优先换出阻塞进程,优先级低的进程

内存分配和回收

  • 单一连续分配
  • 固定分区分配
  • 动态分区分配