- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实验
内存的分配与回收
实验报告
、实验题目:内存的分配与回收
、实验内容:利用可变分区的首次适应算法,模拟内存的分配与回收。
三、实验目的:掌握可变分区首次适应算法的原理以及其编程实现。
四、实验过程:
1、基本思想:可变分区分配是根据进程的实际需求,动态地为之分配内存空间。首次适应算法要求空闲 空间链以地址递增的次序链接。进行内存分配时,从链表头部开始依次检索,找到第一个不小于请求空间 大小的空闲空间进行分配。分配时需考虑碎片问题,若分配会导致碎片产生则将整块分区分配。内存的回 收需要考虑四种情况:⑴回收分区前后两个分区都空闲,则需要和前后两个分区合并;(2)回收分区只有 前一分区空闲,则与前一分区合并;(3)回收分区只有后一分区空闲,则和后一分区合并;(4)回收分区 独立,不考虑合并
2、主要数据结构:
struct FreeArea( 链结点包含的数据:分区号、大小、起址、标记
int ID;
int size;
long address;
int sign;
};
struct Node { 双链表结点结构体:数据区、前向指针、后继指针
FreeArea data;
struct Node *prior;
struct Node *next;
}*DLinkList;
3、输入、输出:
输入:I.内存分配时由键盘输入分区ID和大小;
II.内存回收时由键盘输入需要回收的分区ID;
输出:输出内存的分配情况(按照地址从低到高)
4、程序流程图:
5、实验结果截屏:
d;\vs201 Cl\ncfp2\Deljug\n cfp2
# -Jn-
aa?a
请请ISF请诺苦
牛,■■r力舞什A动舞 L\l/\成IAIAIA成IA
二一:-1__._一上==土一__.工 也 也 也 也 区哉区铅区钏区钳 -R-L i- 十一j-n-lfr一,行起分匹
I d;\y52O10\ncfp2\Debu g\n cFp2, exe
1—1
1
0 分区大』h 10 KB 状 芭;空闲
2
10 分区大小;23 KB 状 念;已狞配
3
叫 分区大小如KH 状 态,已廿?配
Fvrr
hM 分区,八小,七KK :伏 基宝 区
请输入操作:1. w内在
三存分鬼
分区大小,
分区大小,
分区大小:
分■区大小:
作:?分配内存
:7
2 .
情况
1 a kp
KH
39 KB
452 KB
回收内茸 3 .另;F千仟
回收内亍 L昱7T工行
状 桦片已分阳
状 志,已分配
状 态:己咛配
状 芯宇IX
清辕人操作:「分酊为芹 Z ?回收灼寻 L昱示主存
0-^ii
区■退3
。■退出
请输入操作:,分配内存
分区大小:
分区大小:
分区大小:
WSA1W 龙?E曲: 蚩输入操作:,分配内存
叵收内年 3.匠示工与
叵收内厅 自.赴小工亏
状 态;X |+1
域 态;匕分配
状、志X |+1
30 KB
空ffl
状
状
:1
:6
:16
:3
:36
:Free
:C6
X: X ffl
态:已分配
态:已分配
芒、:
主存分配情机
:i区大小:16 KB
分区大小:
分区大小:
分区大小:
请输入操作:,分配内存
2 .回收内存
己-丘小工不
号址号址号址号址 区三区?区三区W -F^. -FK. -F^. -F^. 分翼R翼R普起
X-
4刷 44 主IFa 、T 3.
11孚2
工17普配
3.显王仔
1=1
,回
。.史出
札退出
土退出
札退出
6、源程序代码:
#includeiostream
using namespace std;
#define Free 0 〃空闲状态
#define Busy 1 〃己用状态
#define PBusy 2 //碎片已用状态
#define FINISH 1 〃完成
#define FINISH2 1 〃完成
#define ERROR 0 //出错
#define memory 512 //最大内存空间为(单位:KB)
#define min 10 //碎片最小值(单位:KB)
typedef struct FreeArea// 空闲链数据
{
int ID;
int size;
long address;
int sign;
};
typedef struct Node 〃空闲连结构
{
FreeArea data;
struct Node *prior;
struct Node *next;
}*DLinkList;
DLinkList head; 〃头结点
DLinkList tail; //尾结点
int Create()//初 始化
{
head=(DLinkList)malloc(sizeof(Node));//分 配内存
tail=(DLinkList)ma
文档评论(0)