文档介绍:前言从上个世纪70年代单片机的出现到今天各种嵌入式微处理器、微控制器的广泛应用,嵌入式系统有了30多年的历史。纵观嵌入式系统的发展历程,大致经历了以下四个阶段:无操作系统阶段、简单操作系统阶段、实时操作系统阶段、阶段。21世纪无疑将是一个网络的时代,将嵌入式系统应用到各种网络环境中去的呼声自然也越来越高。目前大多数嵌入式系统还在网络之外,的进一步发展,技术与信息家电、工业控制技术等的结合日益紧密,的结合才是嵌入式技术的真正未来。信息时代和数字时代的到来,为嵌入式系统的发展带来了巨大的机遇,同时也对嵌入式系统厂商提出了新的挑战。目前,技术的结合正在推动着嵌入式技术的飞速发展,嵌入式系统的研究和应用产生了如下新的显著变化:,嵌入式操作系统自身结构的设计更加便于移植,能够在短时间内支持更多的微处理器。,开发厂商不仅要提供嵌入式软硬件系统本身,同时还要提供强大的硬件开发工具和软件支持包。、新观念开始逐步移植到嵌入式系统中,如嵌入式数据库、移动代理、实时CORBA等,嵌入式软件平台得到进一步完善。,由于具有源代码开放、系统内核小、执行效率高、网络结构完整等特点,很适合信息家电等嵌入式系统的需要,目前已经形成了能与WindowsCE、PalmOS等嵌入式操作系统进行有力竞争的局面。、技术的成熟和带宽的提高而日益突出,以往功能单一的设备如电话、手机、冰箱、微波炉等功能不再单一,结构变得更加复杂,网络互联成为必然趋势。,优化关键算法,降低功耗和软硬件成本。提供更加友好的多媒体人机交互界面。第一章系统概论内存管理技术理论内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至关重要。在大部分系统语言中,比如C和C十十,您必须进行内存管理。追溯到在Apple11上进行汇编语言编程的时代,那时内存管理还不是个大问题。您实际上在运行整个系统。系统有多少内存,您就有多少内存。您甚至不必费心思去弄明白它有多少内存,因为每一台机器的内存数量都相同。所以,如果内存需要非常固定,那么您只需要选择一个内存范围并使用它即可。不过,即使是在这样一个简单的计算机中,您也会有问题,其是当您不知道程序的每个部分将需要多少内存时。如果您的空间有限,而内存需求是变化的,那么您需要一些方法来满足这些需求:确定您是否有足够的内存来处理数据。从可用的内存中获取一部分内存。向可用内存池(pool)中返回部分内存,以使其可以由程序的其他部分或者其他程序使用。实现这些需求的程序库称为分配程序(allocators),因为它们负责分配和回收内存。程序的动态性越强,内存管理就越重要,您的内存分配程序的选择也就更重要。在大部分操作系统中,内存分配由以下两个简单的函数来处理:Void*malloc(longnumbytes):该函数负责分配numbytes大小的内存,并返回指向第一个字节的指针。Voidfree(void*firstbyte):如果给定一个由先前的malloc返回的指针,那么该函数会将分配的空间归还给进程的“空闲空间”Malloc_init将是初始化内存分配程序的函数。它要完成以下三件事:将分配程序标识为己经初始化,找到系统中最后一个有效内存地址,然后建立起指向我们管理的内存的指针。malloc()的实现有很多,这些实现各有优点与缺点。在设计一个分配程序时,要面临许多需要折衷的选择,其中包括:分配的速度;回收的速度;有线程的环境的行为;内存将要被用光时的行为:局部缓存;簿记(Bookkeeping)内存开销;虚拟内存环境中的行为;小的或者大的对象;实时保证。基于malloc()的内存管理的缺点:不只是我们的内存管理器有缺点,基于malloc()的内存管理器仍然也有很多缺点,不管您使用的是哪个分配程序。对于那些需要保持长期存储的程序使用malloc()来管理内存可能会非常令人失望。如果您有大量的不固定的内存引用,经常难以知道它们何时被释放。生存期局限于当前函数的内存非常容易管理,但是对于生存期超出该范围的内存来说,管理内存则困难得多。:嵌入式系统中对实时性的保证,要求内存分配要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中地复杂而完善地内存策略,一般都采取简单、快速地内存管理策略。:嵌入式内存分配地请求必须得到满足,如果分配失败可能会带来灾难性地后果。嵌入式系统应用环境千变万化,其中有一些是对可靠性要求极高地。比如,汽车地自动驾驶系统中,系统检测到即将撞车,如果因为内存分配失败而不能执行相应的操作,就会发生车毁人亡的惨剧,这是不能容忍的。:内存分配要尽可能减少浪费。不可能为了保证满足所有的内存分配请