一、内存管理方案
1、分区:固定分区、可变分区
固定分区--->内存分为若干分区,每个分区大小可不同但固定不变,而且只能装载一个进程,容易产生内部碎片
可变分区--->根据进程需要分割内存并分配,剩余部分成为新的空闲区,容易产生外部碎片【只有外部碎片才可以碎片整理】
碎片问题:碎片:很小的,不易利用的空闲区,导致内存利用率下降
解决方案:紧缩技术(memory compaction)
在内存移动程序,将所有小的空闲区合并为较大的空闲区
又称:压缩技术、紧致技术、搬家技术
紧缩时要考虑的问题:系统开销,移动时机
2、页式存储管理方案
用户进程地址空间被划分为大小相等的部分,称为页(page)或页面,从0开始编号
内存分配规则以页为单位,按进程需要的页数分配,逻辑上相邻的页,物理上不一定相邻
页式存储存在的问题:会造成最后一页的部分空间浪费,即产生内碎片
3、段式存储管理方案
与页式存储相似,只不过内存的划分是不等长的,用空闲区表和已分配表管理内存分配
4、伙伴系统 BUDDY SYSTEM
一种经典的内存分配方案,主要思想:将内存按2的幂进行划分,组成若干空闲块链表;查找该链表找到能满足进程需求的最佳匹配块,Linux底层内存管理采用,一种特殊的分离适配算法
5、虚拟内存 + 交换分区
地址转换的过称为,逻辑地址先拿到段号,去段表查到段号所对应的页表起始地址,再通过页号查页表所在的页,然后把页内地址加到页的起始地址上得到真实的物理地址
虚拟内存: 虚拟内存技术
虚拟地址空间 :是一块数据区域,虚假的内存地址空间
虚拟地址: 虚拟地址是虚拟地址空间上的一个值
逻辑地址:指由程序产生的段内偏移地址。逻辑地址与虚拟地址二者之间没有明确的界限。
线性地址:指虚拟地址到物理地址变换的中间层,是处理器可寻址的内存空间(称为线性地址空间)