内存管理知识的简单介绍
- 计算机用于存储的设备
从下往上缓存速度越来越快,价格逐渐升高,存储大小越来越小。
- 内存管理的简单发展
早期的内存管理采取的是运用物理地址存储。
但如果是遇到多进程的话,容易造成问题。
- 地址空间
管理多进程的内存时:
- 要想让进程地址独立,需要采用进程内部的相对地址
- 当有进程访问不是自己范围的地址话,需要操作系统进行干预保护。
因此出现了一种存储器抽象形式,称为地址空间。
在CPU中配置了两个寄存器,分别为基址寄存器和界限寄存器。
- 动态重定位(需要保证程序地址在内存中是连续的):
在将进程装载到内存时,需要将进程的起始地址传到基址寄存器,作为当前进程的起始地址,该进程占内存的长度则需要存到界限寄存器。
在对进程进行操作时,CPU会根据界限寄存器查询跳转是否超出进程长度,如果没有超出,则将其与基址寄存器进行相加,变成实际的物理地址,跳转。
- 交换技术(swapping)
当内存大小有限,但进程数量有很多时,进程是如何工作的呢?
这时候需要内存的交换技术
先把一部分进程放入磁盘,需要先把内存中暂时用不到的进程移到磁盘,把需要工作的进程放入内存,以此类推。
- 内存紧缩
在进程交换中会产生进程之间的间隙,要想利用这些碎片化的内存区域,需要将所有进程尽可能向下移动,以留出大块的空闲区域。
缺点:会消耗大量的CPU时间
- 内存管理
- 位图
将内存划分成单位小区域,每个区域由0或1表示它的状态,空闲或者被占用。当进程需要加载到内存当中的时候,内存需要扫描连续为0的区域,作为进程的内存区域。
缺点:当单位数量较多时,查找比较耗时。
2.链表
每一块连续的区域,分别由一个节点表示,有四个值。第一个值若为P,表示这块区域是有进程的,若为H表示空闲区。第二个值指向对应区域的起始位置,第三个值对应的是区间长度,最后的是指针,指向下一个节点。
内存分配:
①首次适配算法(first fit):
如果有进程想要加载到内存,需要从头扫描,直到找到一块足够大小的空闲区。
②最佳适配算法(best fit):
找出大小最适合的空闲区,因为链表中的节点代表连续空间的区域数量,所以远远比位图的单位小区域小得多,也快得多。这时候需要移除某个进程,只需要找到对应的节点,把它的前面节点和后面的节点连接起来。为了节点方便,最好使用双向链表。
以上内容为个人学习所用,如有错误,请给予指正。谢谢!