- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
存储管理实验报告
题目:1。存储管理
描述请求分页存储管理。
产生一个作业及作业页面序列P(pi),例如:P(0,2,3,4,1,5,2,3,0,4,1,5)。
分配物理内存块数M。
采用FIFO,LRU置换算法。
设计原理:本程序提供两种分区管理法供用户使用,这两种算法是最佳适应算法和首次适应算法。
最佳适应算法要求将所有的空闲区,按其大小以递增的顺序形成一空闲区链。这样,第一次找到的满足要求的空闲区,必然是最优的。但该算法会留下许多这样难以利用的小空闲区。
首次适应算法要求空闲分区链以地址递增的次序链接。在进行内存分配时,从链首开始顺序查找,直至找到一个能满足其大小要求的空闲分区为止。然后,再按照作业的大小,从该分区中划出一快内存空间分配该请求者,余下的空闲分区仍留在空闲链中。
三.不足之处:
该程序可以用文件形式输入作业的信息,但是该文件没有绑定在程序中。不过,用户用键盘输入的作业的信息会自动保存到该文件中,下次当以文件形式输入作业信息时,文件中的内容是上一次用户用键盘输入的内容。
四.源程序以及解释:
#includestdio.h
#includetime.h
#includestdlib.h
int memoryStartAddress = -1;
int memorySize = -1;
struct jobList
//作业后备队列的链结点
{
int id; //作业的ID号
int size; //作业的大小
int status; //作业状态
struct jobList *next;
};
struct freeList //空闲链的链结点
{
int startAddress; //空闲分区的首地址
int size; //空闲分区的大小
struct freeList *next;
};
struct usedList //已分配内存的作业链
{
int startAddress; //以分配内存的首地址
int jobID;
struct usedList *next;
};
void errorMessage(void) //出错信息
{
printf(\n\t错误!\a);
printf(\n按任意键继续!);
getch();
exit(1);
}
void openFile(FILE **fp,char *filename,char *mode) //打开文件函数
{
if((*fp = fopen(filename,mode)) == NULL)
{
printf(\n不能打开 %s.,filename);
errorMessage();
}
}
void makeFreeNode(struct freeList **empty,int startAddress,int size)//申请内存空间
{
if((*empty = malloc(sizeof(struct freeList))) == NULL)
{
printf(\n没有足够空间.);
errorMessage();
}
(*empty)-startAddress = startAddress; //当有足够空间时,则分配
(*empty)-size = size;
(*empty)-next = NULL;
}
void iniMemory(void) //输入要求分配内存的首地址,大小
{
char MSA[10],MS[10];
printf(\n请输入要分配内存的首地址 !);
scanf(%s,MSA);
memoryStartAddr
文档评论(0)