1.物理内存的划分
1)等长分区划分:将内存等长划分,然后选择一部分给进程(分页)
2)不等长分区划分:进程需要多少给它划分多少(分段)
分页就是将内存分为等块等块的,在虚拟内存中称为页,在物理内存中成为页框或者块.
分段就是将内存分为不同段区域.
2.物理内存的管理
1)分页存储管理:位图
位图(bitmap):用位来标记数据,在等长内存管理中,比如我们将内存等分为大小相同的内存块,那么一位标记一块,因为会形成一个位图。
2)分段存储管理:空闲分区表
空闲分区表:用来记录每个空闲分区的情况,如分区号,分区始地址,分区大小等.
3)段页存储管理:两者结合
3.物理内存的分配
首次适配算法:
首次适配算法是在空闲区链表中从头开始查找符合申请内存大小的块,直到找到满足条件的为止,该算法不断的从头开始试验申请,所以大部分使用的都是低地址空间的内容,从而流出了高地址空间来满足大的申请需求,但是缺点是会在较低的地址空间中频繁的申请和释放导致低地址空间中的内存碎片,而且每次都查找都从头开始,查找效率比较低。
下次适配算法:
下次适配算法是首次适配算法的一个改进,它每次从上一次适配的地方开始向下查找,不需要每次都从头开始,此算法使得内存使用均匀,但是不会有大的内存块来满足内存分配。
最佳适配算法:
此算法先按照内存块的空闲区大小从小到大进行排序,排序后,每次从头开始匹配,这样匹配出来的结果肯定是最优的,但实际因为比较符合申请内存的大小,会出现很多较小的内存碎片无法使用,并且每次分配后都要重新排序,开销比较大。
最差适配算法:
此算法按照内存块的空闲区从大到小进程排序,排序后,有进程申请内存时,将表头最大的内存块分配给它,这样如果不能分配则所有不能分配,且将大内存分配给它,若只占用一小部分还可以进行二次分配。
4.物理内存的回收
思路就是讲即将回收的分区和空闲区合并,以形成更大的分区来运行更大的程序,形成最少的碎片.
5.内存碎片
内存碎片:在内存中占据一定大小的空间却得不到利用的内存。内存碎片分为内碎片和外碎片.
内碎片:比如按页式分配等长,那么如果有一个进程需要5页多内存,那么我们只能给他分配6页内存,那么这第6页是未用完的,其中除过一些数据外,我们还有空闲的被该进程占据,其他进程也不能使用。这个成为内碎片.
外碎片:外碎片是还未分出来的,未被进程占用且因为太小或其他不满足条件再次分配的小的内存块称为外碎片。
紧缩技术:我们一般采用紧缩技术来合并小的内存碎片,原理是将暂时不运行的进程安全的移动位置,独立出内存碎片,从而组装多个内存碎片合并成一个大的内存块。
6.伙伴算法
伙伴算法规定:无论已分配还是未分配的分区,其大小均为2的k次幂,对于具有相同大小的空闲分区设立一个空闲分区的双向链表.
当进程需要2^n区间时,如果找到则分配,如果没有则在2^(n+1)链表里找,把他等分,这两个分区为(伙伴)一份用于分配,另一份插在2^n链表里.同理如果2^n分区进行回收,可以在链表里把两个2^n分区的伙伴合并为2^(n+1).