嵌入式系统三级项目文档格式.docx

上传人:b****2 文档编号:4001960 上传时间:2023-05-02 格式:DOCX 页数:17 大小:82.90KB
下载 相关 举报
嵌入式系统三级项目文档格式.docx_第1页
第1页 / 共17页
嵌入式系统三级项目文档格式.docx_第2页
第2页 / 共17页
嵌入式系统三级项目文档格式.docx_第3页
第3页 / 共17页
嵌入式系统三级项目文档格式.docx_第4页
第4页 / 共17页
嵌入式系统三级项目文档格式.docx_第5页
第5页 / 共17页
嵌入式系统三级项目文档格式.docx_第6页
第6页 / 共17页
嵌入式系统三级项目文档格式.docx_第7页
第7页 / 共17页
嵌入式系统三级项目文档格式.docx_第8页
第8页 / 共17页
嵌入式系统三级项目文档格式.docx_第9页
第9页 / 共17页
嵌入式系统三级项目文档格式.docx_第10页
第10页 / 共17页
嵌入式系统三级项目文档格式.docx_第11页
第11页 / 共17页
嵌入式系统三级项目文档格式.docx_第12页
第12页 / 共17页
嵌入式系统三级项目文档格式.docx_第13页
第13页 / 共17页
嵌入式系统三级项目文档格式.docx_第14页
第14页 / 共17页
嵌入式系统三级项目文档格式.docx_第15页
第15页 / 共17页
嵌入式系统三级项目文档格式.docx_第16页
第16页 / 共17页
嵌入式系统三级项目文档格式.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式系统三级项目文档格式.docx

《嵌入式系统三级项目文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统三级项目文档格式.docx(17页珍藏版)》请在冰点文库上搜索。

嵌入式系统三级项目文档格式.docx

流程图6

分配内存8

原理8

流程图8

设置分配算法10

原理10

流程图10

内存回收11

原理11

流程图11

三个分配算法14

首次适应算法FF14

最佳适应算法BF14

最坏适应算法WF15

流程图15

4心得体会19

参考文献20

、八、,

前言

在当前这个数字信息时代和网络技术高速发展的时代,嵌入式已经广泛渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术以及人们的日常生活中等方方面面。

随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术和人们的生活结合的越来越密切。

如何在嵌入式系统中更加有效的对动态内存进行管理也变得越来越重要。

动态内存管理的基本任务是有效地对动态内存进行分配、回收,并同时保证系统的快速性、高效性、可靠性。

当系统请求内存分配时,系统需要从空闲链表中找一块空闲内存给予分配,当用户不再需要时而释放某块内存,系统需要回收这块内存,已备在新的需要请求时进行重新分配。

本次课题研究的范围包括使用嵌入式系统的各类产品,在这些产品中嵌入式系统中内存的管理就是用其中的方法之一。

通过本次试验体会操作系统中内存的分配模式;

掌握内存分配的方法(FF,BF,WF;

学会进程的建立,当一个进程被终止时内存是如何处理被释放块,并当内存不满足进程申请时是如何使用内存紧凑;

掌握内存回收过程及实现方法;

学会进行内存的申请释放和管理;

嵌入式系统不同于普通计算机系统,一般用于完成某种特定功能,要求实时性,可测性等。

内存管理在嵌入式系统中是一个比较重要的问题,如果处理不好内存资源的管理,那么系统的效率将会大大降低,更严重的话系统将会无法正常运行。

此次项目主要研究对象是内存管理。

通过本次项目体会操作系统中内存的分配模式,掌握内存分配的方法和内存回收过程及实现方法,学会进程的建立及进行内存的申请释放和管理。

1实验简介

实验目的

1、通过本次试验体会操作系统中内存的分配模式;

2、掌握内存分配的方法(FF,BF,WF);

3、学会进程的建立,当一个进程被终止时内存是如何处理被释放块,并当内存不满足进程申请时是如何使用内存紧凑;

4、掌握内存回收过程及实现方法;

5、学会进行内存的申请释放和管理;

实验的开发运行平台

UP-TECHS2410/P270DVP嵌入式实验平台、PC机Pentium500以上,

硬盘10G以上。

PC机操作系统REDHATLINU冷MINICOIWARM-LINU)开发环境。

项目内容

使用RedhatLinux操作系统环境,安装ARM-Linux的开发库及编译器。

创建一个新目录,并在其中编写和Makefile文件。

学习在Linux下的编程和编译过程,以及ARM开发板使用和开发环境设置。

下载已经编译好的文件到目标开发板上运行。

2实验步骤

■Mm

[root@BCroot]#cd..

I

厨[root@BC/]#cdarm2410cl[root@BCarm2410cl]#mkdirmem[root@BCarm2410cl]#cdmem

X九神啊川灿Wtl'

TiOD)

Fire™HConfigura

聃'

root「用户下建立新用户

[root@BCmem]#useradduserl

A『ireuqHproleclsa^ains1uduuIhorizednelutnkir[root@BCmem]#passwduseri:

.匹讥誇11川匸口讥“器cccssc5.

[Changingpasswordforuseruserl:

11

i)iprimEng,butaIlo^vsothercanoeclions.N)1ire11

New

password"

W

armv4l-unknown-Iinux-gcc□□-o□merE

其中,armv4I最后一位是字母I,不是数字1。

下载调试

在[/mnt/yaffs]后输入“ifeonfig”命令查看系统的IP地址,超级

罠忖曲■廉血*1戰卓山miswktuifi

ei)lIfct2:

IdrelunwdIiislaiu^

Irool-^Cumilfl1arm4l-uiikm>

w^Iioux-gec-omtinwmoIruoiMK.m^rinifU

iivmupincnrrvtn

[rgol^BCncrrjf号

/bin/

终端系统默认的IP地址为,为满足通信要求,需要将IP地址修改为。

临时修改IP地址的基本命令为“ifconfig,在宿主PC计算机上启动NFS服务,并设置好共享的目录。

在建立好NFS共享目录以后,我们就

可以进入MINICOM中建立开发板与宿主PC机之间的通讯了。

在超级终端

下输入如下命令,结果如图1-8所示

[/mnt/yaffs]mount-tnfs-onolock/host

1/mnt/yflffsIifconfigethll192,168.1.123

I/mntMiffsIifcofffig

t>

1h(9Linkencut>

:

EtlicrnetHW<

id(lr:

26:

fln;

BC

inetaddr;

192.168.1.123Be492.16B.1.255M阳k:

255,2拓.255川UPtSRUrtDCASlHUNNJMGMULIICFlSIH1U:

5观Hclric:

!

剧packets:

16errorsdropped:

0overruns:

0framedTNpackets:

0errors:

0droppecl:

0carrier:

0col1isiotis:

0tMqucuelcn:

100

刪liy^RStl.OKiB)TK(00IH

Internu)1:

2

11>

Linkencnp;

Luc:

dlLoopback

inctaddr1127.1).0.1Mdsk:

255.0.fl.U

UPLOOPBACKMNINGMTIJ:

16496Hetrick

RMpdtkels:

0errors;

fldropOedOverrunS:

0frdhelfl

IWpfickcis:

0errors:

H{Iroppicd:

overrLjnF:

0tfjrrier:

(Jcol]isionj;

扌xqiitHtel耶

嗣l)Vles:

Bt«

.BBlIX(Q.9EB

l/mnt/v<

ifFsAmount*tnf^-unolock192.168.1.234:

/<

im2^10cL/hostI/nnt/yaffslIs

图1-8成功建立nfs共享目录

再进入/host目录运行刚刚编译好的men程序,查看运行结果。

[/mnt/yaffs]cd/host

[/host]cdmem

[/host/mem]./mem

实验运行结果

0-EkH

c(TH“H

[/host/Illed…

[/hastIlsreddae-txt

1-Set(default=102i)

2一SelectMemoryallocationalgorithw

3-Newprocess

kT^ritiinateaprocess

-Disi)Ia^memoryusage一Exit

提示输入以后,输入1显示如下:

紧接着输入:

3,设置内存空间为256,显示如下:

重复一次上一次操作。

再输入:

5,显示如下:

FreeHemoi*y:

_addr

si^e

512

153&

UsedMemory:

PID

PpocessHame

stai*t_addi*

sise

PROCESS-02

256

1

PROCESS-01

再输入:

4后,杀死2号进程,显示如下:

KillProcess,pid=2Rearrangefreeblock?

forFFRearrangefreehloclf?

forFF

3数据流程图

创建新进程

原理

创建新进程主要是获取内存的申请数量,首先我们先创建一个内存结点,将新进程的进程号和进程名、对内存排序的方法、索要申请内存的大小进行写入,然后调用内存分配模块对内存进行分配。

分配有三种情况:

1分配成功但是内从链表为空,则将分配的该内存块作为首结点;

2分配成功但是内存链表不为空,则将该内存块插入到内存链表的表

头;

3分配失败。

创建新进程的特点就是能动态的为系统增加进程完成预想实现的功

能,这样显示了动态内存分配的优越性。

如果一味的静态分配则可能浪费一部分资源,这样对嵌入式系统会造成一定的打击,新系统处理事务的效率可能就会降低,实时性和可靠性都可能得不到保障。

流程图

图3-1创建新进程流程图

 

分配内存

则将

内存分配是为新的进程分配进程所需要的内存单元,一般进程有需要的内存大小,按照一定的内存分配规则,如果所给空闲块的空闲空间大于所需内存块的内存空间,则进行分配,在分配时分三种情况:

如果剩下的空间大于规定的最小空间,贝U将剩下的部分重新作为一个新的空闲内存块:

如果剩下的部分小于规定的空闲块最小空间并且大于0,整个块都分配为空存块;

如果查找的第一个空闲块的大小满足它所需要的,则查第二个是否与第一个是否为相连的空闲内存单元,如果是则将两个一起分配给请求者。

定义要求的内存块大小

Y

块空

存?

块>

=要求内

后>

=

小碎片大

小?

N

后<

最小碎

大小&

&

空闲块大小

求内存大小

分害U

一块空闲块

temp指向空闲

链表首地址

>

<

Temp!

=null?

fbt指向空闲链

表首地址

Temp=temp-

next

Work!

work指向下一

空闲块

分割第一块空

闲块

空闲链首地址+=要求的内存

大小

将第一块空闲块不分割,直

接分配

调用rearrarge()

空闲区排列算法

找下一个内存

结束

合并两个空闲块

连?

当前空闲块与

一个空闲块相

设置分配算法

对空闲块的排序有三种算法,我们可以根据设置分配算法,来进行对三种算法:

FF,BF,EF的选择。

我们要输入所需的分配算法,通过Algoribhm来进行三种算法输出。

若输出FF算法,之后判断空闲块是否为空,若为空,按地址递增顺序排列空闲块;

若输出BF算法,之后判断

空闲块是否为空,若为空,按地址递增顺序排列空闲块;

若输出EF算法,之后判断空闲块是否为空,若为空,按地址递增顺序排列空闲块。

Ma_algorithm=algorithm

调用rearrange。

函数

给空闲快链表排序

内存回收

当分配的内存块使用完毕之后需要对其今次那个回收,回收时需要新建一个空闲结点来保存该内存分配块的相关信息,以备之后又新进程再次需要时能顺利进行分配。

首先是将新建的结点插入到空闲区链表的头部并将空闲区按照地址递增的顺序排列。

如果当前空闲区与就免的空闲区相连,则进行合并,否则单独连接。

最后对整个的空闲链表进行重新排序。

图3-4释放ab进程块流程图

定义已分配内存块指针

pre,abx

首指针指向第

二块

释放第一块

pre指向首地址

ab指向第二块

Pre->

next=ab->

Free(ab)

三个分配算法

首次适应算法FF

要求空闲分区链以地址递增的次序链接,在分配内存时,从链首开始顺序查找,直到找到一个大小能满足要求的空闲分区为止,然后再按照作业的大小,从该分区中划出一块内存空间分给请求者,余下的空闲分区仍停留在空闲链中。

该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。

优点:

该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区,这为以后到达的大作业分配大的内存空间创造了条件。

缺点:

低址部分不断被划分,会留下许多难以利用的,很小的空闲分区,称为碎片。

而每次查找又都是从低址部分开始的,这无疑又会增加查找可用空闲分区时的开销。

最佳适应算法BF

它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。

为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。

该算法保留大的空闲区,但造成许多小的空闲区。

为以后到达的大作业分配大的内存空间创造了条件。

该算法总是把既能满足要求,又是最小的空闲分区分配给作业。

为了加速查找,该算法要求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。

这样每次找到的第一个满足要求的空闲区,必然是最优的。

孤立地看,该算法似乎是最优的,但事实上并不一定

因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。

同时每次分配后必须重新排序,这也带来了一定的开

销。

最坏适应算法WF

最差适应算法中,该算法按大小递减的顺序形成空闲区链,分配时直接从空闲区链的第一个空闲分区中分配(不能满足需要则不分配)。

很显然,如果第一个空闲分区不能满足,那么再没有空闲分区能满足需要。

最坏适应算法与最佳适应算法的排序正好相反,它的队列指针总是指向最大的空闲区,在进行分配时,总是从最大的空闲区开始查寻。

这种分配方法初看起来不太合理,但它也有很强的直观吸引力:

在大空闲区中放入程序后,剩下的空闲区常常也很大,于是还能装下一个较大的新程序。

该算法克服了最佳适应算法留下的许多小的碎片的不足,但保留大的空闲区的可能性减小了,而且空闲区回收也和最佳适应算法一样复杂。

图3-6首次适应算法流程图

图3-7最佳适应算法流程图

图3-8最坏适应算法流程图

4心得体会

在此次实验中,我深刻了解了嵌入式内存管理系统的工作原理,实

时嵌入式的内存管理与普通操作系统有很大不同,需要达到快速性,可靠性,高效性。

通过动手操作,设置开发环境,对嵌入式软件的交叉开发环境(交叉开发环境由宿主机和目标机组成,宿主机与目标机之间在物理连接的基础上建立起逻辑连接)以及嵌入式软件实现阶段的开发过程(生成、调试和固化运行)有了深入理解。

通过阅读、运行该程序,我学到了可以通过预分配和最佳匹配的原则最大限度的减少内存碎片和内存泄露,规范了内存的使用,并培养出一种使用内存的严谨习惯。

参考文献

1张宏海,李成忠,陈祝亚,嵌入式实时系统.安徽工业大学学报:

自然科学版,2003

2俞建新.嵌入式系统基础教程.机械工业出版社,

3罗蕾.嵌入式实时操作系统及应用开发.北京航天航空大学出版社,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2