嵌入式系统三级项目报告内存管理.docx
《嵌入式系统三级项目报告内存管理.docx》由会员分享,可在线阅读,更多相关《嵌入式系统三级项目报告内存管理.docx(19页珍藏版)》请在冰豆网上搜索。
嵌入式系统三级项目报告内存管理
嵌入式系统三级项目报告
——内存管理
姓名:
学号:
指导教师:
摘要
内存管理模块是计算机操作系统中一个十分重要的组成部分,直接关系到系统是否能正常运行和整个系统性能优劣。
内存的分配和回收策略在通用操作系统中得到了很好的研究与实现,受硬件资源限制,这些策略不完全适用于嵌入式操作系统,它没有考虑实时性、可预测性、资源相对有限性等嵌入式操作系统特征。
下载已经编译好的文件到目标开发板上运行,体会操作系统中内存的分配模式,进程的建立以及内存的申请释放和管理。
关键词:
内存管理、ARM、配置samba服务器
前言
在当前这个数字信息时代和网络技术高速发展的时代,嵌入式已经广泛渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术以及人们的日常生活中等方方面面。
随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术和人们的生活结合的越来越密切。
如何在嵌入式系统中更加有效的对动态内存进行管理也变得越来越重要。
动态内存管理的基本任务是有效地对动态内存进行分配、回收,并同时保证系统的快速性、高效性、可靠性。
当系统请求内存分配时,系统需要从空闲链表中找一块空闲内存给予分配,当用户不再需要时而释放某块内存,系统需要回收这块内存,已备在新的需要请求时进行重新分配。
本次课题研究的范围包括使用嵌入式系统的各类产品,在这些产品中嵌入式系统中内存的管理就是用其中的方法之一。
通过本次试验体会操作系统中内存的分配模式;掌握内存分配的方法(FF,BF,WF);学会进程的建立,当一个进程被终止时内存是如何处理被释放块,并当内存不满足进程申请时是如何使用内存紧凑;掌握内存回收过程及实现方法;学会进行内存的申请释放和管理;嵌入式系统不同于普通计算机系统,一般用于完成某种特定功能,要求实时性,可测性等。
内存管理在嵌入式系统中是一个比较重要的问题,如果处理不好内存资源的管理,那么系统的效率将会大大降低,更严重的话系统将会无法正常运行。
此次项目主要研究对象是内存管理。
通过本次项目体会操作系统中内存的分配模式,掌握内存分配的方法和内存回收过程及实现方法,学会进程的建立及进行内存的申请释放和管理。
1实验简介
1.1实验目的
1、通过本次试验体会操作系统中内存的分配模式;
2、掌握内存分配的方法(FF,BF,WF);
3、学会进程的建立,当一个进程被终止时内存是如何处理被释放块,并当内存不满足进程申请时是如何使用内存紧凑;
4、掌握内存回收过程及实现方法;
5、学会进行内存的申请释放和管理;
1.2实验的开发运行平台
UP-TECHS2410/P270DVP嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。
PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境。
1.3项目内容
使用RedhatLinux9.0操作系统环境,安装ARM-Linux的开发库及编译器。
创建一个新目录,并在其中编写mem.c和Makefile文件。
学习在Linux下的编程和编译过程,以及ARM开发板使用和开发环境设置。
下载已经编译好的文件到目标开发板上运行。
2实验步骤
2.1建立工作目录
[root@BCroot]#cd..
[root@BC/]#cdarm2410cl
[root@BCarm2410cl]#mkdirmem
[root@BCarm2410cl]#cdmem
2.2在root用户下建立新用户
[root@BCmem]#useradduser1
[root@BCmem]#passwduser1
Changingpasswordforuseruser1
Newpassword:
//输入自定义密码,例如123456(系统会提示此密码过于简单,但无影响)
Rtyenewpassword:
//再输入一次密码
2.3配置samba服务器
Samba是用来实现SMB的一种软件,由澳大利亚的AndewTridgell开发,是一种在Linux(Unix)环境下运行的免费软件[21]。
通过使用Samba服务器,Linux系统可以实现文件服务,在Linux和Win95/NT之间实现文件的传输和共享;登陆服务器;使用Windows客户能注册到网络上;支持SSL(SecureSocketLayer)等功能,这里主要利用Samba服务器实现Linux与Windows之间的文件传输和共享,具体配置过程如下:
首先,应确保PC与Linux的网络畅通,鼠标右键点击“网上邻居”——>选择“属性”——>右键点击“本地连接”——>选择“属性”——>在弹出的“本地连接属性”中双击“Internet协议(TCP/IP)”,将弹出“Internet协议(TCP/IP)属性”,就可以修改本机的IP地址了;如PC机的IP地址为:
192.168.1.80,需将Linux的IP设置为与PC机在同一网段,“主菜单”——>“系统设置”——>“网络”——>“网络配置”窗口,双击“设备”标签下的“eth0”,出现“以太网设备”窗口,如图1-1所示。
发现Linux的IP设置与PC机IP设置在同一网段,无需修改,直接选择“取消”即可。
图1-1Linux下的IP地址设置
Linux与Windows下的IP都设置完成后,可在PC下的命令提示符(点击开始菜单,选择“运行”,输入cmd)中用命令PING192.168.1.234测试PC与Linux的网络是否连通。
如设置成功,如下图1-2所示:
图1-2Linux与Windows网络连接测试
其次,设置Samba服务器的共享目录。
在Redhat系统中依次选择开始->系统设置->服务器设置->Samba服务器,在弹出的Samba服务器配置界面中添加一个Samba服务器共享目录,具体设置如图1-3所示:
图1-3Samba服务器共享目录的设置
再次,要设置Linux下的防火墙,打开一个命令终端输入命令:
setup
在出现的配置选项中选择Firewall,将其设置为Nofirewall,结果如图1-4:
图1-4Linux的防火墙设置
向Samba服务器中添加用户,以实现在Windows下对Linux的访问。
在命令终端下输入:
[root@BCmem]#smbpasswd-auser1
NewSMBpassword:
//输入自定义密码
RetypenewSMBpassword:
再次输入密码
Addeduseruser1
最后,在Windows下运行命令程序,在其中输入Linux的IP地址,如图1-5所示:
图1-5在Windows下写入Linux的IP地址
图1-6连接到对话框
在弹出的对话框中输入Samba服务器的用户名和密码,即可实现Windows与Linux之间的文件传输功能。
可将文件复制到文件夹user1下,在linux系统下,用户主目录user1位于/home目录下,每个linux用户有一个以用户名命名的子目录。
在该目录下可找到从windows系统内复制来的文件。
图1-7文件传输界面
2.4编译应用程序
编译应用程序上述步骤完成后,在工作目录下可直接将mem.c编译为可执行文件。
步骤如下:
编译命令为:
armv4l-unknown-linux-gcc□□□□-c□–o□mem.o□mem.c
armv4l-unknown-linux-gcc□□-o□../bin/memmem.o
armv4l-unknown-linux-gcc□□-o□mem□mem.o
其中,armv4l最后一位是字母l,不是数字1。
2.5下载调试
在[/mnt/yaffs]后输入“ifconfig”命令查看系统的IP地址,超级终端系统默认的IP地址为192.168.0.121,为满足通信要求,需要将IP地址修改为192.1.168.123。
临时修改IP地址的基本命令为“ifconfigeth0192.168.1.123”,在宿主PC计算机上启动NFS服务,并设置好共享的目录。
在建立好NFS共享目录以后,我们就可以进入MINICOM中建立开发板与宿主PC机之间的通讯了。
在超级终端下输入如下命令,结果如图1-8所示。
[/mnt/yaffs]mount-tnfs-onolock192.168.1.234:
/arm2410cl/host
图1-8成功建立nfs共享目录
再进入/host目录运行刚刚编译好的mem程序,查看运行结果。
[/mnt/yaffs]cd/host
[/host]cdmem
[/host/mem]./mem
2.6实验运行结果
提示输入以后,输入1,显示如下:
紧接着输入:
3,设置内存空间为256,显示如下:
重复一次上一次操作。
再输入:
5,显示如下:
再输入:
4后,杀死2号进程,显示如下:
3数据流程图
3.1创建新进程
3.1.1原理
创建新进程主要是获取内存的申请数量,首先我们先创建一个内存结点,将新进程的进程号和进程名、对内存排序的方法、索要申请内存的大小进行写入,然后调用内存分配模块对内存进行分配。
分配有三种情况:
1分配成功但是内从链表为空,则将分配的该内存块作为首结点;
2分配成功但是内存链表不为空,则将该内存块插入到内存链表的表头;
3分配失败。
创建新进程的特点就是能动态的为系统增加进程完成预想实现的功能,这样显示了动态内存分配的优越性。
如果一味的静态分配则可能浪费一部分资源,这样对嵌入式系统会造成一定的打击,新系统处理事务的效率可能就会降低,实时性和可靠性都可能得不到保障。
3.1.2流程图
图3-1创建新进程流程图
3.2分配内存
3.2.1原理
内存分配是为新的进程分配进程所需要的内存单元,一般进程有需要的内存大小,按照一定的内存分配规则,如果所给空闲块的空闲空间大于所需内存块的内存空间,则进行分配,在分配时分三种情况:
如果剩下的空间大于规定的最小空间,则将剩下的部分重新作为一个新的空闲内存块:
如果剩下的部分小于规定的空闲块最小空间并且大于0,则将整个块都分配为空存块;如果查找的第一个空闲块的大小满足它所需要的,则查第二个是否与第一个是否为相连的空闲内存单元,如果是则将两个一起分配给请求者。
3.2.2流程图
图3-2分配内存流程图
3.3设置分配算法
3.3.1原理
对空闲块的排序有三种算法,我们可以根据设置分配算法,来进行对三种算法:
FF,BF,EF的选择。
我们要输入所需的分配算法,通过Algoribhm来进行三种算法输出。
若输出FF算法,之后判断空闲块是否为空,若为空,按地址递增顺序排列空闲块;若输出BF算法,之后判断空闲块是否为空,若为空,按地址递增顺序排列空闲块;若输出EF算法,之后判断空闲块是否为空,若为空,按地址递增顺序排列空闲块。
3.3.2流程图
图3-3设置分配算法流程图
3.4内存回收
3.4.1原理
当分配的内存块使用完毕之后需要对其今次那个回收,回收时需要新建一个空闲结点来保存该内存分配块的相关信息,以备之后又新进程再次需要时能顺利进行分配。
首先是将新建的结点插入到空闲区链表的头部并将空闲区按照地址递增的顺序排列。
如果当前空闲区与就免的空闲区相连,则进行合并,否则单独连接。
最后对整个的空闲链表进行重新排序。
3.4.2流程图
图3-4释放ab进程块流程图
图3-5释放ab数据结构节点
3.5三个分配算法
3.5.1首次适应算法FF
要求空闲分区链以地址递增的次序链接,在分配内存时,从链首开始顺序查找,直到找到一个大小能满足要求的空闲分区为止,然后再按照作业的大小,从该分区中划出一块内存空间分给请求者,余下的空闲分区仍停留在空闲链中。
该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。
优点:
该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区,这为以后到达的大作业分配大的内存空间创造了条件。
缺点:
低址部分不断被划分,会留下许多难以利用的,很小的空闲分区,称为碎片。
而每次查找又都是从低址部分开始的,这无疑又会增加查找可用空闲分区时的开销。
3.5.2最佳适应算法BF
它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。
为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。
该算法保留大的空闲区,但造成许多小的空闲区。
为以后到达的大作业分配大的内存空间创造了条件。
优点:
该算法总是把既能满足要求,又是最小的空闲分区分配给作业。
缺点:
为了加速查找,该算法要求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。
这样每次找到的第一个满足要求的空闲区,必然是最优的。
孤立地看,该算法似乎是最优的,但事实上并不一定。
因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。
同时每次分配后必须重新排序,这也带来了一定的开销。
3.5.3最坏适应算法WF
最差适应算法中,该算法按大小递减的顺序形成空闲区链,分配时直接从空闲区链的第一个空闲分区中分配(不能满足需要则不分配)。
很显然,如果第一个空闲分区不能满足,那么再没有空闲分区能满足需要。
最坏适应算法与最佳适应算法的排序正好相反,它的队列指针总是指向最大的空闲区,在进行分配时,总是从最大的空闲区开始查寻。
优点:
这种分配方法初看起来不太合理,但它也有很强的直观吸引力:
在大空闲区中放入程序后,剩下的空闲区常常也很大,于是还能装下一个较大的新程序。
缺点:
该算法克服了最佳适应算法留下的许多小的碎片的不足,但保留大的空闲区的可能性减小了,而且空闲区回收也和最佳适应算法一样复杂。
3.5.4流程图
图3-6首次适应算法流程图
图3-7最佳适应算法流程图
图3-8最坏适应算法流程图
4心得体会
在此次实验中,我深刻了解了嵌入式内存管理系统的工作原理,实时嵌入式的内存管理与普通操作系统有很大不同,需要达到快速性,可靠性,高效性。
通过动手操作,设置开发环境,对嵌入式软件的交叉开发环境(交叉开发环境由宿主机和目标机组成,宿主机与目标机之间在物理连接的基础上建立起逻辑连接)以及嵌入式软件实现阶段的开发过程(生成、调试和固化运行)有了深入理解。
通过阅读、运行该程序,我学到了可以通过预分配和最佳匹配的原则最大限度的减少内存碎片和内存泄露,规范了内存的使用,并培养出一种使用内存的严谨习惯。
参考文献
1张宏海,李成忠,陈祝亚,嵌入式实时系统.安徽工业大学学报:
自然科学版,2003
2俞建新.嵌入式系统基础教程.机械工业出版社,2015.1
3罗蕾.嵌入式实时操作系统及应用开发.北京航天航空大学出版社,2011.1