操作系统-内存分配Ⅰ

操作系统的任务

操作系统-内存分配Ⅰ

地址空间

  • 物理地址空间
  • 逻辑地址空间(一维线性)

逻辑地址的生成

操作系统-内存分配Ⅰ

  1. 经过编译、汇编、链接,会得到一个.exe文件,这个文件地址从零开始
  2. 在运行时,需要把exe从硬盘加载到主存从,地址会增加特定的偏移量

整个这个过程,不需要操作系统的干预

转换到物理地址

操作系统-内存分配Ⅰ

  1. CPU拿到刚才的指令,里面有线性地址
  2. 在MMU中把线性地址转换为物理地址
    操作系统的任务就是提前建立好映射关系,快速地把线性地址转换为物理地址。

同时,操作系统还会保证程序只能访问一小段的内存空间,不能访问全部的内存空间(地址安全检测)
操作系统-内存分配Ⅰ

内存分配

内存碎片问题

外碎片

应用程序之间

内碎片

分配给应用程序,没法使用

内存分配时间

  1. 把程序从磁盘加载到主存
  2. 应用程序 运行时要访问数据,也需要操作系统分配

内存分配算法

首次适配(first fit)

操作系统-内存分配Ⅰ
回收时可能需要合并

优点

  1. 简单
  2. 容易产生更大空闲块

缺点
外碎片

最优适配(best fit)

分配最合适那一个
操作系统-内存分配Ⅰ
优点

  1. 小内存分配有效
  2. 简单

缺点

  1. 空间拆得细,外碎片
  2. 重分配慢
  3. 容易产生很多没用的微小碎片

最差分配(worst fit)

操作系统-内存分配Ⅰ
把大块变成小块,避免大量琐碎碎片

优点

  1. 中等尺寸效果最好

缺点

  1. 重分配慢
  2. 外碎片
  3. 破坏大碎块,以致大分区没法分区

这些算法,太简单,不能动态处理大大小大小小块

Compaction算法(压缩算法)(软件实现)

操作系统-内存分配Ⅰ
五个空闲块,放到一起

什么时候重定位??
不能正在运行时,得在程序停止时
有多大开销??
频繁这样做,开销挺大

swap(换入换出)

操作系统-内存分配Ⅰ
问题:
什么时候换??
选谁换??

需要优化