操作系统3-连续内存分配
CPU内存
CPU-L1cache-L2cache-memery-disk
逻辑地址空间
抽象、隔离、保护、共享、虚拟化(临时放入disk)
内存管理
程序重定向,分段,分页,虚拟内存,按需分叶虚拟内存
地址空间和地址生成
C程序用变量表示地址,汇编还是用符号,机器码就开始使用逻辑地址了,CPU的MMU中有一段区域来映射逻辑地址到物理地址
约束程序的内存
程序只可以访问他自己的内存,当他访问其他地方的时候,操作系统应该使用安全检测
内存碎片
外部碎片,是分配单元之间的内存碎片
内部碎片,已经分配给了应用程序,但是应用程序没法使用它
连续内存分配
程序启动的时候要分配,运行的时候要分配
第一匹配分配算法
一个一个找,第一个碰到的合法的就分出去,
需要按地址排序,分配的时候需要寻找合适的分区,还有看自由分区能否与相邻空闲分区合并
简单,容易产生更大的空闲块,
容易产生外碎片
最优分配算法
找差值最小的分区,分过去
按尺寸排序,分配需要查找,也要合并相邻空闲分区
避免分割大空间块,当大部分分配的是小尺寸的时候非常有效,
容易产生外部碎片,合并空闲分区慢,容易产生大量微小碎片
最差匹配分配
找最大的分区分过去
按尺寸排序,分配快,也要合并
分配中等尺寸有效
合并慢,外部碎片,破碎空间没有大空间了
压缩式碎片整理
挪动已经分配过的空间,
什么时候挪动?销量?
交换式碎片整理
和硬盘交换,使用虚拟内存的方法。
把哪个换出去?什么时候换?