动态可重定位分区内存管理

目录

1.实验目的 

2.实验内容 

4.实验环境

5.实验设计与实现

5.1实验设计

5.1.2 FF首次适配设计

5.1.3 BF最佳适配设计

6.实验结果

6.1 FF首次适配

6.2 BF最佳适配

7. 源代码

7.1 FF首次适配

7.2 BF最佳适配


1.实验目的 

探索、理解并掌握动态可重定位分区内存管理的设计原理和实现机制。

2.实验内容 

分析、设计与模拟实现动态可重定位分区内存管理机制(采用 C 语言),主要包括物理内存空间布局初始化及进程内存申请分配、内存回收等基本功能操作,尝试对一定大小的用户内存空间进行动态可重定位分区方式模拟管理,并给以测试验证。

3.实验要求 

动态可重定位分区模拟内存管理机制功能设计要求如下:

1)物理内存空间布局初始化,具体可设定物理内存空间为 512MB,其中操作系统占用低址的 128MB 不参与内存分配,而高址的 384MB 为用户区可供系统分配;

2)进程申请内存分配操作,支持至少两种分配策略和算法,支持运行时的空闲分区拼接操作,且内存分配的基本单位为 1KB(也即分区内部零头不足 1KB 时不再分割而直接把整个分区分配给相应进程),当空闲分区总量小于申请大小时,应挂起有关进程直至空闲内存可以满足其要求为止;

3)进程内存回收操作,正确处理回收分区与空闲分区的各种邻接情况及合并问题;

4)开展完备的功能测试验证,运行结果应以时刻点为序给出对应时刻的事件类型(进程创建+内存分配事件、进程创建+内存拼接分配事件、进程挂起事件、进程激活+内存分配事件、进程撤销+内存回收事件)及空闲分区表(包括各空闲分区起始地址和大小)、进程占用内存说明表(包括各运行进程占用内存起始地址和大小),测试用例设计也即进程创建事件(包括进程创建时刻点、进程标识符、进程运行时间长短和申请内存空间大小)的模拟发生序列(事件数不少于 50 个)可以静态事先设定或动态随机模拟生成;

5)统计分析不同内存分配策略的性能指标,譬如内存空间平均利用率(指统计时间段内,已分配内存占总可分配内存的比率加权平均值)和平均分配查找分区比较次数等。关于内存空间平均利用率的计算方法。

4.实验环境

开发环境

Visual Studio

运行环境

windows

测试环境

终端(笔记本)

5.实验设计与实现

5.1实验设计

5.1.1 总体设计

(1)程序总体流程设计如下:

开始:程序的开始。

初始化内存:初始化内存布局,设置操作系统保留内存和用户区总内存。

设置随机种子:使用当前时间作为随机种子,以确保每次运行程序时操作的随机性。

模拟50轮操作:循环50次,模拟不同的内存操作。

操作选择:随机选择一个操作(0-3),分别对应分配内存、撤销进程、挂起进程和激活进程。分配内存:根据随机生成的大小和持续时间创建新的内存分配。

撤销进程:从进程列表中选择一个进程并释放其内存。

挂起进程:选择一个进程并将其状态设置为挂起。

激活进程:选择一个进程并将其状态设置为激活。

更新进程状态:更新所有激活进程的持续时间。

检查完成的进程:检查是否有进程完成,如果有,则释放其内存。

是否还有进程:检查是否还有进程需要处理,如果有,则继续循环;如果没有,则结束程序。

  1. 数据类型设计
  1. 空闲分区

start: int 类型,表示空闲分区的起始地址。

size: int 类型,表示空闲分区的大小。

next: 指向 FreePartition 类型的指针,用于链接到下一个空闲分区。

// 空闲分区结构
typedef struct FreePartition {
    int start;                  // 起始地址
    int size;                   // 分区大小
    struct FreePartition* next; // 指向下一个空闲分区
} FreePartition;

2. 进程

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值