操作系统第5次实验报告:内存管理
- 姓名:杨富宏
- 学号:201821121017
- 班级:计算1811
1. 记录内存空间使用情况
根据课堂上的实验报告,创建一个参数为(pid 进程id,size 大小,start_addr 起始地址,process_name 进程名,*next下一个块)的结构体allocated_block,用来记录内存空间的使用情况。
2. 记录空闲分区
创建一个(size 大小,start_addr 起始地址,*next 指向下一个块)的结构体链表free_block_type,来记录空闲分区。并且设置头指针为空,指向表头,再使用后面的算法进行排序,从低地址开始进行查找。
3. 内存分配算法
这边我用到了首次适应算法,首次适配算法是从最低地址的空闲分区开始找起,找到合适的便进行分配。内存空间按起始地址从小到大排序。
优点是查找速度快,而且比较便捷。
缺点是低地址会留下较多的内存碎片,高地址则会存留大块空闲分区,使总的数据比较冗余。
首次适应算法:
分配内存模块:
4. 内存释放算法
释放链表节点:
释放进程所占用内存:
释放进程:
5. 运行结果
进程1分配了一个初始地址为0,大小为92的内存空间,空闲分区地址是从92开始大小为932的空间。
进程2分配了一个初始地址为92,大小为43的内存空间,空闲分区地址是从135开始大小为889的空间。
进程3分配了一个初始地址为135,大小为61的内存空间,空闲分区地址是从169开始大小为828的空间。
参考文献:https://github.com/City-Zero/LinuxTest/blob/master/OSex/mem_manager/mm.c