嵌入式三级项目报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统内存管理三级项目报告书
姓名
班级
学号
课题分工或贡献率
课程名称
指导教师
2016/5/13
摘要:本次三级项目的主要内容是内存的可变大小存储区管理,其中包括进程的创建和结束、内存的分配、释放、回收、紧凑操作以及对应部分C语言程序的编写纠错和下载调试,并且重点对内存的三种分配方式(FF/WF/BF)以及内存紧凑操作的实验结果进行记录。
关键字:内存分配FF BF WF 内存紧凑
前言:,随着嵌入式实时软件系统的规模越来越大,复杂度迅速增加,内存管理也越来越重要,如今相关领域用垃圾搜集器(GC)进行自动内存管理克服了人工内存管理所导致的潜在危险,例如内存泄漏,指针悬挂,内存碎片等。因此对垃圾搜集器的实时化的研究,将其应用于大规模嵌入式实时系统软件的开发,可以提高嵌入式实时软件开发的效率,对于缩短开发周期,提高系统安全可靠性方面具有重要的意义。本次三级项目的研究范围就集中在内存管理方面。本课程三级项目的目的是让学生基于 UP-2410 实验箱完成嵌入式 linux 操作系统内存管理实验程序设计。通过该项目的实施使学生加深对嵌入式linux 操作系统指令系统,内存管理基本原理等知识的理解,并初步具备运用所学知识进行嵌入式 linux 程序设计的能力,相关标准、手册的查阅能力等,引导学生积极思考、主动学习,锻炼和提高学生的交流、沟通和表达能力以及团队合作能力。实验预期能够实现创建新的进程并设置内存大小,选择内存分配算法,终止进程,显示内存的使用情况,掌握内存管理程序程序设计,代码编写、编译和移植,程序调试等。本小组分工如下:王智宇:调试程序、FF算法
秦佳佳:查阅资料、WF算法
闫梦瑶:调试程序、内存紧凑
赵维娜:查阅资料、BF算法
韩敬丽:查阅资料、PPT汇总
一研究项目的相关基本概念
在本次三级项目中,内存管理包括了进程的建立,内存的分配,当一个进程被终止时内存是如何处理被释放,并当内存不满足进程申请时如何使用内存紧凑等这些方面的内容,其中最主要的内容放在了内存分配和内存紧凑操作这个部分。
内存有多种分配方式,包括连续分配和非连续分配,具体分类见图1
图一内存分配方式
这次三级项目中内存分配方法是可变大小存储区管理。可变大小存储区管理的基本思想是在作业要求装入内存时,若当时内存中有足够的存储空间满足该作业的需求,那就划分出一个与作业相对地址空间同样大小的分区分配给它使用。实施可变分区存储管理要解决的三个问题
1.采用地址动态重定位技术,使程序能在内存中移动,为空闲区合并提供保证。
2.记住各分区的使用情况,当一个分区被释放时,要能判定它的前、后分区是否为空
闲区。若是空闲区,就进行合并,形成一个大的空闲区
3.给出分区分配算法,在有多个空闲区都满足作业的存储请求时,决定分配哪一个
分区分配方式有三种,分别是首次适应算法(FF)、最佳适应算法(BF)以及最差适应算法(WF)
首次适应算法(First Fit):从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。
最佳适应算法(Best Fit):它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。
最差适应算法(Worst Fit):它从全部空闲区中找出能满足作业要求的、且大小最大的空闲分区,从而使链表中的结点大小趋于均匀,适用于请求分配的内存大小范围较窄的系统。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按大小从大到小进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留小的空闲区,尽量减少小的碎片产生。
当有一个新进程被创建进行内存申请时,如果存在可以满足要求的空闲分区时,将该空闲分区分配。如果找不到可满足要求的空闲分区但空闲分区之和能满足需求,则采用内存紧凑操作。
所谓紧凑操作就是将内存中的所有进程进行移动,使它们全都相邻接,而把原来分散的多个小空闲分区拼接成一个大分区,以使新建进程可装入进去。
二、研究方法及相关工具
本次三级项目用到的实验设备包括UP-TECH S2410/P270 DVP嵌入式实验平台、PC机Pentium500以上,硬盘10G以上、PC机操作系统REDHAT LINUX9.0+MINICOM+ARM-LINUX 开发环境。
采用rethat linux9.0操作环境系统,安装ARM-linux的开发库及编译器。创建一个新目录,在root用户下建立一个新用户。之和添加一个基本权限为可读可写的Samba服务器,通过Samba服务器,linux系统可以实现文件在linux和win95/NT之间的传输和共享。设置linux下的防火墙为NO firewall;向samba服务器中添加一个用户,以实现在Windows下对linux的访问。在windows 下运行命令程序,在其中输入linux的ip地址,登陆samba中创建的用户,即可实现windows与linux之间的文件传输;将编写好的c语言代码复制到主机的user1目录下,并通过虚拟机将该文件改成.c的格式,并将其复制到虚拟机的/arm2410cl/mem目录下;在工作目录下将源代码编译成可执行文件,并在超级终端上下载运行该程序。
三、内存管理程序设计方案
本次三级项目的程序共包括六个功能模块,如图2所示
图二功能模块图
第一个模块set_mem_size(),用来设置内存空间的大小;
第二个模块set_alogrithm()用来选择内存分配的算法,在程序调试过程中发现BF,和WF算法的程序存在错误,将其更正如下: