内存分配算法实验报告
更新时间:2024-01-09 15:12:01 阅读量: 教育文库 文档下载
成 绩 评 定 表
学生姓名 专 业 班级学号 内存分配算法 计算机科学课程设计题目 与技术 评 语 组长签字: 成绩 日期
1
2015 年 12月 10 日 课程设计任务书
学 院 学生姓名 课程设计题目 实践教学要求与任务: 模拟分区内存管理的模式下的各种分配策略,根据输入的各进程的信息(进程名,需要内存大小,进入内存时间,退出内存时间,发生申请内存的时间,申请内存的大小等),输出各个时间段上系统中的内存分配情况(各个空闲区位置和大小,各个进程空间的位置和大小)。 任务:利用静态链表,模拟实现内存分配(分页,分区) 要求: 1. 设计数据结构,存储结构; 2. 在c兼容环境完成上述题目的代码编写与调试; 3. 程序运行及诶按交互性好; 4. 软件运行,给出测试数据。 信息学院 专 业 计算机科学与技术 班级学号 内存分配技术 工作计划与进度安排: 第14周:布置课程设计任务,查阅资料,分组设计,程序调试。 第15周:程序调试,编写课程设计报告,验收,答辩。 指导教师: 2015年11月 28日 专业负责人: 2015年11月 28日 学院教学副院长: 2015年11月 28日 2
目 录
一、题目概述(内容及要求) ............................... 4 二、功能分析 ............................ 错误!未定义书签。 三、设计 ................................................. 6 四、运行与测试 ........................................... 7 五、总结 ................................................ 17 参考文献 ................................................ 18
3
1.设计目的
1) 了解多道程序系统中,多个进程并发执行的内存资源分配; 2) 模拟可变分区内存储管理算法实现分区管理的最佳适应分配算法; 3) 通过实现最佳算法来进一步了解静态分区模式的优缺点;
4) 掌握最佳适应分配算法,深刻了解各进程在内存中的具体分配策略。
2.总体设计
4
3.关键技术
allocate(): 实现内存分配,并当中调用display(pbc),以及display(S)两个函数
显示内存分配完成后的空闲块链表和进程链表情况。
requireback():实现内存回收,在满足情况的条件下调动allocate()对用户社情的内
存块进行回收并在当中调用display(pbc),以及display(S)两个函数显示内存分配完成后的空闲块链表和进程链表情况。
callback(): 按内存回收时的四种情况对内存进行回收。
display(pbc): 对空闲块链表中的空闲快惊醒从小到大排序并显示空闲链情况。 display(S): 对进程链表中的进程进行从小到大排序并显示进程链情况。 main(): 创建并初始化空闲块链表和进程链链表,用户选择操作功能。
4.程序流程
图4-1
5
图4-2
5.主要源代码
#include
const int MAXJOB=100; //定义表最大记录数
typedef struct node{
int start; //空闲分区的起始地址 int length; //空闲分区的长度 char tag[20]; //分区信息是否已分配 }job;
job frees[MAXJOB]; //定义空闲区表 int free_quantity; //空闲区的个数
6
job occupys[MAXJOB];//定义已分配区表 int occupy_quantity; //已分配区的个数
//初始化函数 void initial() { int i;
for(i=0;i frees[i].start=-1; frees[i].length=0; strcpy(frees[i].tag,\ occupys[i].start=-1; occupys[i].length=0; strcpy(occupys[i].tag,\free_quantity=0; occupy_quantity=0; } //读数据函数 int readData() { FILE *fp; char fname[20]; cout< if((fp=fopen(fname,\读文件 cout< while(!feof(fp)) //文件结束 7 《 \ 《 { fscanf(fp,\ fscanf(fp,\ free_quantity++; } return 1; } return 0; } //sort选择——排序 void sort() { int i,j,p; for(i=0;i for(j=i+1;j frees[free_quantity]=frees[i]; frees[i]=frees[p]; frees[p]=frees[free_quantity]; } } } //显示函数 void view() { int i; cout< cout<<\起始地址 长度 状态\for(i=0;i 8 cout.setf(2); cout.width(12); cout< cout< cout< cout<<\起始地址 长度 占用作业名\for(i=0;i cout< cout< //最先适应分配算法 void earliest() { //空闲分区按地址递增的顺序排列 char job_name[20]; int job_length; int i,j,flag,t; cout< 9 flag=0; //分配成功与否信号 for(i=0;i cout< if(frees[i].length>=job_length) //从空闲分区表顺序查找,直到找到第一能满足其大小要求的空闲分区为止 { t=1; } i++; } i--; occupys[occupy_quantity].start=frees[i].start; //修改已分区的相关信息 strcpy(occupys[occupy_quantity].tag,job_name); occupys[occupy_quantity].length=job_length; occupy_quantity++; if(frees[i].length>job_length) { frees[i].start+=job_length; frees[i].length-=job_length; } else //刚好分配则空闲分区数减一 10 { for(j=i;j cout< //最优适应分配算法 void excellent() { //空闲分区按大小递增的顺序排列 char job_name[20]; int job_length; int i,j,flag,t; cout< for(i=0;i if(flag==0){ cout< if(frees[i].length>=job_length){ 11 t=1; } i++; } i--; for(j=0;j if((frees[j].length>=job_length)&&(frees[j].length occupys[occupy_quantity].start=frees[i].start; strcpy(occupys[occupy_quantity].tag,job_name); occupys[occupy_quantity].length=job_length; occupy_quantity++; if(frees[i].length>job_length){ frees[i].start+=job_length; frees[i].length-=job_length; } else{ for(j=i;j cout< //最坏适应算法 void worst() { //空闲分区按大小递减的顺序排列 char job_name[20]; int job_length; 12 int i,j,flag,t; cout< for(i=0;i if(flag==0) cout< if(frees[i].length>=job_length) t=1; i++;} i--; for(j=0;j if((frees[j].length>=job_length)&&(frees[j].length>frees[i].length)) i=j; } occupys[occupy_quantity].start=frees[i].start; strcpy(occupys[occupy_quantity].tag,job_name); occupys[occupy_quantity].length=job_length; occupy_quantity++; 13 if(frees[i].length>job_length) { frees[i].start+=job_length; frees[i].length-=job_length; } else { for(j=i;j frees[j]=frees[j+1]; } free_quantity--; cout< //撤消作业 void finished() { char job_name[20]; int i,j,flag,p=0; int start; int length; cout< flag=-1; for(i=0;i 14 flag=i; start=occupys[i].start; length=occupys[i].length; } } if(flag==-1){ cout<<\没有这个作业名\else { //加入空闲表 for(i=0;i if((frees[i].start+frees[i].length)==start)//上空 { if(((i+1) frees[i].length=frees[i].length+frees[i+1].length+length; for(j=i+1;j frees[i].length+=length; //上空且下不空 p=1; } } if(frees[i].start==(start+length)) { //下空 frees[i].start=start; frees[i].length+=length; p=1; } } //空闲中没有 if(p==0){ frees[free_quantity].start=start; 15 frees[free_quantity].length=length; free_quantity++; } //删除分配表中的该作业 for(i=flag;i void main() { int flag=0; int t=1; int chioce=0; initial(); flag=readData(); while(flag==1){ sort(); cout< cout<<\cout<<\主存储器空间的分配与回收模拟\cout<<\cout<<\首次适应算法申请空间\cout<<\最佳适应算法申请空间\cout<<\最坏适应算法申请空间\cout<<\撤消作业\ cout<<\显示空闲表和分配表 \cout<<\退出\ 16 cout< switch(chioce){ case 1: earliest(); break; case 2: excellent() ;break; case 3: worst() ;break; case 4: finished(); break; case 5: view(); break; case 0: flag=0; break; default: cout<<\选择错误!\} //文件 fname 6. 运行结果及结论 图6-1 经验总结:程序设计时,最好将不同的功能用不同的函数实现。在本程序中,就将排序动能 17 单独放在了显示函数中,这样在用最佳适应算法实现内存分配与回收时,就能只要调用该函数即可,二不必再考虑链表的排序 7.参考文献 《数据结构》(c语言版) 严蔚敏、吴伟良编著; [美]巴斯.计算机算法:《设计和分析引论》 朱洪等译; 《数据库系统基础》 姚诗斌编著; 18
正在阅读:
内存分配算法实验报告01-09
仿生可控粘附纳米界面材料07-08
经典广告文案10-12
论企业信息化的必要性与可行性09-24
初中学生的年终学期评语07-26
小学生经典美文朗诵11-21
财政知识竞赛参考题和答案07-03
混凝土结构与金刚砂耐磨楼地面一次成型的工艺 - 图文01-28
台湾魔幻冰凉巾的作用原理是什么?09-18
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 算法
- 分配
- 内存
- 实验
- 报告
- 2017-2022年中国救生器材市场深度调查及十三五未来趋势研究报告(报告)
- 皮亚杰的发展心理学理论
- 2009年仪器分析实验讲义修改版
- 2012-2013年高中物理联系实际问题分类精析 - 图文
- 城市交通发展现状及市场前景分析
- 小学教师师德师风承诺书
- 2018年人教版七年级语文下册《第三单元》综合复习测试
- 苏教版数学四年级上册第一单元试题 - Microsoft - Word - 文档 - (8)
- 11级第一次网测
- 改革强军大背景下士官实战化训练教学教材建设之我见-最新资料
- 十堰经济技术开发区第二批申报灵活就业社会保险补贴
- 关于开展向李林森同志学习活动的通知.doc2011.10.25
- 汽车后避震器项目可行性研究报告评审方案设计(2013年发改委标准案例范文)
- 山西省太原市2012届高三模拟试题(二)数学理扫描版 - 图文
- 镇治安巡逻队试题(含答案)
- 杨老师,湖南省慈利县第一中学
- 国通快递安全保障制度和措施
- 关于电视谈话类节目的品牌塑造-毕业论文
- 2017年汽车内外饰件发展现状及市场前景分析(目录)
- 二年级列式计算(140道题)