嵌入式内存管理模拟系统

上传人:无*** 文档编号:89948822 上传时间:2022-05-13 格式:DOC 页数:25 大小:103.50KB
收藏 版权申诉 举报 下载
嵌入式内存管理模拟系统_第1页
第1页 / 共25页
嵌入式内存管理模拟系统_第2页
第2页 / 共25页
嵌入式内存管理模拟系统_第3页
第3页 / 共25页
资源描述:

《嵌入式内存管理模拟系统》由会员分享,可在线阅读,更多相关《嵌入式内存管理模拟系统(25页珍藏版)》请在装配图网上搜索。

1、-嵌入式内存管理模拟系统 *:1215115032 *:汪如胜 专业:软件工程 班级:移动一班目录:一、 实验目的与要求二、 实验内容.三、 实验信息四、 系统概述.五、 内存管理的作用.六、 实验过程1 程序开发运行平台2 系统处理流程图3 程序的运行4 实验总结七、 源代码一、实验目的与要求1实验目的:1.根本掌握嵌入式C编程的根本思路和主要方法; 2.到达熟练C语言根本知识和技能的高级应用;3.能够基于已有的函数功能库进展有效的嵌入式系统开发;4.能够利用所学的操作系统和内存管理根本知识和技能,解决5.简单嵌入式的系统程序的设计。2实验要求: 1.要求利用C语言面向过程的编程思想来完成系

2、统的设计; 2.实现要求的功能; 3.画出功能模块图; 4.进展简单界面设计,能够实现友好的交互; 5.具有清晰的程序流程图和数据构造的详细定义;二、实验内容1.可以实现内存的分配与回收。2.内存的分配至少有两种分配方法可选择如首次适应算法和最正确适应算法。3.在回收过程中能够合并空闲区。4.可以在屏幕中显示出分配和回收的具体情况。三、实验信息有关该系统根本信息的描述,如:Linu* c函数库,链表,内存分配与回收等。四、系统概论 嵌入式系统功能的不断增加将直接导致系统内存的缺乏,针对应用程序由于内存缺乏而造成系统的无法响应问题,对系统内存和单个进程内存使用情况进展分析,从系统和进程两方面对内

3、存进展优化,以使更多的程序得到响应,提高系统的并发性。对于资源紧*的嵌入式系统,如果编写的程序造成内存泄露,运行的初始阶段可以正常运行,但是当因内存泄露的积累而造成内存资源耗尽时,该应用程序便会崩溃;如果是一个资源相对丰富的嵌入式系统,引起内存泄露的应用程序可能可以稳定运行较长时间后才出现资源耗尽情况,此种情况在测试应用程序时期难以发现,但对实际应用会有重大影响。 嵌入式系统中对实时性的保证,要求内存分配要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中地复杂而完善地内存策略,一般都采取简单、快速地内存管理策略。嵌入式内存分配地请求必须得到满足,嵌入式系统应用环境千变万化,其中有一些是

4、对可靠性要求极高地。比方,汽车地自动驾驶系统中,系统检测到即将撞车,如果因为内存分配失败而不能执行相应的操作,就会发生车毁人亡的惨剧,内存分配要尽可能减少浪费,系统有限得空间决定了可配置得内存容量是很有限的。五、内存管理的作用内存管理模块通常是操作系统内核的一局部,是组织内存以容纳内核和各待执行进程,根据当前内存使用状况,在需要时为进程分配内存,其使用完毕后释放并回收内存。内存管理与操作系统和底层硬件体系构造密切相关, 嵌入式系统的内存相当有限,需要高效地使用,内存分配和回收必须迅速,嵌入式系统的运行和内存管理必须平安可靠。 嵌入式操作系统的内存管理模拟主要采用两个内存分配算法,首先用户要先选

5、择适应算法,然后用户提出内存空间的申请;系统根据申请者的要求,按照一定的分配策略分析内存空间的使用情况,找出能满足请求的空闲区,分给申请者;当程序执行完毕或主动归还内存资源时,系统要收回它所占用的内存空间或它归还的局部内存空间。当要进展内存分配时,则要求输入要申请内存的大小,然后程序会根据剩余的内存大小进展具体分配。六、实验过程1. 程序开发运行平台 开发平台:linu*系统的操作环境 GCC编译器 运行平台:linu*系统的操作环境2. 流程图(1) 系统处理流程图2主程序流程图3内存回收4内存分配5函数关系调用图释放内存显示内存状况自动演示申请内存Display()Releasm()Get

