操作系统第5次实验报告:内存管理

1. 个人信息

  • 姓名 郑楚杭
  • 学号 201821121009
  • 班级 计算1811

2. 记录内存空间使用情况

参考内存管理实验ppt定义结构体allocated_block,表示每个进程分配到的内存块描述,包括进程标识符、进程大小等,

定义一个首指针allocated_block_head并置为null,当为进程分配内存空间时,就将成功分配到内存空间的进程块节点

添加到链表中。当释放进程内存时,就将成功释放的进程块节点从链表中删除。

 

3. 记录空闲分区

参考内存管理实验ppt定义结构体free_block_type描述每一个空闲块的数据结构,包括空闲块大小、空闲块起始地址

等,定义一个指针free block并置为null指向链表表头,当对内存空间初始化后整个内存空间都是空闲分区。由于我使

用到的是最佳适应算法,为适应此算法,空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由

分区分配。

   

 

4. 内存分配算法

在这里我使用了最佳适应算法,原理是从全部空闲区中找出能满足作业要求且大小最小的空闲分区。

若bf!=null进入循环,如果ab指向链表结点内存块大小刚好与所请求的大小相等,这种是最佳适应

算法最好的情况。那么把这个内存块的地址储存起来,在链表中删除这个结点,把这个地址返回。

如果链表结点表示的空闲内存块大小比需要的大小大,但是比目前找到最小的空闲内存块还要小,则

通过内存紧缩技术给新进程分配内存空间。

    

 

 

5. 内存释放算法

内存的释放涉及到进程终止,即删除进程,归还分配的存储空间,并删除描述该进程内存分配的节点,还涉及到如何

更新内存空闲分区表,手先将释放的结点插入到空闲分区尾部,然后对空闲链表按照地址有序排列,有序排列以后再

合并相邻的空闲分区,最后将空闲链表重新按照最佳适配算法排序。

 

 

6. 运行结果

编译运行程序:

 运行结果:

 对程序运行结果进行解释:

第一个操作中,表示为名为process-03的进程,start_addr(地址)从0开始分配了size为52的内存

剩余的地址容量为从52开始到972的区域;

第二个操作中,表示为名为process-02的进程,start_addr(地址)从52开始分配了size为71的内存

剩余的地址容量为从123开始到901的区域。

posted on 2020-05-15 13:13  EzforNiko+  阅读(570)  评论(0编辑  收藏  举报

导航