人人范文网 范文大全

嵌入式系统三级项目

发布时间:2020-03-03 00:26:05 来源:范文大全 收藏本文 下载本文 手机版

嵌入式系统三级项目报告

——内存管理

姓 名: 学 号: 指 导 教 师:赵逢达

2016年7月

摘要

内存管理模块是计算机操作系统中一个十分重要的组成部分,直接关系到系统是否能正常运行和整个系统性能优劣。内存的分配和回收策略在通用操作系统中得到了很好的研究与实现,受硬件资源限制,这些策略不完全适用于嵌入式操作系统,它没有考虑实时性、可预测性、资源相对有限性等嵌入式操作系统特征。 下载已经编译好的文件到目标开发板上运行,体会操作系统中内存的分配模式,进程的建立以及内存的申请释放和管理。

关键词:内存管理、ARM、配置 samba 服务器

目录

前言 ....................................................................................................................................1 1 实验简介 ........................................................................................................................2 1.1 实验目的 .............................................................................................................2 1.2 实验的开发运行平台 .........................................................................................2 1.3 项目内容 .............................................................................................................2 2 实验步骤 ........................................................................................................................3 2.1 建立工作目录 .....................................................................................................3 2.2 在 root 用户下建立新用户 ...............................................................................3 2.3 配置 samba 服务器 ...........................................................................................3 2.4 编译应用程序 .....................................................................................................7 2.5 下载调试 .............................................................................................................8 2.6 实验运行结果 .....................................................................................................9 3 数据流程图 ..................................................................................................................11 3.1 创建新进程 .......................................................................................................11 3.1.1 原理 ........................................................................................................11 3.1.2 流程图 ....................................................................................................11 3.2分配内存 ............................................................................................................13 3.2.1 原理 ........................................................................................................13 3.2.2 流程图 ....................................................................................................13 3.3设置分配算法 ....................................................................................................15 3.3.1原理 .........................................................................................................15 3.3.2 流程图 ....................................................................................................15 3.4 内存回收 ...........................................................................................................16 3.4.1原理 .........................................................................................................16 3.4.2 流程图 ....................................................................................................16 3.5 三个分配算法 ...................................................................................................19 3.5.1 首次适应算法FF...................................................................................19 3.5.2 最佳适应算法BF ..................................................................................19 3.5.3 最坏适应算法WF .................................................................................20 3.5.4 流程图 ....................................................................................................20 4 心得体会 ......................................................................................................................24 参考文献 ..........................................................................................................................25

前言

在当前这个数字信息时代和网络技术高速发展的时代,嵌入式已经广泛渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术以及人们的日常生活中等方方面面。随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术和人们的生活结合的越来越密切。如何在嵌入式系统中更加有效的对动态内存进行管理也变得越来越重要。动态内存管理的基本任务是有效地对动态内存进行分配、回收,并同时保证系统的快速性、高效性、可靠性。当系统请求内存分配时,系统需要从空闲链表中找一块空闲内存给予分配,当用户不再需要时而释放某块内存,系统需要回收这块内存,已备在新的需要请求时进行重新分配。

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

通过本次试验体会操作系统中内存的分配模式;掌握内存分配的方法(FF,BF,WF);学会进程的建立,当一个进程被终止时内存是如何处理被释放块,并当内存不 满足进程申请时是如何使用内存紧凑;掌握内存回收过程及实现方法;学会进行内存的申请释放和管理;嵌入式系统不同于普通计算机系统,一般用于完成某种特定功能,要求实时性,可测性等。内存管理在嵌入式系统中是一个比较重要的问题,如果处理不好内存资源的管理,那么系统的效率将会大大降低,更严重的话系统将会无法正常运行。

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

1

1 实验简介

1.1 实验目的

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

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

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

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

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

1.2 实验的开发运行平台

UP-TECH S2410/P270 DVP嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。

PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境。

1.3 项目内容

