- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
上海交通大学
实验报告
文 档 编 号
Document number
版 本
Version
页 码
Page number
A0
PAGE 2 ( NUMPAGES 12)
XXXXXXXXXX
文档状态
Document status
发布版
发布日期
Release date
2017-3-30
DZ-2013-5
DZ-2013-5
上海交通大学
实验报告
文 档 编 号
Document number
版 本
Version
页 码
Page number
A0
PAGE 1 ( NUMPAGES 12)
实验报告
操作系统
可变分区存储管理方式的内存分配回收
班级:XXXXXXXXXXXX
学号:XXXXXXXXXXXX
姓名:XXXXXX
日期:XXXX.XX.XX
版本历史 Revisions History
版 本 号
Version Number
修改项目
To modify the project
修订者
Redactor
日期
Date
目录
TOC \o 1-3 \h \z \u 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
引言
实验目的
通过首次适应算法、最佳适应算法和最坏适应算法实现主存空间的分配, 可以使开发人员更好地理解存储分配算法。
参考文档
操作系统2.3.1节 空闲存储区表
操作系统2.3.2节 首次适应法(1.分配算法,2.回收算法)
可变分区存储管理
实验原理分析
在可变分区模式下,在系统初启且用户作业尚未装入主存储器之前,整个用户区是一个大空闲分区,随着作业的装入和撤离,主存空间被分成许多分区,有的分区被占用,而有的分区时空闲的。为了方便主存空间的分配和去配,用于管理的数据结构可由两张表组成:“已分配区表”和“未分配区表”。在“未分配表中”将空闲区按长度递增顺序排列,当装入新作业时,从未分配区表中挑选一个能满足用户进程要求的最小分区进行分配。这时从已分配表中找出一个空栏目登记新作业的起始地址和占用长度,同时修改未分配区表中空闲区的长度和起始地址。当作业撤离时已分配区表中的相应状态变为“空”,而将收回的分区登记到未分配区表中,若有相邻空闲区再将其连接后登记。
设计思路
分配算法:
采用首次适应法为作来分配大小为size的内存空间时,总是从表的起始端的低地址部分开始查找,当第一次找到大于或等于申请大小的空闲区时,就按所需大小分配给作业。如果分配后原空闲区还有剩余空间,就修改原存储区表项的m_size和m_addr,使它记录余下的“零头”。如果作业所需空间正好等于该空闲区大小,那么该空闲区表项的m_size就成为0,接下来要删除表中这个“空洞”,即将随后的各非零表项依次上移一个位置。
回收算法:
当某一作业回收以前所分配到的内存时,就要将该内存区归还给系统,使其成为空闲区而可被其它作来使用。回收时如释放区与邻近的空闲区相衔接,要将它们合并成较大的空闲区,否则空闲区将被分割得超来越小,最终导致不能利用;另外,空闲区个数越来越多,也会使空闲区登记表溢出。
源程序
/*
| 如不会使用文件输入/输出,也不会使用I/O转向做输入和输出结果文件,
| 可以手再抄输出结果后后再输到文件中,实验报告的文字内容由自己掌握,能多能少。
*/
#include stdio.h
#include malloc.h
/*表的定义*/
#define N 5
#define MEMSIZE 1000
typedef struct map
{
unsigned m_size;
char *m_addr;
};
struct map coremap[N];
/* coremap表的初始化程序*/
void initcoremap(char *addr, unsigned size)
{
unsigned i;
printf(init coremap, first addr: %d\n, addr);
coremap[0].m_size = size;
coremap[0].m_addr = addr;
for(i = 1; i N; i++)
{
原创力文档


文档评论(0)