嵌入式内存管理模拟系统.doc_第1页
嵌入式内存管理模拟系统.doc_第2页
嵌入式内存管理模拟系统.doc_第3页
嵌入式内存管理模拟系统.doc_第4页
嵌入式内存管理模拟系统.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式内存管理模拟系统 学号:1215115032 姓名:汪如胜 专业:软件工程 班级:移动一班 目录:一、 实验目的与要求二、 实验内容.三、 实验信息四、 系统概述.五、 内存管理的作用.六、 实验过程1 程序开发运行平台2 系统处理流程图3 程序的运行4 实验总结七、 源代码一、实验目的与要求(1)实验目的:1.基本掌握嵌入式C编程的基本思路和主要方法; 2.达到熟练C语言基本知识和技能的高级应用;3.能够基于已有的函数功能库进行有效的嵌入式系统开发;4.能够利用所学的操作系统和内存管理基本知识和技能,解决5.简单嵌入式的系统程序的设计。(2)实验要求: 1.要求利用C语言面向过程的编程思想来完成系统的设计; 2.实现要求的功能; 3.画出功能模块图; 4.进行简单界面设计,能够实现友好的交互; 5.具有清晰的程序流程图和数据结构的详细定义;二、实验内容1.可以实现内存的分配与回收。2.内存的分配至少有两种分配方法可选择(如首次适应算法和最佳适应算法)。3.在回收过程中能够合并空闲区。4.可以在屏幕中显示出分配和回收的具体情况。三、实验信息有关该系统基本信息的描述,如:Linux c函数库,链表,内存分配与回收等。四、系统概论 嵌入式系统功能的不断增加将直接导致系统内存的不足,针对应用程序由于内存不足而造成系统的无法响应问题,对系统内存和单个进程内存使用情况进行分析,从系统和进程两方面对内存进行优化,以使更多的程序得到响应,提高系统的并发性。对于资源紧张的嵌入式系统,如果编写的程序造成内存泄露,运行的初始阶段可以正常运行,但是当因内存泄露的积累而造成内存资源耗尽时,该应用程序便会崩溃;如果是一个资源相对丰富的嵌入式系统,引起内存泄露的应用程序可能可以稳定运行较长时间后才出现资源耗尽情况,此种情况在测试应用程序时期难以发现,但对实际应用会有重大影响。 嵌入式系统中对实时性的保证,要求内存分配要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中地复杂而完善地内存策略,一般都采取简单、快速地内存管理策略。嵌入式内存分配地请求必须得到满足,嵌入式系统应用环境千变万化,其中有一些是对可靠性要求极高地。比如,汽车地自动驾驶系统中,系统检测到即将撞车,如果因为内存分配失败而不能执行相应的操作,就会发生车毁人亡的惨剧,内存分配要尽可能减少浪费,系统有限得空间决定了可配置得内存容量是很有限的。五、内存管理的作用内存管理模块通常是操作系统内核的一部分,是组织内存以容纳内核和各待执行进程,根据当前内存使用状况,在需要时为进程分配内存,其使用完毕后释放并回收内存。内存管理与操作系统和底层硬件体系结构密切相关, 嵌入式系统的内存相当有限,需要高效地使用,内存分配和回收必须迅速,嵌入式系统的运行和内存管理必须安全可靠。 嵌入式操作系统的内存管理模拟主要采用两个内存分配算法,首先用户要先选择适应算法,然后用户提出内存空间的申请;系统根据申请者的要求,按照一定的分配策略分析内存空间的使用情况,找出能满足请求的空闲区,分给申请者;当程序执行完毕或主动归还内存资源时,系统要收回它所占用的内存空间或它归还的部分内存空间。当要进行内存分配时,则要求输入要申请内存的大小,然后程序会根据剩余的内存大小进行具体分配。六、实验过程1. 程序开发运行平台 开发平台:linux系统的操作环境 GCC编译器 运行平台:linux系统的操作环境2. 流程图(1) 系统处理流程图(2)主程序流程图(3)内存回收(4)内存分配(5)函数关系调用图释放内存显示内存状况自动演示申请内存Display()Releasm()Getchar()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 *next;nd;nd *headMAX/4;page pgMAX/4;int init(char *);int getm(int);int releasem(int);int display();int sleep(int);3. 内存回收:先释放内存,看内存大小是否符合进程所站的内存大小,如果不符合再申请,最后释放回收。int releasem(int x) int n=0,i=0,j=0,flag=0; nd *p; long t; srand(unsigned)time(&t); if (x=0) while(1) printf(请输入要释放内存的进程号:); scanf(%d,&n); if(headn-fg=0)printf(该进程号不存在,请重新输入!n);continue; break; if(x=1) while(1) n=rand()%10; if(headn-fg=0)continue; printf(释放进程%d的内存n,n); sleep(S); break; p=head0; i=0; for(i=0;ifg=0; p=headi-next; while(p!=NULL) pgp-i.flag=0; for(j=0;jnext; break; return 0;5. 内存分配:按照要分配内存的大小分配内存,不足再申请,直到把所有的进程都分配到内存,进程结束后释放内存,让下一个进程利用。int display() FILE *fp; int i; fp=fopen(d:mem1.txt,a+); printf(模拟内存分配状况n); for(i=0;iMAX/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)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 x) long t,j,k; j=time(&t); while(1) k=time(&t); if(k-j=x) return 0; 4. 实验总结在C+和C语言开发中,指针、内存一直是学习的重点。因为C+语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,使程序的灵活度最大化,作为操作系统,磁盘上内存的申请,调用,释放和对于不同进程间内存空间的利用,认识了软件生命周期的各个环境,包括构思、设计、编写、调试、运行等。源代码:#include#include#include#include#include#define max 100#define S 1typedef structint i;char *t;int flag;page;typedef struct nodeint c;int i;int fg;struct node *next;nd;int init(char *);int getm(int);int releasem(int);int display();int sleep(int);nd *headmax;page pgmax;int main()char *p;int n,m,j,k,i,l;p=(char *)malloc(MAX*sizeof(char); init(p); for(i=0;iMAX/4;i+) pgi.i=i; pgi.t=p+i*4; pgi.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);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);sleep(1); for(i=0;i4;i+) getm(1); display(); sleep(3); else break;int init(char *p)int i;for(i=0;inext=NULL; headi-fg=0;for(i=0;iMAX;i+)*(p+i)=95; return 0;int getm(int x)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(x=0)while(1) printf(输入进程号:); scanf(%d,&n); if(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(x=1) while(1) n=rand()%10; q=headn; if(headn-fg=1)continue; else headn-fg=1; printf(产生新进程-进程号:%dn,n); while(1) m=rand()%MAX; if(mMAX/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-next=p; p-i=i; q=p; p-next=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+)*(pgi.t+b)=(n+48); a+; return 0;if(x=0)printf(n内存剩余空间不足,请释放先释放一部分内存!nnn);return 0;if(x=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;iMAX/4;i+) if(pgi.flag=0)k+; if(ki=n; for(i=0;i=j)break; if(pgi.flag=0) p=(nd *)malloc(sizeof(nd); q-next=p; p-i=i; q=p; p-next=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(x=1) while(1) n=rand()%10; if(headn-fg=0)continue; printf(释放进程%d的内存n,n); sleep(S); break; p=head0;i=0;for(i=0;ifg=0; p=headi-next; while(p!=NULL) pgp-i.flag=0; for(j=0;jnext; break; return 0;int display() FILE *fp; int i;fp=fopen(d:mem1.txt,a+); printf(模拟内存分配

温馨提示

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

评论

0/150

提交评论