使用Redhat Linux 9.0操作系统环境,安装ARM-Linux的开发库及编译器。创建一个新目录,并在其中编写mem.c和Makefile文件。学习在Linux下的编程和编译过程,以及ARM开发板使用和开发环境设置。下载已经编译好的文件到目标开发板上运行。

2

2 实验步骤

2.1 建立工作目录

[root@BC root]# cd .. [root@BC /]# cd arm2410cl [root@BC arm2410cl]#mkdir mem [root@BC arm2410cl]# cd mem

2.2 在 root 用户下建立新用户

[root@BC mem]# useradd user1 [root@BC mem]# pawd user1 Changing paword for user user1

New paword://输入自定义密码,例如 123456(系统会提示此密码过于简单,但无影响)

Rtye new paword://再输入一次密码

2.3 配置 samba 服务器

Samba是用来实现SMB的一种软件,由澳大利亚的Andew Tridgell 开发,是一种在Linux(Unix)环境下运行的免费软件[21]。

通过使用Samba服务器,Linux系统可以实现文件服务,在Linux 和 Win95/NT 之间实现文件的传输和共享;登陆服务器;使用Windows 客户能注册到网络上;支持SSL(Secure Socket Layer)等功能,这里主要利用Samba服务器实现Linux与Windows之间的文件传输和共享,具体配置过程如下:首先,应确保PC与Linux的网络畅通,鼠标右键点击“网上

3

邻居”——>选择“属性”——> 右键点击“本地连接”——>选择“属性”——>在弹出的“本地连接属性”中双击 “Internet协议(TCP/IP)”,将弹出“Internet 协议(TCP/IP)属性”,就可以修改本机的IP地址了;如PC机的IP地址为:192.168.1.80,需将Linux的 IP设置为与PC机在同一网段, “主菜单”——>“系统设置”——>“网络”——>“网络配置”窗口,双击“设备”标签下的“eth0”,出现“以太网设备”窗口,如图 1-1 所示。发现Linux的IP设置与PC机IP设置在同一网段,无需修改,直接选择“取消”即可。

图 1-1 Linux 下的 IP 地址设置

Linux与Windows下的IP都设置完成后,可在PC下的命令提示符(点击开始菜单,选择“运行”,输入cmd)中用命令PING 192.168.1.234 测试PC与Linux的网络是否连通。如设置成功,如下图 1-2 所示:

4

图 1-2 Linux 与 Windows 网络连接测试

其次,设置Samba服务器的共享目录。在Redhat系统中依次选择开始->系统设置->服务器设置->Samba服务器,在弹出的Samba服务器配置界面中添加一个Samba服务器共享目录,具体设置如图 1-3 所示:

图 1-3 Samba 服务器共享目录的设置

再次,要设置Linux下的防火墙,打开一个命令终端输入命令:setup 在出现的配置选项中选择Firewall,将其设置为No firewall,结果如图1-4:

5

图 1-4 Linux 的防火墙设置

向Samba服务器中添加用户,以实现在Windows下对Linux的访问。在命令终端下输入:

[root@BC mem]# smbpawd -a user1 New SMB paword://输入自定义密码

Retype new SMB paword :再次输入密码 Added user user1

最后,在Windows下运行命令程序,在其中输入Linux的IP地址,如图1-5所示:

图1-5 在 Windows 下写入 Linux 的 IP 地址

6

图1-6 连接到对话框

在弹出的对话框中输入Samba服务器的用户名和密码,即可实现 Windows与Linux之间的文件传输功能。可将文件复制到文件夹user1 下,在linux系统下,用户主目录user1位于/home目录下,每个linux 用户有一个以用户名命名的子目录。在该目录下可找到从windows系统内复制来的文件。

图 1-7 文件传输界面

2.4 编译应用程序

编译应用程序上述步骤完成后,在工作目录下可直接将mem.c编译为可执行文件。步骤如下:

7

