操作系统3-连续内存分配

nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial

CPU内存

CPU-L1cache-L2cache-memery-disk

逻辑地址空间

抽象、隔离、保护、共享、虚拟化(临时放入disk)

内存管理

程序重定向,分段,分页,虚拟内存,按需分叶虚拟内存

地址空间和地址生成

C程序用变量表示地址,汇编还是用符号,机器码就开始使用逻辑地址了,CPU的MMU中有一段区域来映射逻辑地址到物理地址

约束程序的内存

程序只可以访问他自己的内存,当他访问其他地方的时候,操作系统应该使用安全检测

内存碎片

外部碎片,是分配单元之间的内存碎片
内部碎片,已经分配给了应用程序,但是应用程序没法使用它

连续内存分配

程序启动的时候要分配,运行的时候要分配

第一匹配分配算法

一个一个找,第一个碰到的合法的就分出去,
需要按地址排序,分配的时候需要寻找合适的分区,还有看自由分区能否与相邻空闲分区合并
简单,容易产生更大的空闲块,
容易产生外碎片

最优分配算法

找差值最小的分区,分过去
按尺寸排序,分配需要查找,也要合并相邻空闲分区
避免分割大空间块,当大部分分配的是小尺寸的时候非常有效,
容易产生外部碎片,合并空闲分区慢,容易产生大量微小碎片

最差匹配分配

找最大的分区分过去
按尺寸排序,分配快,也要合并
分配中等尺寸有效
合并慢,外部碎片,破碎空间没有大空间了

压缩式碎片整理

挪动已经分配过的空间,
什么时候挪动?销量?

交换式碎片整理

和硬盘交换,使用虚拟内存的方法。
把哪个换出去?什么时候换?