没有合适的资源?快使用搜索试试~ 我知道了~
计算机操作系统内存标准管理系统可变分区存储管理方式的内存分配回收.doc
0 下载量 43 浏览量
2022-12-18
22:27:19
上传
评论
收藏 911KB DOC 举报
温馨提示
试读
27页
计算机操作系统内存标准管理系统可变分区存储管理方式的内存分配回收.doc
资源推荐
资源详情
资源评论
课程设计 2 可变分区存放管理方法内存分配回收
一、课程设计目标
深入了解采取可变分区存放管理方法内存分配回收实现。
二、预备知识
存放管理中可变分区管理方法。
三、小组组员
四、课程设计内容
编写程序完成可变分区存放管理方法内存分配回收。
具体包含:确定内存空间分配表;
采取最优适应算法完成内存空间分配和回收;
编写主函数对所做工作进行测试。
五、设计思绪:
整体思绪:
可变分区管理方法将内存除操作系统占用区域外空间看做一个大空闲区。看
成业要求装入内存时,依据作业需要内存空间大小 查询内存中各个空闲区,当
从内存空间中找到一个大于或等于该作业大小内存空闲区时,选择其中一个空闲
区,按作业需求量划出一个分区装人该作业,作业实施完后,其所占内存分区被
收回,成为一个空闲区。假如该空闲区相邻分区也是空闲区,则需要将相邻空闲
区合并成一个空闲区。
设计所才用算法:
采取最优适应算法,每次为作业分配内存时,总是把既能满足要求、又是最
小空闲分区分配给作业。 但最优适应算法轻易出现找到一个分区可能只比作业
所需求长度略大一点情行,这时,空闲区分割后剩下空闲区就很小以致极难再使
用,降低了内存使用率。为处理此问题,设定一个限值 minsize,假如空闲区大
小减去作业需求长度得到值小于等于 minsize,不再将空闲区分成己分分区和空
闲区两部分,而是将整个空闲区全部分配给作业。
内存分配和回收所使用结构体:
为便于对内存分配和回收,建立两张表统计内存使用情况。一张为统计作业
占用分区“内存分配表”,内容包含分区起始地址、长度、作业名/标志(为 0 时
作为标志位表示空栏目);一张为统计空闲区“空闲分区表”,内容包含分区起始
地址、长度、标志(0 表空栏目,1 表未分配)。两张表全部采取次序表形式。
相关分配留下内存小碎片问题:
当要装入一个作业时,从“空闲分区表”中查找标志为“1”(未分配)且满
足作业所需内存大小最小空闲区,若空闲区大小和作业所需大小差值小于或等于
minsize,把该分区全部分配给作业,并把该空闲区标志改为“0”(空栏目)。同
时,在已分配区表中找到一个标志为“0”栏目登记新装人作业所占用分区起始
地址,长度和作业名。若空闲区大小和作业所需大小差值大于 minsize。则把空
闲区分成两部分,一部分用来装入作业,另外一部分仍为空闲区。这时只要修改
原空闲区长度,且把新装人作业登记到已分配区表中。
内存回收:
在可变分区方法下回收内存空间时,先检验是否有和归还区相邻空闲区(上
邻空闲区,下邻空闲区)。若有,则将它们合件成一个空闲区。程序实现时,首
先将要释放作业在“内存分配表”中统计项标志改为“0”(空栏目),然后检验
“空闲区表”中标志为‘1’(未分配)栏目,查找是否有相邻空闲区,若有,将
之合并,并修改空闲区起始地址和长度。
六:数据结构
(1)已分配表定义:
struct
{float address; //已分分区起始地址
float length; //已分分区长度,单位为字节
int flag; //已分配区表登记栏标志,"0"表示空栏目,试验中只
支持一个字符作业名
}used_table[n]; //已分配区表
(2)空闲分区表定义:
struct
{float address; //空闲区起始地址
float length; //空闲区长度,单位为字节
int flag; //空闲区表登记栏标志,用"0"表示空栏目,用"1"
表示未分配
}free_table[m]; //空闲区表
(3)全局变量
float minsize=5;
#define n 10 //假定系统许可最大作业数量为 n
#define m 10 //假定系统许可空闲区表最大为 m
七、关键算法:
//最优分配算法实现动态分区
int distribute(int process_name, float need_length)
{
int i, k=-1; //k 用于定位在空闲表中选择未分配栏
float ads, len;
int count=0;
i=0;
//关键查找条件,找到最优空闲区
while(i<=m-1) //循环找到最好空闲分区
{
if(free_table[i].flag==1 && need_length
<=free_table[i].length)
{
count++;
if(count==1||free_table[i].length <
free_table[k].length)
k=i;
}
i=i+1;
}
if(k!=-1)
{
if((free_table[k].length-need_length)<=minsize) //整个分配
{
free_table[k].flag=0;
ads=free_table[k].address;
len=free_table[k].length;
}
else
{ //切割空闲区
ads=free_table[k].address;
len=need_length;
free_table[k].address+=need_length;
free_table[k].length-=need_length;
}
i=0;
//循环寻求内存分配表中标志为空栏目标项
while(used_table[i].flag!=0)
{i=i+1;}
if(i<=n-1) //找到,在已分配区表中登记一个表项
{
used_table[i].address=ads;
used_table[i].length=len;
used_table[i].flag=process_name;
count1++;
}
else //已分配区表长度不足
{
if(free_table[k].flag == 0) //将已做整个分配撤销
{
free_table[k].flag=1;
free_table[k].address=ads;
free_table[k].length=len;
}
else //将已做切割分配撤销
{
free_table[k].address=ads;
free_table[k].length+=len;
}
剩余26页未读,继续阅读
资源评论
黑色的迷迭香
- 粉丝: 701
- 资源: 4万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功