编译命令为: 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地址的基本命令为“ifconfig eth0192.168.1.123”, 在宿主 PC 计算机上启动 NFS 服务,并设置好共享的目录。在建立好NFS共享目录以后,我们就可以进入MINICOM 中建立开发板与宿主PC机之间的通讯了。在超级终端下输入如下命令,结果如图1-8所示。

[/mnt/yaffs] mount -t nfs -o nolock 192.168.1.234:/arm2410cl /host

8

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

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

[/mnt/yaffs] cd /host [/host] cd mem [/host/mem] ./mem

2.6 实验运行结果

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

9

紧接着输入: 3,设置内存空间为 256,显示如下:

重复一次上一次操作。 再输入 : 5,显示如下:

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

10

3 数据流程图

3.1 创建新进程 3.1.1 原理

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

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

3分配失败。

创建新进程的特点就是能动态的为系统增加进程完成预想实现的功能,这样显示了动态内存分配的优越性。如果一味的静态分配则可能浪费一部分资源,这样对嵌入式系统会造成一定的打击,新系统处理事务的效率可能就会降低,实时性和可靠性都可能得不到保障。

3.1.2 流程图

11

开始创建已分配内存块指针ab为进程分配名字和IDSize>0?Yab->size=size调用allocate_mem()函数从空闲区分配内存Ret==1?&&allocate_block_head==nullY已分配内存链表首指针=abN返回1Ret==-1?Y分配不成功Free(ab)NRet==1?Y返回-1ab插入到链表开头头指针指向ab结束返回2

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

12

3.2分配内存 3.2.1 原理

内存分配是为新的进程分配进程所需要的内存单元,一般进程有需要的内存大小,按照一定的内存分配规则,如果所给空闲块的空闲空间大于所需内存块的内存空间,则进行分配,在分配时分三种情况:如果剩下的空间大于规定的最小空间,则将剩下的部分重新作为一个新的空闲内存块:如果剩下的部分小于规定的空闲块最小空间并且大于0,则将整个块都分配为空存块;如果查找的第一个空闲块的大小满足它所需要的,则查第二个是否与第一个是否为相连的空闲内存单元,如果是则将两个一起分配给请求者。

3.2.2 流程图

13

开始定义要求的内存块大小空闲链表!=null?第一块空闲块>=要求内存?YY分配后>=最小碎片大小?N分配后要求内存大小N第一块空闲块不够分割Y分割第一块空闲块Y将第一块空闲块不分割,直接分配Ytemp指向空闲链表 首地址空闲链首地址+=要求的内存大小Temp!=null?Ywork指向下一空闲块调用rearrarge()空闲区排列算法fbt指向空闲链表首地址Temp=temp->nextWork!=null?Y找下一个内存块合并两个空闲块Y当前空闲块与下一个空闲块相连?结束 图3-2 分配内存流程图

14

3.3设置分配算法 3.3.1原理

对空闲块的排序有三种算法,我们可以根据设置分配算法,来进行对三种算法:FF,BF,EF的选择。我们要输入所需的分配算法,通过Algoribhm来进行三种算法输出。若输出FF算法,之后判断空闲块是否为空,若为空,按地址递增顺序排列空闲块;若输出BF算法,之后判断空闲块是否为空,若为空,按地址递增顺序排列空闲块;若输出EF算法,之后判断空闲块是否为空,若为空,按地址递增顺序排列空闲块。

3.3.2 流程图

开始输入选择设置的分配算法Algorithm>=1&&Algorithm

15

结束

3.4 内存回收 3.4.1原理

当分配的内存块使用完毕之后需要对其今次那个回收,回收时需要新建一个空闲结点来保存该内存分配块的相关信息,以备之后又新进程再次需要时能顺利进行分配。首先是将新建的结点插入到空闲区链表的头部并将空闲区按照地址递增的顺序排列。如果当前空闲区与就免的空闲区相连,则进行合并,否则单独连接。最后对整个的空闲链表进行重新排序。

