内存管理模拟实验之实现一个简单的固定(可变)分区存储管理系统

一个简单的固定(可变)分区存储管理系统

实验内容

(1)建立相关的数据结构,作业控制块、已分配分区及未分配分区

(2)实现一个分区分配算法,如最先适应算法、最优或最坏适应分配算法

(3)实现一个分区回收算法

(4)给定一个作业/进程,选择一个分配或回收算法,实现分区存储的模拟管理

实验步骤

首先,初始化函数initial()将分区表初始化并创建空闲分区列表,空闲区第一块的长度是30,以后的每个块长度比前一个的长度长20

frees[0].length=30

第二块的长度比第一块长20,第三块比第二块长20,以此类推。

frees[i].length=frees[i-1].length+20;

下一块空闲区的首地址是上一块空闲区的首地址与上一块空闲区长度的和。frees[i].front=frees[i-1].front+frees[i-1].length;

分配区的首地址和长度都初始化为零occupys[i].front=0;occupys[i].length=0;

显示函数show()是显示当前的空闲分区表和当前的已分配表的具体类容,分区的有起始地址、长度以及状态,利用for语句循环输出。有一定的格式,使得输出比较美观好看。

assign()函数是运用首次适应分配算法进行分区,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则此次内存分配失败,返回。这个算法倾向于优先利用内存中低址部分被的空闲分区,从而保留了高址部分的的大空闲区。着给为以后到达的大作业分配大的内存空间创造了条件。它的缺点是低地址部分不断被划分,会留下很多难以利用的、很小的空闲分区,而每次查找又都是从低址部分开始,这样无疑会增加查找可用空闲分区的开销。

分配内存,从空闲的分区表中找到所需大小的分区。设请求的分区的大小为job_length,表中每个空闲分区的大小可表示为free[i].length。如果frees[i].length>=job_length,即空闲空间I的长度大于等于作业的长度将空闲标志位设置为1,如果不满足这个条件则输出:“对不起,当前没有满足你申请长度的空闲内存,请稍后再试!”。如果frees[i].length>=job_length空闲区空间I的长度不大于作业长度,I的值加</

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于可变分区存储管理系统模拟的课程设计题目,需要实现一个基于可变分区内存管理系统,支持进程的创建、销毁和内存分配等操作。 以下是一些步骤和思路,供参考: 1. 确定数据结构:在模拟可变分区存储管理系统时,需要使用一些数据结构来表示分区的状态和进程的信息。一般来说,可以使用链表、数组等数据结构来实现。 2. 实现内存分配算法:可变分区存储管理系统支持多种内存分配算法,如循环首次适应算法、最坏适应算法、最佳适应算法等。在实现内存分配算法时,需要遍历空闲分区链表,找到符合要求的分区进行分配。如果找不到符合要求的分区,则需要进行内存碎片整理。 3. 实现进程管理功能:可变分区存储管理系统需要支持进程的创建、销毁和内存分配等操作。在实现进程管理功能时,需要使用数据结构来保存进程的信息,并实现进程的创建、销毁和内存分配等操作。 4. 实现内存回收算法:在进程退出时,需要将其占用的分区标记为空闲状态。对于无拼接算法,可以直接将该分区插入空闲分区链表中,并更新分区状态。如果相邻的空闲分区可以合并,也需要进行合并。 5. 进行测试和优化:在实现完毕后,需要进行测试和优化。可以创建一些测试用例,模拟不同的进程请求和退出,测试系统的稳定性和性能。如果遇到问题,可以对代码进行优化或者调试。 以上是一个简单可变分区存储管理系统模拟的课程设计思路,具体实现时需要根据具体要求进行调整和完善。希望能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值