内存管理知识的简单介绍

发布时间 2023-08-23 19:20:29作者: 落雪归
  • 计算机用于存储的设备
高速缓存(临时存储)
内存,进程(临时存储)
磁盘(永久存储)

从下往上缓存速度越来越快,价格逐渐升高,存储大小越来越小。

  • 内存管理的简单发展

早期的内存管理采取的是运用物理地址存储。

但如果是遇到多进程的话,容易造成问题。

  • 地址空间

管理多进程的内存时:

  1. 要想让进程地址独立,需要采用进程内部的相对地址
  2. 当有进程访问不是自己范围的地址话,需要操作系统进行干预保护。

因此出现了一种存储器抽象形式,称为地址空间。

在CPU中配置了两个寄存器,分别为基址寄存器和界限寄存器。

  • 动态重定位(需要保证程序地址在内存中是连续的):

在将进程装载到内存时,需要将进程的起始地址传到基址寄存器,作为当前进程的起始地址,该进程占内存的长度则需要存到界限寄存器。

在对进程进行操作时,CPU会根据界限寄存器查询跳转是否超出进程长度,如果没有超出,则将其与基址寄存器进行相加,变成实际的物理地址,跳转。

  • 交换技术(swapping)

当内存大小有限,但进程数量有很多时,进程是如何工作的呢?

这时候需要内存的交换技术

先把一部分进程放入磁盘,需要先把内存中暂时用不到的进程移到磁盘,把需要工作的进程放入内存,以此类推。

  • 内存紧缩

在进程交换中会产生进程之间的间隙,要想利用这些碎片化的内存区域,需要将所有进程尽可能向下移动,以留出大块的空闲区域。

缺点:会消耗大量的CPU时间

  • 内存管理
  1. 位图

          将内存划分成单位小区域,每个区域由0或1表示它的状态,空闲或者被占用。当进程需要加载到内存当中的时候,内存需要扫描连续为0的区域,作为进程的内存区域。

缺点:当单位数量较多时,查找比较耗时。

          2.链表

          每一块连续的区域,分别由一个节点表示,有四个值。第一个值若为P,表示这块区域是有进程的,若为H表示空闲区。第二个值指向对应区域的起始位置,第三个值对应的是区间长度,最后的是指针,指向下一个节点。

内存分配:

①首次适配算法(first fit):

如果有进程想要加载到内存,需要从头扫描,直到找到一块足够大小的空闲区。

②最佳适配算法(best fit):

找出大小最适合的空闲区,因为链表中的节点代表连续空间的区域数量,所以远远比位图的单位小区域小得多,也快得多。这时候需要移除某个进程,只需要找到对应的节点,把它的前面节点和后面的节点连接起来。为了节点方便,最好使用双向链表。

 

以上内容为个人学习所用,如有错误,请给予指正。谢谢!