Linux内存总结(1)
内存管理满足的要求:
1.重定位: 把逻辑地址空间转换为内存中的实际物理空间的过程。
重定位是多道程序在内存中同时运行的基础,有动态重定位与静态重定位。
2.保护
在进程运行的过程中需要保护,避免受到其他进程的干涉。通过处理器的寄存器来实现保护。
3.共享
在保护的同时需要灵活性,允许多个进程访问内存的同一个部分。
4.逻辑组织
5.物理组织
下面介绍一下内存分区:
一、固定分区
第一种是分成固定的且相同的大小。
第二种是分成固定且不同的大小。
程序在运行的时候都要占用一个固定大小的分区,这个分区一定要足够容纳进程的最小分区,比如3M的进程放在4M的内存中,就会产生1M的内部碎片。
二、动态分区
对于分区的长度和数目是可变的。
1、动态分区时的分配与回收:(可以参考内存池的管理)
(1)对于请求表中的要求内存长度,分配程序从可用表或者自由链寻找出合适的空闲区。
(2)分配空闲空闲区之后,需要实时更新可用表和自由链。
(3)在内存释放时,需要对相邻的空闲区进行连接合并,并且更新可用表和自由链。
在a中有一块64M的内存空间,其中操作系统占8M,有自由空间58M,其中有三个进程分别占10M,15M,25M,剩余8M,当我们换出进程2,如图b,再换入进程4,剩余的8M空间无法让进程4运行,所以进程4覆盖进程2的空间,但是在进程4与进程3之间有5M的空间无法被利用,这些碎片被称为外部碎片。
2、动态分区时的分配方法
(1)最先适应法:最先适应法要求可用表或自由链按照其实地址递增的次序排列。特点是一旦找到大于或者等于所有要求内存长度的分区,则结束探索,然后在这个分区中划出所要求大小的空间分配给用户,并且把余下的空间合并,更新可用表
(2)最佳适应法:按照空闲区的大小从小到大的次序排序,当用户申请空间时,从头开始查找,当找到满足的第一个区时,停止查找,然后跟最先适应法的处理方法相同。
(3)最坏适应法:按照空闲区的大小递减次序排序。当用户申请空间时,从第一个空闲区开始匹配,如果第一个空闲区的大小大于或等于所申请的空间大小,则按照以上的处理方法,否则分配失败。