6、char()Display()Getchar()Getm()Main()实验步骤1. 空闲区构造体typedef struct int i; /记录区号 char *t;/记录区的起始地址 int flag;/说明该区是否是空闲的page;2. 结点标识typedef struct nodeint c; /进程所占内存的大小int i; /进程所占的内存的区号int fg; /说明该进程号已经存在struct node *ne*t;nd;nd *headMA*/4;page pgMA*/4;int init(char *);int getm(int);int releasem(int);int

7、 display();int sleep(int);3. 内存回收:先释放内存,看内存大小是否符合进程所站的内存大小,如果不符合再申请,最后释放回收。int releasem(int *) int n=0,i=0,j=0,flag=0; nd *p; long t; srand(unsigned)time(&t); if (*=0) while(1) printf(请输入要释放内存的进程号:); scanf(%d,&n); if(headn-fg=0)printf(该进程号不存在,请重新输入!n);continue; break; if(*=1) while(1) n=rand()%10; i

8、f(headn-fg=0)continue; printf(释放进程%d的内存n,n); sleep(S); break; p=head0; i=0; for(i=0;ifg=0; p=headi-ne*t; while(p!=NULL) pgp-i.flag=0; for(j=0;jne*t; break; return 0;5. 内存分配:按照要分配内存的大小分配内存,缺乏再申请,直到把所有的进程都分配到内存,进程完毕后释放内存,让下一个进程利用。int display() FILE *fp; int i; fp=fopen(d:mem1.t*t,a+); printf(模拟内存分配状况n

9、); for(i=0;iMA*/4;i+) if(pgi.flag=1) printf(); printf(%c ,*(pgi.t); fprintf(fp,%c ,*(pgi.t); printf(%c ,*(pgi.t+1);fprintf(fp,%c ,*(pgi.t+1); printf(%c ,*(pgi.t+2); fprintf(fp,%c ,*(pgi.t+2); printf(%c ,*(pgi.t+3); fprintf(fp,%c ,*(pgi.t+3); else printf(_ _ _ _ ); fprintf(fp,_ _ _ _ ); if(i+1)%4=0)p

10、rintf(n);fprintf(fp,n); printf(nn);fprintf(fp,nn); printf(起始地址:%dn,pg0.t); fprintf(fp,起始地址:%dn,pg0.t); printf(进程状况:n);fprintf(fp,进程状况:n); for(i=0;ifg=1) printf(进程号:%d分配内存大小%dn,i,headi-c); fprintf(fp,进程号:%d分配内存大小%dn,i,headi-c); printf(n); fprintf(fp,n); fclose(fp); return 0; int sleep(int *) long t,j

11、,k; j=time(&t); while(1) k=time(&t); if(k-j=*) return 0; 4. 实验总结在C+和C语言开发中,指针、内存一直是学习的重点。因为C+语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,使程序的灵活度最大化,作为操作系统,磁盘上内存的申请,调用,释放和对于不同进程间内存空间的利用,认识了软件生命周期的各个环境,包括构思、设计、编写、调试、运行等。源代码:*include*include*include*include*include*define ma* 100*define S 1typedef structint i;char

12、 *t;int flag;page;typedef struct nodeint c;int i;int fg;struct node *ne*t;nd;int init(char *);int getm(int);int releasem(int);int display();int sleep(int);nd *headma*;page pgma*;int main()char *p;int n,m,j,k,i,l;p=(char *)malloc(MA*sizeof(char); init(p); for(i=0;iMA*/4;i+) pgi.i=i; pgi.t=p+i*4; pgi.

13、flag=0;while(1) printf(n自动演示内存管理请按1n手工管理按2n退出按0 n);scanf(%d,&l);if(l=2) while(1) printf(_n); printf(|1 申请内存 |n); printf(|2 释放内存 |n); printf(|3 显示内存状况 |n); printf(|0 退出 |n); printf(_); printf( 请输入选择:); scanf(%d,&k); switch(k) case 1:system(cls); getm(0);getchar();break; case 2:system(cls);releasem(0)

14、;getchar();break; case 3:system(cls); display();getchar();break; case 0:return 0; default:printf(输入错误,请重新输入);break; else if(l=1) long t; int i; srand(unsigned)time(&t); system(cls); for(i=0;i);sleep(1); printf(现在);sleep(1); printf(开场);sleep(1); printf(演示);sleep(1); printf(内存);sleep(1); printf(管理n);s

15、leep(1); for(i=0;i4;i+) getm(1); display(); sleep(3); else break;int init(char *p)int i;for(i=0;ine*t=NULL; headi-fg=0;for(i=0;iMA*;i+)*(p+i)=95; return 0;int getm(int *)int i,j,m,n,k=0,flag=0,a=0,b=0;nd *p,*q;char ch;long t; srand(unsigned)time(&t); if(*=0)while(1) printf(输入进程号:); scanf(%d,&n); if(

16、n10) printf(进程号不合法,请重新输入n); continue; q=headn; if(headn-fg=1)printf(该进程号已经存在,请重新输入!n);continue; else headn-fg=1; printf(输入该进程申请的内存大小:); scanf(%d,&m); headn-c=m; break; if(*=1) while(1) n=rand()%10; q=headn; if(headn-fg=1)continue; else headn-fg=1; printf(产生新进程-进程号:%dn,n); while(1) m=rand()%MA*; if(m

17、MA*/10)break; printf(该进程申请的内存大小:%dn,m);headn-c=m; break; if(m%4=0)j=m/4;else j=m/4+1;for(i=0,k=0;i=j) headn-i=n; for(i=0;i=j)break; if(pgi.flag=0) p=(nd *)malloc(sizeof(nd); q-ne*t=p; p-i=i; q=p; p-ne*t=NULL; flag=1; pgi.flag=1; if(a=j-1&m%4!=0) for(b=0;bm%4;b+)*(pgi.t+b)=(n+48); else for(b=0;b4;b+)

18、*(pgi.t+b)=(n+48); a+; return 0;if(*=0)printf(n内存剩余空间缺乏,请释放先释放一局部内存!nnn);return 0;if(*=1) system(cls); printf(n内存剩余空间缺乏,开场释放一局部内存!nnn); sleep(S); while(1) releasem(1);display(); sleep(S); if(m%4=0)j=m/4; else j=m/4+1; for(i=0;iMA*/4;i+) if(pgi.flag=0)k+; if(ki=n; for(i=0;i=j)break; if(pgi.flag=0) p=

19、(nd *)malloc(sizeof(nd); q-ne*t=p; p-i=i; q=p; p-ne*t=NULL; flag=1; pgi.flag=1; if(a=j-1&m%4!=0) for(b=0;bm%4;b+)*(pgi.t+b)=(n+48); else for(b=0;bfg=0)printf(该进程号不存在,请重新输入!n);continue; break; if(*=1) while(1) n=rand()%10; if(headn-fg=0)continue; printf(释放进程%d的内存n,n); sleep(S); break; p=head0;i=0;for

20、(i=0;ifg=0; p=headi-ne*t; while(p!=NULL) pgp-i.flag=0; for(j=0;jne*t; break; return 0;int display() FILE *fp; int i;fp=fopen(d:mem1.t*t,a+); printf(模拟内存分配状况n); for(i=0;iMA*/4;i+) if(pgi.flag=1) printf(); printf(%c ,*(pgi.t); fprintf(fp,%c ,*(pgi.t); printf(%c ,*(pgi.t+1);fprintf(fp,%c ,*(pgi.t+1); p

21、rintf(%c ,*(pgi.t+2); fprintf(fp,%c ,*(pgi.t+2); printf(%c ,*(pgi.t+3); fprintf(fp,%c ,*(pgi.t+3); else printf(_ _ _ _ );fprintf(fp,_ _ _ _ ); if(i+1)%4=0)printf(n);fprintf(fp,n); printf(nn);fprintf(fp,nn); printf(起始地址:%dn,pg0.t);fprintf(fp,起始地址:%dn,pg0.t); printf(进程状况:n);fprintf(fp,进程状况:n); for(i=0;ifg=1) printf(进程号:%d分配内存大小%dn,i,headi-c);fprintf(fp,进程号:%d分配内存大小%dn,i,headi-c); printf(n); fprintf(fp,n); fclose(fp); return 0; int sleep(int *)long t,j,k;j=time(&t);while(1)k=time(&t); if(k-j=*) return 0;. z

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!