嵌入式三级项目报告

更新时间:2024-03-02 10:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

嵌入式系统内存管理三级项目报告书

姓名 班级 学号

课题分工或贡献率 课程名称 指导教师 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算法的程序存在错误,将其更正如下:

第三个模块new_process()用来创建一个新进程,其中调用了内存分配函数,内存分配函数的设计思路是:当存在可以满足要求的空闲分区时,将该空闲分区分配。找不到可满足要求的空闲分区但空闲分区之和能满足需求,则采用内存紧凑操作。将新建进程插入到进程链表的表头。在程序调试过程中发现内存紧凑部分的代码缺失,补充如下:

第四个模块kill——process()用来结束一个进程,它的设计思路是:根据输入的进程号将相对应的进程结束,释放其内存空间,将释放的内存插入到空闲分区链表的表头。然后调用FF算法将链表排序以便于相邻空闲分区的合并,之后根据当前选择的算法将内存块进行整理。在程序调试过程中发现根据进程号查找进程的find-process函数存在错误:只能查找到位于进程,而不能遍历整个进程链表。因此作出如下更正:

第五个模块display-mem-usage()用来显示内存的使用情况; 第六个模块do-exit()用来退出程序;

将程序作出以上更正之后,便可以得出理想的实验结果 四、实验结果分析 (1)FF算法

首先申请一个大小为2048的内存空间

创建一个占用空间为200字节的进程5,按照wf算法,将满足条件且大小最大的空闲分区分配,也就是将起始地址为1624的大小为424的空闲分区分配给进程5 ,如下图所示,进程5起始地址为1624,剩余大小为224的内存空间作为空闲分区插入到空闲链表,起始地址为1824;给大小为200的进程安排了最大的块,这是最坏的结果。

(4)内存紧凑

在添加的程序段中,通过遍历进程链表的方式,将表头进程的起始地址设为零,其余的 进程依次排列,最后将空闲分区链表的起始地址改变,大小变为剩余内存大小之和。

下图中内存的空闲分区有两个,大小分别为10和20

这时,创建一个大小为30的新进程,则采用内存紧凑操作。首先将位于链表表头的进程五起始地址设为0,进程3和2在之后依次排列。将分散的两个小的空闲分区合并成一个大小为30的大空闲分区分配给新进程。结果如下:

五总结

本次三级项目

本文来源:https://www.bwwdw.com/article/guda.html

Top