嵌入式内存管理模拟系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

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

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功