操作系统原理_内存分配教(学)案回收

操作系统原理_内存分配教(学)案回收

ID:47410277

大小:184.83 KB

页数:14页

时间:2020-01-10

操作系统原理_内存分配教(学)案回收_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《操作系统原理_内存分配教(学)案回收》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、........内存的动态存储管理一、实验内容编写程序实现动态分区存储管理方式的主存分配与回收。具体内容包括:首先确定主存空间分配表;然后采用最先适应算法完成主存空间的分配与回收;最后编写主函数对所做工作进行测试二、实验原理模拟存储管理中内存空间的管理和分配内存空间的管理分为固定分区管理方式,可变分区管理方式,页式存储管理,段式存储管理。题目:模拟内存分配与回收三、实验步骤(或过程)在Microsoft Visual C++ 6.0环境下运行1.设计一个空闲分区表,空闲分区表通过空闲分区链表来管理,在进

2、行内存分配时,系统优先使用空闲分区低端的空间。2.设计一个内存分区表,可用链表管理,用以表示当前以内存使用情况。3.设计一个进程申请队列以及进程完成后的释放顺序,实现主存的分配和回收。4.要求每次分配和回收后把空闲分区的变化情况以及各进程的申请、释放情况以及各进程的申请、释放情况以图形方式显示、打印出来。最佳适应算法:该算法总是把满足要求、又是最小的空闲区分配给作业。检查空闲区说明表是否有满足作业要求的空闲区,也分为三种情况:大于,等于,小于。若检查到有“等于”的情况,就可以直接分配,若没有,则继续检查

3、是否有“大于”的情况.专业学习资料.........代码实现如下:#include#include#include#definen64//定义内存的大小inta[n],count=0;//数组a用来保存内存使用状况1为已分配0为未分配,count用来记name数组中元素个数charname[n];//已分配内存的名称(字符类型)typedefstructlinknode{charpid;intstart;intlength;structlinkn

4、ode*left,*right;}de_node;//进程节点结构体定义//head1表示未分配内存队列头指针,head2便是已分配进程队列头指针de_node*head1,*head2=NULL;structlinknode*creat()//创建一个进程节点{intlen,flag1=1;//用于表示进程是否可以创建charid;structlinknode*p;p=(de_node*)malloc(sizeof(de_node));//试图在系统内存中开辟空间创建一个进程if(p==NULL)//

5、p为空,说明系统没有可用内存用于创建此模拟进程{printf("系统没有足够的内存可供使用!");//输出return(NULL);//返回空指针}printf("请输入进程id(字符类型)和长度:");//为进程输入id和分配的长度scanf("%c%d",&id,&len);fflush(stdin);//清除输入缓存if((id>='a'&&id<='z'

6、

7、id>='A'&&id<='Z')&&(len>0)){for(inti=0;i

8、返回空指针,并释放p指针if(name[i]==id){printf("此名称进程已存在!!");.专业学习资料.........flag1=0;//标志位为0,表示下面对p指向内容不做修改free(p);returnNULL;}if(len==0){//如果输入要分配的进程长度为0,释放p,返回空指针printf("输入长度为0!");free(p);return(NULL);}if(flag1){//标志位1,可以对p指向内容进行修改p->pid=id;//idp->start=0;//初始开始

9、内存位置,在以后会修改p->length=len;//长度p->left=NULL;//左指针p->right=NULL;//右指针name[count++]=id;//将id存入数组,count自加return(p);}//返回创建的进程的地址}else{printf("输入进程格式有误");free(p);return(NULL);}}//分配内存空间voiddistribute(de_node*p){de_node*q=head1,*temp;intflag=0;do{//do_while循法

10、//判断当前指向的内存空间的长度是否满足p所申请的长度,大于就分配if(q->length>=p->length){p->start=q->start;//把进程的内存开始地址指向内存的可用开始地址处q->start+=p->length;//可用地址起始改变q->length-=p->length;//可用内存长度修改for(inti=p->start;istart+p->length;i++)//将已分配的内存空间全部置1a[i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。