3.4.2 流程图

16

开始设置排列空闲区算法定义空闲区列表指针fbt,work开辟空闲内存块fbt指向它!fbt?Y将ab内存块内容放入fbt中fbt插入空闲链表头空闲链表头指针指向fbt调用rearrarge()空闲区排列算法fbt指向空闲区列表首指针Fbt!=null?Ywork指向下一个内存块Work!=null?Y当前空闲块与其后空闲块相连?Y合并两个空闲块fbt指向下一个空闲块调用rearrarge()空闲区排列算法结束 图3-4 释放ab进程块流程图

17

开始定义已分配内存块指针pre,abx释放第一个节点?Y首指针指向第二块释放第一块pre指向首地址ab指向第二块Ab!=free_ab?Y找下一个内存块NPre->next=ab->nextFree(ab)结束

图3-5 释放ab数据结构节点

18

3.5 三个分配算法 3.5.1 首次适应算法FF 要求空闲分区链以地址递增的次序链接,在分配内存时,从链首开始顺序查找,直到找到一个大小能满足要求的空闲分区为止,然后再按照作业的大小,从该分区中划出一块内存空间分给请求者,余下的空闲分区仍停留在空闲链中。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。

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

缺点:低址部分不断被划分,会留下许多难以利用的,很小的空闲分区,称为碎片。而每次查找又都是从低址部分开始的,这无疑又会增加查找可用空闲分区时的开销。

3.5.2 最佳适应算法BF 它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。为以后到达的大作业分配大的内存空间创造了条件。

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

缺点:为了加速查找,该算法要求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足要求的空闲区,必然是最优的。孤立地看, 该算法似乎是最优的,但事实上并不一定。

19

因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。同时每次分配后必须重新排序, 这也带来了一定的开销。

3.5.3 最坏适应算法WF 最差适应算法中,该算法按大小递减的顺序形成空闲区链,分配时直接从空闲区链的第一个空闲分区中分配(不能满足需要则不分配)。很显然,如果第一个空闲分区不能满足,那么再没有空闲分区能满足需要。最坏适应算法与最佳适应算法的排序正好相反,它的队列指针总是指向最大的空闲区,在进行分配时,总是从最大的空闲区开始查寻。

优点:这种分配方法初看起来不太合理,但它也有很强的直观吸引力:在大空闲区中放入程序后,剩下的空闲区常常也很大,于是还能装下一个较大的新程序。

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

3.5.4 流程图

20

开始定义空闲块指针temp,workTemp指向首地址Temp!=null?Ywork指向下一块空闲块Work!=null?Ywork指向地址快地址nextTemp=temp->next结束

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

21

开始定义空闲块指针temp,workTemp指向首地址Temp!=null?Ywork指向下一块空闲块Work!=null?Ywork指向地址块大小nextTemp=temp->next结束

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

22

开始定义空闲块指针temp,workTemp指向首地址Temp!=null?Ywork指向下一块空闲块Work!=null?Ywork指向地址块大小>temp指向地址块大小?Y交换两个空闲块Work=work->nextTemp=temp->next结束

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

23

4 心得体会

在此次实验中,我深刻了解了嵌入式内存管理系统的工作原理,实时嵌入式的内存管理与普通操作系统有很大不同,需要达到快速性,可靠性,高效性。

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

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

24

参考文献

1 张宏海,李成忠,陈祝亚,嵌入式实时系统.安徽工业大学学报:自然科学版,2003 2 俞建新.嵌入式系统基础教程.机械工业出版社,2015.1 3 罗蕾.嵌入式实时操作系统及应用开发.北京航天航空大学出版社,2011.1

25

嵌入式系统

嵌入式系统硬件项目设计心得

嵌入式系统实验报告

嵌入式系统学习心得

嵌入式系统课程设计

嵌入式系统实验报告

嵌入式系统实验

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统linux

嵌入式系统三级项目
《嵌入式系统三级项目.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档