存储管理—动态异长存储资源分配算法
更新时间:2023-12-17 20:01:01 阅读量: 教育文库 文档下载
- 存储管理动态重定位推荐度:
- 相关推荐
存储管理—动态异长存储资源分配算法
一、设计目的
理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解各种 存储分配算法的优点和缺点。
二、设计内容
(1)分析UNIX最先适应(First Fit,FF)存储分配算法,即map数据结构、存储分配函数malloc()和存储释放函数mfree(),找出与算法有关的成分。 (2) 修改上述与算法有关的成分,使其分别体现BF(Best Fit,最佳适应) 分配原则和WF(Worst Fit,最环适应)分配原则。
三、设计准备(理论、技术)
1.最先适应(First Fit,FF)算法
指对于存储申请命令,选取满足申请长度要求且起始地址最小的空闲区域。在实现时,可以将系统中所有的空闲区域按照起始地址由小到大的次序依次记录于空闲区域表中。当进程申请存储空间时,系统由表的头部开始查找,取满足要求的第一个表目。如果表目所对应的区域长度恰好与申请的区域长度相同,则将该区域全部分配给申请者,否则将该区域分割为两部分,一部分的长度与申请长度相同,将其分配给申请者;另一部分的长度为原长度与分配长度之差,将其记录在空闲区域表中
2.最佳适应(Best Fit,BF)算法
是为了克服最先适应算法缺点提出的。它在分配时取满足申请要求且长度最小的空间区域。在实现时,可以将系统中所有的空闲区域按照长度由小到大的次序依次记录于空闲区域表中。当进程申请存储空间时,系统由表的头部开始查找,取满足要求的第一个表目。
3.最坏适应(Worst Fit,WF)算法
是为了克服最佳适应算法的缺点而提出的。它在分配时取满足申请要求且长度最大的空闲区域。在实现时,可以将系统中所有的空闲区域按照长度由小到大的次序依次记录于空闲区域表中。当进程申请存储空间时,取第一个表目。 4.程序设计技术分析
按题目题目首先对存储分配表进行初始化;然后对用户输入的请求和释放,按照动态更新存储分配表,并将每次更新之后的存储分配表在屏幕上显示出来
动态分区分配需要解决三个问题:A.对于请求表中的要求内存长度,从可用表或自由链寻找出合适的空闲区域分配程序。B.分配空闲区后更新自由链或可用表。C.进程或作业释放内存资源时,合并相邻空闲区并刷新可用表。
四、设计过程(设计思想、代码实现)
1.设计思想
(1)分析最先适应算法,定义map数据结构;设置整形变量存储存储资源表信息 struct map{ int m_addr; int m_size;};
(2) 分析UNIX最先适应存储分配算法编写最佳适应算法BF_malloc();遍历链表,取满足申请要求且长度最小的空间区域 for(bpp=bp;bpp->m_size;bpp++){//最佳适应 if(bpp->m_size>=size&&bpp->m_sizem_addr; s=bpp->m_size; bp=bpp; } }
(3)根据最好适应算法编写最坏适应算法WF_malloc(),主要代码如下: for(bpp=bp;bpp->m_size;bpp++){//最坏适应 if(bpp->m_size>s){ a=bpp->m_addr; s=bpp->size; bp=bpp; } }
(4)存储释放函数mfree();被释放的存储区域
与前合并条件:if(bp>mp&&(bp-1)->m_addr+(bp-1)->m_size==a) 与后合并条件:if(a+size==bp->m_addr&&bp->m_size) 无合并条件:if(size)
(5)showMap()方法显示存储资源表; (6)存储分配表进行初始化方法init() 2.代码实现
#ifdef HAVE_CONFIG_H
#include
#include
struct map//存储资源表结构 {
int m_addr; int m_size; };
struct map map[MAPSIZE];//存储资源表 //BF存储分配函数
int BF_malloc(struct map *mp,int size){ register int a,s;
register struct map *bp,*bpp; for(bp=mp;bp->m_size;bp++){ if(bp->m_size>=size){ a=bp->m_addr;
s=bp->m_size;
for(bpp=bp;bpp->m_size;bpp++){//最佳适应 if(bpp->m_size>=size&&bpp->m_sizem_addr; s=bpp->m_size; bp=bpp; } }
bp->m_addr+=size;
if((bp->m_size-==size)==0) do{
bp++;
(bp-1)->m_addr=bp->m_addr; }
while((bp-1)->m_size=bp->m_size) return(a); } }
return(1); }
//WF存储分配函数
int WF_malloc(struct map *mp,int size){ register int a,s;
register struct map *bp,*bpp; for(bp=mp;bp->m_size;bp++){ if(bp->m_size>=size){ a=bp->m_addr; s=bp->m_size;
for(bpp=bp;bpp->m_size;bpp++){//最坏适应 if(bpp->m_size>s){ a=bpp->m_addr; s=bpp->size; bp=bpp; } }
bp->m_addr+=size;
if((bp->size-==size)==0) do{
bp++;
(bp-1)->m_addr=bp->m_addr; }
while((bp-1)->m_size=bp->m_size); return(a); }
}
return(-1); }
//存储释放函数
void mfree(struct map *mp,int aa,int size){ register struct map *bp; register int t; register int a; a=aa;
for(bp=mp;bp->m_addr<=a&&bp->m_size!0;bp++)
if(bp>mp&&(bp-1)->m_addr+(bp-1)->m_size==a){//与前合并 (bp-1)->m_size+=size;
(bp-1)->m_size+=bp->m_size; while(bp->m-size){ bp++;
(bp-1)->m_addr=bp->m_addr; (bp-1)->m_size=bp->size; } }
else{
if(a+size==bp->m_addr&&bp->m_size){//与后合并 bp->m_addr-=size; bp->m_size+=size; }
else if(size) do{//无合并
t=bp->m_addr; bp->m_addr=a; a=t;
t=bp->m_size; bp->m_size=size; bp++; }
while(size=t); } }
void init(){//初始化该链表的指针 struct map *bp; int addr,size; int i=0; bp=map;
cout<<\ cin>>addr>>size; bp->m_addr=addr;
bp->m_size=size;
(++bp)->m_size=0;//表尾 }
void showMap(){//显示存储资源表 int i=0;
struct map *bp; bp=map;
cout<<\ while(bp->m_size!=0){
cout<<\ bp++; }
printf(\}
void main(){
int a,s;//地址,表长 int c;//选择算法 int i;//选择需求 init();
cout<<\ cin>>c; do{
showMap();
cout<<\exit:\ cin>>i; switch(i){ case 1:
cout<<\ cin>>s; if(c=='b')
a=BF_malloc(map,s); else
a=WF_malloc(map,s); if(a==-1)
cout<<\ else
cout<<\ break; case 2:
cout<<\ cin>>a>>s;
mfree(map,a,s); break;
}
case 0:
exit(0); } }
while(1);
五、设计结果并分析
根据提示输入存储资源表地址和表长;测试数据:0,100;
选择适应算法:最好适应算法输入b,最坏适应算法输入w;测试数据:b 初始化存储资源表;显示地址和表长<0 100> 选择要求1.请求,2.释放,0.退出;测试数据:1; 输入表长;测试数据:20;
分配存储器地址,长度;测试数据:0,20;显示更新之后的存储分配表 继续选择要求;测试数据:1; 输入表长;测试数据:15;
分配存储器地址,长度;测试数据:20,15;显示更新之后的存储分配表 如图所示:
继续选择要求;测试数据:2;
输入地址和表长;测试数据16,10;显示更新之后的存储分配表 继续选择要求;测试数据:2;
输入地址和表长;测试数据27,5;显示更新之后的存储分配表 如图所示:
六、系统的结构、原理框图和模块等的详细说明
1.主流程图
2.适应算法流程图
七、用户使用说明书和参考资料
1.使用说明书
根据提示信息输入需求,系统调用函数,显示存储资源表分配情况。 输入存储资源表地址和表长;
选择适应算法:最好适应算法输入b,最坏适应算法输入w; 初始化存储资源表;
选择要求1.请求,2.释放,0.退出; 2.参考资料
《计算机操作系统教程》左万历著,高等教育出版社出版。
正在阅读:
存储管理—动态异长存储资源分配算法12-17
iexplore.exe是什么?02-09
驾照年审授权委托书09-04
中国人民解放军各集团军编制战斗序列大全05-02
五年级下册SCRATCH全套教案10-01
我最喜欢的一句诗作文450字07-14
丰田A43D自动变速器原理05-14
虹口四川北路17街坊地块简介 - 图文11-26
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 存储
- 资源分配
- 算法
- 动态
- 管理
- 常用2500字练字模版
- 二年级上册《假如》教案
- 2019年高考化学模拟试卷(全国通用) 综合演练(1) - 图文
- 六年级上册语文第三单元知识点整理(人教版)
- 湖北省山区特色农业发展现状及比较优势分析
- 2013年班主任工作总结
- 浙江省杭州学军中学2012届高三上学期第二次月考试题文科
- 小区智能化系统设计方案 - 图文
- 社保网上操作手册
- 景观设计、景观施工全过程管理
- 二年级语文下册 第一组找春天教学建议 新人教版
- 报童问题
- 中国短程弹道导弹和远程火箭炮发展的前瞻和回顾 - 图文
- 广东计算机协会20100810122454447
- QA抽检不良坏机处理流程
- 数据库概论实验报告
- 答案有机试题1 - 图文
- 高三I部某班教室布置设计方案 - 图文
- 一人有限责任公司的特别规定--注册会计师考试辅导《经济法》第四章讲义6
- 黑龙江省宁安市东京城林业局第三中学高中语文 第1课 荷塘月色学案2 新人教版必修2