内存管理学习之内存分配和地址重定位


内存的划分分为静态划分和动态划分。都是连续内存存储技术,而非连续内存存储技术有分页、页段式分段。

静态划分预先将物理内存划分为固定分区,当新进程装进内存,选择合适的空闲分区分配给进程。又称为固定分区法,分区的长度可以不同。

管理分区使用分区使用表,表项的内容是分区编号(线性的)、分区大小、分区使用情况。按照分区大小从小到大方式排列。

一种特殊的固定分区法:分页式划分。将内存划分为很小的页框,其中页框远小于上述的分区。两者的区别是:固定分区要求进程存进连续的内存空间,而分页式划分允许进程可以不连续存储在不同的页框。页框的管理使用空闲页框表,将连续空闲的页框集中管理。

静态划分的缺点是会产生大量的内零头,这些内零头不能再被使用,因为已经分配给既定的进程了,这样就大大浪费了内存空间。

为了解决内零头,可以采用动态划分技术,将真个用户内存看做整体,动态的将内存划分给需要的进程。

动态分区划分需要一定的划分算法保证外零头最少,主要的划分算法有:FFA首次适应算法、BFA最佳适应算法、WFA最差适应算法和伙伴分配算法,这就解决了为进程分配内存空间的问题。并不解决是否一次性装入进程的问题。

FFA算法:查询空闲分区表,将第一个适合的空闲分区分给进程,若剩余分区大于阈值则作为新的空闲分区更新分区表,否则全部分给进程。该算法的缺点是造成过多的小外零头,使得进程不能再多装。

提出一种解决方案:紧凑技术将进程移动全部放在内存的一段,这样就将外零头合并,该技术需要采用地址动态重定位技术,又称为碎片整理技术。

BFA算法:将空闲分区从小到大排列,选择第一个适合的分区分配给进程,这样保证外零头最小。优点是保证不分割大分区,但是形成过多的无法分割的小的外零头。

WFA算法:将空闲分区从大到小排列,选择第一个适合的分区分配给进程,这样保证了外零头不至于过小能够再次分割,但是总是分割大分区,使得不能装下稍微大的进程。

伙伴算法:将静态分区和动态分区法结合在一起,降低了内零头和外零头的浪费。该算法将内存分为2的幂次方,当第一次划分的时候根据分半的方法划分内存,将两个相邻的同大小的分区成为兄弟分区,当内存回收的时候可以讲兄弟分区合并,这样分区的大小就可以动态变化。

---------------------------------------------------------------------------------------------------------------------------------------------

地址重定位:静态重定位和动态重定位

静态重定位是指在进程装入内存阶段就将进程的逻辑地址转化为了物理地址,这种方法要求程序必须完整的一次性装入内存,且进程的位置不能发生改变,及时使用交换技术在换回是仍然要在原始的位置,所以一般交换技术采用动态重定位。

动态重定位是指在进程运行时,每次读取指令的时候进行动态地址转换,需要硬件的支持,称为地址转换器在cpu中。该过程实在执行期间完成的。

---------------------------------------------------------------------------------------------------------------------------------------------

覆盖技术是指大的程序无法一次性装入内存,可以在知道程序的架构的时候按模块进行覆盖,原则是不互相调用的同等级的模块可以相互覆盖内存区域。运用该方法的前提是明确知道程序的逻辑架构。覆盖区的长度由覆盖段的最大长度决定。

---------------------------------------------------------------------------------------------------------------------------------------------

交换技术是将进程的全部或者一部分暂时不用的换出内存缓解内存压力,一般交换技术用于不连续存储中,使用动态重定位,因为若使用静态重定位换出的部分在换入时必须换到原始的位置。

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM