操作系统第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+ 阅读(584) 评论(0) 编辑 收藏 举报