- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内存的动态存储管理一、实验内容编写程序实现动态分区存储管理方式的主存分配与回收。具体内容包括:首先确定主存空间分配表;然后采用最先适应算法完成主存空间的分配与回收;最后编写主函数对所做工作进行测试二、实验原理模拟存储管理中内存空间的管理和分配内存空间的管理分为固定分区管理方式,可变分区管理方式,页式存储管理,段式存储管理。题目:模拟内存分配与回收三、实验步骤(或过程)在Microsoft?Visual?C++?6.0环境下运行设计一个空闲分区表,空闲分区表通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲分区低端的空间。 设计一个内存分区表,可用链表管理,用以表示当前以内存使用情况。 设计一个进程申请队列以及进程完成后的释放顺序,实现主存的分配和回收。 要求每次分配和回收后把空闲分区的变化情况以及各进程的申请、释放情况以及各进程的申请、释放情况以图形方式显示、打印出来。最佳适应算法:该算法总是把满足要求、又是最小的空闲区分配给作业。检查空闲区说明表是否有满足作业要求的空闲区,也分为三种情况:大于,等于,小于。若检查到有“等于”的情况,就可以直接分配,若没有,则继续检查是否有“大于”的情况代码实现如下:#include stdio.h#include malloc.h#include stdlib.h#define n 64 //定义内存的大小int a[n],count=0;//数组a用来保存内存使用状况1为已分配0为未分配,count用来记name数组中元素个数char name[n];//已分配内存的名称(字符类型)typedef struct linknode{ char pid; int start; int length; struct linknode *left,*right;}de_node; //进程节点结构体定义//head1表示未分配内存队列头指针,head2便是已分配进程队列头指针de_node *head1,*head2=NULL;struct linknode* creat()//创建一个进程节点{ int len,flag1=1;//用于表示进程是否可以创建 char id; struct linknode* p; p = (de_node *)malloc(sizeof(de_node));//试图在系统内存中开辟空间创建一个进程 if (p==NULL) //p为空,说明系统没有可用内存用于创建此模拟进程 { printf(系统没有足够的内存可供使用!\n);//输出return(NULL);//返回空指针 } printf(请输入进程id(字符类型)和长度:);//为进程输入id和分配的长度 scanf(%c %d,id,len); fflush(stdin);//清除输入缓存 if((id=aid=z||id=Aid=Z)(len0)){ for(int i=0;icount;i++)//判断输入的进程名,如果已使用,返回空指针,并释放p指针 if(name[i]==id){printf(此名称进程已存在!!);flag1=0;//标志位为0,表示下面对p指向内容不做修改free(p);return NULL; } if(len==0) {//如果输入要分配的进程长度为0,释放p,返回空指针 printf(输入长度为0!\n); free(p); return(NULL); } if(flag1){//标志位1,可以对p指向内容进行修改 p-pid=id; //id p-start=0; //初始开始内存位置,在以后会修改 p-length=len;//长度 p-left=NULL;//左指针 p-right=NULL;//右指针 name[count++]=id;//将id存入数组,count自加 return(p); }//返回创建的进程的地址 } else {printf(输入进程格式有误\n); free(p); return (NULL); }}//分配内存空间void distribute(de_node *p){ de_node *q=head1,*temp; int flag=0; do{//do_while循法//判断当前指向的内存空间的长度是否满足p所申请的长度,大于就分配 if(q-length=p-length) { p-start=q-start;//把进程的内存开始地址指向内存的可用开始地址处 q-start+=p-length
您可能关注的文档
最近下载
- 甘肃省暴雨图集新版.pdf VIP
- 课题开题报告:学科素养导向的道德与法治“教-学-评”一体设计研究.docx VIP
- 马工程《民法学》(第二版)下册参考教学课件07-11民法学-第七编 侵权责任法 第十一章.pptx VIP
- 小学英语核心素养培养与跨学科融合教学策略研究教学研究课题报告.docx
- TZS 0678—2025《生物安全实验室工作人员本底血清样本管理规范》(水印版).pdf VIP
- 河南省信阳市2025年某中学小升初入学分班考试语文考试真题含答案.docx VIP
- 马工程《民法学》(第二版)下册参考教学课件07-10民法学-第七编 侵权责任法 第十章.pptx VIP
- (高清版)DB13(J)∕T 8453-2021 住宅工程常见质量问题控制标准.pdf VIP
- 2024年水浒传知识点及考点总结.docx VIP
- 大学校园内急救知识培训.pptx VIP
原创力文档


文档评论(0)