




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文档状态文档状态 Document status 发布版发布版 XXXXXXXXXX 发布日期发布日期 Release date 2017-3-30 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A01 (12) DZ-2013-5 实验报告实验报告 操作系统操作系统 可变分区存储管理方式的内存分配回收可变分区存储管理方式的内存分配回收 班级:XXXXXXXXXXXX 学号:XXXXXXXXXXXX 姓名:XXXXXX 日期:XXXX.XX.XX 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A02 (12) 版本历史 Revisions History 版 本 号 Version Number 修改项目 To modify the project 修订者 Redactor 日期 Date 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A03 (12) 目录目录 1引言.4 1.1实验目的.4 1.2参考文档.4 2可变分区存储管理.5 2.1实验原理分析.5 2.2设计思路.5 2.3源程序 .6 2.4重要结构体说明.10 2.5重要变量说明.10 2.6结果.11 2.7测试方法对结果的分析 .11 2.8接口.12 2.8.1接口设计说明.12 2.9任务设计.12 2.9.1流程图 .12 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A04 (12) 1引言引言 1.1实验实验目的目的 通过首次适应算法、最佳适应算法和最坏适应算法实现主存空间的分配, 可以使开发人 员更好地理解存储分配算法。 1.2参考参考文档文档 1. 操作系统 2.3.1 节 空闲存储区表 2. 操作系统 2.3.2 节 首次适应法(1.分配算法,2.回收算法) 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A05 (12) 2可变分区存储管理可变分区存储管理 2.1实验原理分析实验原理分析 在可变分区模式下,在系统初启且用户作业尚未装入主存储器之前,整个用户区是 一个大空闲分区,随着作业的装入和撤离,主存空间被分成许多分区,有的分区被 占用,而有的分区时空闲的。为了方便主存空间的分配和去配,用于管理的数据结 构可由两张表组成:“已分配区表”和“未分配区表”。在“未分配表中”将空闲 区按长度递增顺序排列,当装入新作业时,从未分配区表中挑选一个能满足用户进 程要求的最小分区进行分配。这时从已分配表中找出一个空栏目登记新作业的起始 地址和占用长度,同时修改未分配区表中空闲区的长度和起始地址。当作业撤离时 已分配区表中的相应状态变为“空”,而将收回的分区登记到未分配区表中,若有 相邻空闲区再将其连接后登记。 2.2设计思路设计思路 1、 分配算法: 采用首次适应法为作来分配大小为 size 的内存空间时,总是从表的起始端的低地址 部分开始查找,当第一次找到大于或等于申请大小的空闲区时,就按所需大小分配 给作业。如果分配后原空闲区还有剩余空间,就修改原存储区表项的 m_size 和 m_addr,使它记录余下的“零头”。如果作业所需空间正好等于该空闲区大小,那 么该空闲区表项的 m_size 就成为 0,接下来要删除表中这个“空洞”,即将随后的 各非零表项依次上移一个位置。 2、 回收算法: 当某一作业回收以前所分配到的内存时,就要将该内存区归还给系统,使其成为空 闲区而可被其它作来使用。回收时如释放区与邻近的空闲区相衔接,要将它们合并 成较大的空闲区,否则空闲区将被分割得超来越小,最终导致不能利用;另外,空 闲区个数越来越多,也会使空闲区登记表溢出。 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A06 (12) 2.3源程序源程序 /* | 如不会使用文件输入/输出,也不会使用I/O转向做输入和输出结果文件, | 可以手再抄输出结果后后再输到文件中,实验报告的文字内容由自己掌握,能多能少。 */ #include #include /*表的定义*/ #define N 5 #define MEMSIZE 1000 typedef struct map unsigned m_size; char *m_addr; ; struct map coremapN; /* coremap表的初始化程序*/ void initcoremap(char *addr, unsigned size) unsigned i; printf(init coremap, first addr: %dn, addr); coremap0.m_size = size; coremap0.m_addr = addr; for(i = 1; i m_size = size) a = bp-m_addr; 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); /* 打印分配内存空间的m_size和m_addr*/ printf(fmalloc size: %d, addr:%dn, size, a); return(a); return(0); /* 首次适应的回收函数*/ void ffree(unsigned size, char *addr) struct map *bp; char *a, *t; unsigned tt; 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A08 (12) printf(ffree mem size=%u, addr=%un, size, addr); a = addr; for (bp = coremap; bp-m_addr m_size != 0; bp+); if (bp coremap /* 情况 1 */ if (a + size = bp-m_addr) /* 情况 2 */ (bp - 1)-m_size += bp-m_size; while (bp-m_size) bp+; (bp - 1)-m_addr = bp-m_addr; (bp - 1)-m_size = bp-m_size; else if (a + size = bp-m_addr bp-m_size += size; else if (0 != size) /* 情况 4 */ do t = bp-m_addr; bp-m_addr = a; a = t; tt = bp-m_size; bp-m_size = size; bp+; while (size = tt); 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A09 (12) /* 主程序的框架*/ int main(void) char *mymem; int size; int addr; char cmdchar; char c=; if (mymem = malloc(MEMSIZE) = NULL) printf(Not enough memory to allocate buffern); exit(1); initcoremap(mymem, MEMSIZE); while(c != q) do c = getchar(); while(c = n | c = t | c = ); cmdchar = c; switch (cmdchar) case m:/* 分配空间*/ scanf(%u, fmalloc(size); break; case f:/* 释放空间*/ scanf(%u %u, ffree(size, mymem + addr); break; case p: printcoremap(); break; 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A010 (12) default:/* 其它字母退出*/ break; free(mymem); return 0; 2.4重要结构体说明重要结构体说明 空闲存储区表可采用结构数组的形式,采用的数据结构形式为: typedef struct map unsigned m_size; char *m_addr; ; m_size:是空闲分区的长度 m_addr:是空闲分区的起始地址 2.5重要变量说明重要变量说明 coremapN:是空闲存储区表 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A011 (12) 2.6结果结果 2.7测试方法对结果的分析测试方法对结果的分析 1、连续分配3个100长度的分区,剩下700长度的分区 2、从头释放掉一个100长度的分区,里面有两个可用的分区,一个是100长度的分区,一个是 700长度的分区 3、程序运行的结果,与设计思路一致。 实验报告 文 档 编 号 Document number 版 本 Version 页 码 Page number 上海交通大学 A012 (12) 2.8接口接口 2.8.1 接口接口设计说明设计说明 名称名称 myTest 函数名 char *fmalloc(unsigned size) 函数说明首次适应的分配功能 输入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人合伙协议书
- 2025年事业单位工勤技能-湖南-湖南工程测量员五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-湖南-湖南地图绘制员五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-湖北-湖北公路养护工五级(初级工)历年参考题库典型考点含答案解析
- 2025-2030中国糕点轮切割器行业应用规模及发展趋势预判报告
- 2025年事业单位工勤技能-河南-河南放射技术员一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-河北-河北殡葬服务工一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江西-江西无损探伤工一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西机械冷加工一级(高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东理疗技术员三级(高级工)历年参考题库含答案解析
- GB/T 30776-2014胶粘带拉伸强度与断裂伸长率的试验方法
- 大金压缩机技术指南手册
- GB/T 1229-2006钢结构用高强度大六角螺母
- 初中现代文精品阅读10篇
- 有创血压测量操作评分标准
- 架桥机事故案例警示-课件
- 茶文化与茶疗课件
- 班组长执行力管理培训
- 家谱图和家庭治疗课件
- 外研版六年级上册英语 Module 2 单元测试卷(含听力音频)
- 2022年北京市中考地理试题及参考答案
评论
0/150
提交评论