计算机内存管理介绍( 三 )

  • 最坏适应算法申请作业100K,找到4号分区,分配完后3号分区起始地址变为180K+60K=240K,剩余空间为331K-100K=231K申请作业30K,此时被分配过的4号分区依然容量最大,于是还是找到4号分区,分配完后4号分区起始地址变为240+30K=250K,剩余空间为231K-30K=201K申请作业7K,此时被分配过的4号分区依然容量最大,找到4号分区,分配完后4号分区起始地址变为250+7K=257K,剩余空间为201K-7K=194K结论:总是挑选满足作业要求的最大的分区分配给作业 。这样使分给作业后剩下的空闲分区也较 大,可装下其它作业 。由于最大的空闲分区总是因首先分配而划分,当有大作业到来时,其存储空间的申请往往会得不到满足 。
  • 基于顺序搜索的分配算法实际上只适合小型的操作系统,大中型系统使用了是比较复杂的索引搜索的动态分配算法 。
    如何回收内存
    1. 回收分区上邻接一个空闲分区,合并后首地址为空闲分区的首地址,大小为二者之和 。
    2. 回收分区下邻接一个空闲分区,合并后首地址为回收分区的首地址,大小为二者之和 。
    3. 回收分区上下邻接空闲分区,合并后首地址为上空闲分区的首地址,大小为三者之和 。
    4. 回收分区不邻接空闲分区,这时在空闲分区表中新建一表项,并填写分区大小等信息 。
    用iPad画了一个简单的示意图如下:
    计算机内存管理介绍

    文章插图
     
    最后内存分配实际上是操作系统非常重要的一环,如果仅限于理论而不写代码实践则容易迷惘,很多具体的实现与都比较困难 。如上面的基于顺序搜索的最佳适应算法,比如几个分区的表示方法,都用到了数据结构和算法的知识 。如果能用C或者C++完成上述几个算法和操作的具体实现,相信一定会大有脾益的 。

    【计算机内存管理介绍】


    推荐阅读