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

  • 姓名:林顺达
  • 学号:201821121022
  • 班级:计算1811

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

 

 创建结构体链表allocated_block,并且其中有参数(pid 进程ID,size 大小,start_addr 起始地址,process_name 进程名,*next 指向下一个块)

 当为进程分配内存空间时,将对应信息加入链表中,反之当为进程释放内存空间时,则将对应链表结点删除

 定义指向链表的首指针

2. 记录空闲分区

 

创建结构体链表free_block_type,并且其中有参数(size 大小,start_addr 起始地址,*next 指向下一个块)

当选出一块用于分配内存空间时,可能会剩余多个不同大小的块,此时将这些块加入该链表中

当内存释放时,也要将该块加入链表中

 

定义指向链表的头指针

3. 内存分配算法

 首次适配算法:

分配内存模块:

 为进程分配内存:

 地址冒泡排序算法

首次适应算法从空闲分区表的第一个起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区

4. 内存释放算法

 找到对应链表节点:

 

 始放链表节点:

将节点始放,并且将新始放的空间插入链表,再通过冒泡排序算法重新排序,最后将相邻的空闲块合并

5. 运行结果

 为进程3分配了从0开始大小为51的内存单元,空闲分区地址为从51开始大小973的空间

 为进程2分配了从51开始大小为90的内存单元,空闲分区地址为从141开始大小883的空间

 为进程1分配了从141开始大小为99的内存单元,空闲分区地址为从240开始大小784的空间

 释放了进程3从0开始大小为51的内存单元,空闲分区地址为从0开始大小51的空间与从240开始大小784的空间

剩余结果:

 

 

 

 

posted @ 2020-05-16 12:30  丶Lin  阅读(256)  评论(0编辑  收藏  举报