¶操作系统的任务
¶地址空间
- 物理地址空间
- 逻辑地址空间(一维线性)
¶逻辑地址的生成
- 经过编译、汇编、链接,会得到一个.exe文件,这个文件地址从零开始
- 在运行时,需要把exe从硬盘加载到主存从,地址会增加特定的偏移量
整个这个过程,不需要操作系统的干预
¶转换到物理地址
- CPU拿到刚才的指令,里面有线性地址
- 在MMU中把线性地址转换为物理地址
操作系统的任务就是提前建立好映射关系,快速地把线性地址转换为物理地址。
同时,操作系统还会保证程序只能访问一小段的内存空间,不能访问全部的内存空间(地址安全检测)
¶内存分配
¶内存碎片问题
¶外碎片
应用程序之间
¶内碎片
分配给应用程序,没法使用
¶内存分配时间
- 把程序从磁盘加载到主存
- 应用程序 运行时要访问数据,也需要操作系统分配
¶内存分配算法
¶首次适配(first fit)
回收时可能需要合并
优点:
- 简单
- 容易产生更大空闲块
缺点:
外碎片
¶最优适配(best fit)
分配最合适那一个
优点
- 小内存分配有效
- 简单
缺点
- 空间拆得细,外碎片
- 重分配慢
- 容易产生很多没用的微小碎片
¶最差分配(worst fit)
把大块变成小块,避免大量琐碎碎片
优点
- 中等尺寸效果最好
缺点
- 重分配慢
- 外碎片
- 破坏大碎块,以致大分区没法分区
这些算法,太简单,不能动态处理大大小大小小块
¶Compaction算法(压缩算法)(软件实现)
五个空闲块,放到一起
什么时候重定位??
不能正在运行时,得在程序停止时
有多大开销??
频繁这样做,开销挺大
¶swap(换入换出)
问题:
什么时候换??
选谁换??
需要优化