您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 自己动手写嵌入式操作系统
自己动手写嵌入式操作系统12第一章概述1.1嵌入式系统概述当今时代,人们的生活越来越依赖基于计算机技术和数据通信技术的电子产品,因此,有人说,当今时代是电子产品时代;也有人说,当今时代是互联网时代;还有人说,当今时代是e时代。这些都充分说明了电子产品和互联网技术给人们的生活带来的改变。但这些说法都有些偏颇,一个更接近本质的说法是“当今时代,是嵌入式系统时代”。嵌入式系统可以简单地理解为“为完成一项功能而开发的、由具有特定功能的硬件和软件组成的一个应用产品或系统”。嵌入式系统在我们的生活中到处可见,例如,手机、PDA、家里的数字电视机、全自动洗衣机等,都是嵌入式系统。当然,在我们日常生活接触不到的领域中,嵌入式系统也被广泛应用。例如,应用于通信网络中的电话交换机、光传输分叉/复用设备、互联网路由器等,都是嵌入式系统的实例。这些实例都有一个共同的特点,那就是“具备特定的用途”。比如,手机只能用于完成移动通信(移动通话、移动短信息等),而不具备数字电视的功能,同样地,数字电视只具备数字电视信号接收、解码和播放功能,以及相关的一些简单附加功能,而不具备洗衣机的功能,等等。因此,嵌入式系统一个昀基本的特点,就是“功能专一”。一般情况下,嵌入式系统是由嵌入式硬件和嵌入式软件两部分组成的。嵌入式硬件,是由完成嵌入式系统功能所需要的机械装置、数字芯片、光/电转换装置等组成,嵌入式硬件决定了嵌入式系统的功能集合,即嵌入式系统的昀终功能。嵌入式软件则是附加在嵌入式硬件之上的,驱动嵌入式硬件完成特定功能的逻辑指令。嵌入式软件可以非常简单,比如,在一些简单的自动控制洗衣机中,软件部分可能只有数百行汇编代码,系统功能基本上由硬件完成,软件仅仅起到辅助功能。嵌入式软件也可以非常复杂,比如,手机、大型通信设备等嵌入式系统,软件部分往往由数十万行,甚至数百万行代码组成,这些系统的大部分功能都是由软件逻辑实现的。通过分析这些嵌入式系统,可以发现一个规律,那就是嵌入式软件所占比重越高的嵌入式系统,其灵活性越好,功能也越强大,这很容易理解,因为软件比重大的系统中,大部分功能是由软件完成的,通过迭加更多的软件,就可以实现更多的功能。相反,若一种嵌入式系统由硬件占主导地位,则在这种系统上增加新的功能或配置将非常不方便,因为需要更换硬件。对于嵌入式系统的软件,可以进一步分为嵌入式操作系统和嵌入式应用软件。其中,嵌入式操作系统是系统软件,是直接接触硬件的一层软件,嵌入式操作系统为应用软件提供了一个统一的接口,屏蔽了不同硬件之间的差别,使得应用软件的开发和调试变得3十分方便。嵌入式应用软件则是真正完成系统功能的软件。当然,这两种软件并不是所有嵌入式系统都必需的,在一些简单的嵌入式系统中,比如在微波炉、自动控制洗衣机等嵌入式系统中,软件功能十分简单,这样就没有必要采用嵌入式操作系统,但在一些复杂的嵌入式系统中,比如在互联网路由器中,嵌入式操作系统则是必不可少的部件,因为这些嵌入式系统的应用软件十分复杂,若不采用嵌入式操作系统来进行支撑,其开发工作将十分困难,甚至无法完成。总之,嵌入式系统就是由嵌入式硬件和嵌入式软件组成的,具备特定功能的计算机系统,其中,嵌入式软件又可进一步分为嵌入式操作系统和嵌入式应用软件,如图1-1所示。错误!图1-1嵌入式系统软硬件之间的关系嵌入式操作系统是整个嵌入式软件的灵魂,起到承上启下(连接嵌入式硬件和嵌入式应用软件)的作用,而且往往也是嵌入式软件中昀复杂的部分。虽然复杂,嵌入式操作系统的功能接口却相对标准化和统一,功能差异很大的嵌入式系统,往往可以采用相同的嵌入式操作系统来进行设计,比如,一台复杂的数字控制机床的控制系统与一架军用飞机的控制系统,可能采用了相同的嵌入式操作系统,仅仅是具体的应用软件不同。因此,嵌入式操作系统可以被理解为通用软件,不同的嵌入式操作系统,除了性能上的差异和实现细节上的差异之外,功能部分往往是相同的。在本书中,我们介绍一个嵌入式操作系统的功能及其功能的实现细节。嵌入式硬件嵌入式操作系统嵌入式应用软件嵌入式软件自己动手写嵌入式操作系统141.2嵌入式操作系统概述从上面的描述中我们知道,嵌入式操作系统是嵌入式系统中的软件部分,且是软件部分的核心内容。嵌入式操作系统在本质上也是一个操作系统,其一些概念与通用计算机操作系统是一致的,但由于应用环境的不同,嵌入式操作系统与通用操作系统有一些区别,且嵌入式操作系统本身具备一些通用操作系统所不具备的特性。在本节中,我们对嵌入式操作系统本身具备的一些特点,以及与通用操作系统的区别进行简单描述。1.2.1嵌入式操作系统特点一个典型的嵌入式操作系统应该具备下列特点:1.可裁剪性可裁剪性是嵌入式操作系统昀大的特点,因为嵌入式操作系统的目标硬件配置差别很大,有的硬件配置非常高档,有的却因为成本原因,硬件配置十分紧凑,嵌入式操作系统必须能够适应不同的硬件配置环境,具备较好的可裁剪性。在一些配置高、功能要求多的情况下,嵌入式操作系统可以通过加载更多的模块来满足这种需求;而在一些配置相对较低,功能单一的情况下,嵌入式操作系统必须能够通过裁剪的方式,把一些不相关的模块裁剪掉,只保留相关的功能模块。为了实现可裁剪,在编写嵌入式操作系统的时候,就需要充分考虑,进行仔细规划,把整个操作系统的功能进行细致的划分,每个功能模块尽量以独立模块的形式来实现。对于裁剪的具体实现,可通过两种方式。一种方式是把整个操作系统功能分割成不同的功能模块,进行独立编译,形成独立的二进制可加载映像,这样就可以根据应用系统的需要,通过加载或卸载不同的模块来实现裁剪。另外一种方式,是通过宏定义开关的方式来实现裁剪,针对每个功能模块,定义一个编译开关(#define)来进行标志。若应用系统需要该模块,则在编译的时候,定义该标志,否则取消该标志,这样就可以选择需要的操作系统核心代码,与应用代码一起编联,实现可裁剪的目的。其中,第一种方式是二进制级的可裁剪方式,对应用程序更加透明,且无需公开操作系统的源代码,第二种方式则需要应用程序详细了解操作系统的源代码组织。52.与应用代码一起连接嵌入式操作系统的另外一个重要特点,就是与应用程序一起,连接成一个统一的二进制模块,加载到目标系统中。而通用操作系统则不然,通用操作系统有自己的二进制映像,可以自行启动计算机,应用程序单独编译连接,形成一个可执行模块,并根据需要在通用操作系统环境中运行。3.可移植性通用操作系统的目标硬件往往比较单一,比如,对于UNIX、Windows等通用操作系统,只考虑几款比较通用的CPU就可以了,比如Intel的IA32和PowerPC。但在嵌入式开发中却不同,存在多种多样的CPU和底层硬件环境,光CPU,流行的可能就会达到十几款。嵌入式操作系统必须能够适应这种情况,在设计的时候充分考虑不同底层硬件的需求,通过一种可移植的方案来实现不同硬件平台上的方便移植。比如,在嵌入式操作系统设计中,可以把硬件相关部分代码单独剥离出来,在一个单独的模块或源文件中实现,或者增加一个硬件抽象层,来实现不同硬件的底层屏蔽。总之,可移植性是衡量一个嵌入式操作系统质量的重要标志。4.可扩展性嵌入式操作系统的另外一个特点,就是具备较强的可扩展性,可以很容易地在嵌入式操作系统上扩展新的功能。比如,随着Internet的快速发展,可以根据需要,在对嵌入式操作系统不做大量改动的情况下,增加TCP/IP协议功能或HTTP协议解析功能。这样必然要求嵌入式操作系统在设计的时候,充分考虑功能之间的独立性,并为将来的功能扩展预留接口。1.2.2嵌入式操作系统与通用操作系统的区别1.地址空间上的区别一般情况下,通用操作系统,充分利用了CPU提供的内存管理机制(MMU单元),实现了一个用户进程(应用程序)独立拥有一个地址空间的功能,比如,在32位CPU的硬件环境中,每个进程都有自己独立的4GB的地址空间。这样每个进程之间相互独立,互不影响,即一个进程的崩溃,不会影响另外的进程,一个进程地址空间内的数据,不能被另外的进程引用。嵌入式操作系统多数情况下不会采用这种内存模型,而是操作系统和应用程序共用一个地址空间,比如,在32位硬件环境中,操作系统和应用程序共享4GB的地址空间,不同应用程序之间可以直接引用数据。这类似于通用操作系统上的线程模型,即一个通用操作系统上的进程,可以拥有多个线程,这些线程之间共享进程的地址空间。自己动手写嵌入式操作系统16这样的内存模型实现起来非常简单,且效率很高,因为不存在进程之间的切换(只存在线程切换),而且不同的应用之间可以很方便地共享数据,对于嵌入式应用来说,是十分合适的。但这种模型的昀大缺点就是无法实现应用之间的保护,一个应用程序的崩溃,可能直接影响到其他应用程序,甚至操作系统本身。但在嵌入式开发中,这个问题却不是问题,因为在嵌入式开发中,整个产品(包括应用代码和操作系统核心)都是由产品制造商开发完成的,很少,需要用户编写程序,因此整个系统是可信的。而通用操作系统之所以实现应用之间的地址空间独立,一个立足点就是应用程序的不可信任性。因为在一个系统上,可能运行了许多不同厂家开发的软件,这些软件良莠不齐,无法信任,所以采用这种保护模型是十分恰当的。2.内存管理上的区别通用的计算机操作系统为了扩充应用程序可使用的内存数量,一般实现了虚拟内存功能,即通过CPU提供的MMU机制,把磁盘上的部分空间当做内存使用(详细信息请参考本书“HelloChina的内存管理机制”一章)。这样做的好处是可以让应用程序获得比实际物理内存大得多的内存空间,而且还可以把磁盘文件映射到应用程序的内存空间,这样应用程序对磁盘文件的访问,就与访问普通物理内存一样了。但在嵌入式操作系统中,一般情况下不会实现虚拟内存功能,这是因为:(1)一般情况下,嵌入式系统没有本地存储介质,或者即使有,数量也很有限,不具备实现虚拟内存功能的基础(即强大的本地存储功能);(2)虚拟内存的实现,是在牺牲效率的基础上完成的,一旦应用程序访问的内存内容不在实际的物理内存中,就会引发一系列的操作系统动作,比如引发一个异常、转移到核心模式、引发文件系统读取操作等一系列动作,这样会大大降低应用程序的执行效率,使得应用程序的执行时间无法预测,这在嵌入式系统开发中是无法容忍的。因此,权衡利弊,嵌入式操作系统首选,是不采用虚拟内存管理机制,这也是嵌入式操作系统与通用的操作系统之间的一个较大的区别。3.应用方式上的区别通用的操作系统在使用之前必须先进行安装,安装包括检测并配置计算机硬件、安装并配置硬件驱动程序、配置用户使用环境等过程,这个过程完成之后,才可以正常使用操作系统。但嵌入式操作系统则不存在安装的概念,虽然驱动硬件、管理设备驱动程序也是嵌入式操作系统的主要工作,但与普通计算机不同,嵌入式系统的硬件都是事先配置好的,其驱动程序、配置参数等往往与嵌入式操作系统连接在一起,因此,嵌入式操作系统不必自动检测硬件,因而也无需存在安装的过程。除了上述特点与区别外,嵌入式操作系统还有一些其他自身特点,在此不再详述,有兴趣的读者可参阅相关资料。71.2.3嵌入式实时操作系统另外一个需要提及的概念,就是嵌入式实时操作系统。嵌入式实时操作系统也是嵌入式操作系统的一种,顾名思义,嵌入式实时操作系统一般应用于对时间要求十分苛刻的场合,比如高精度的数字控制机床、通信卫星控制系统等。嵌入式实时操作系统对外部事件的响应时间是有严格控制的,一般有一个底限,在这个底限之内,需要对外部发生的事件进行响应,这样嵌入式实时操作系统在设计的时候,必须充分考虑这些要求。但需要说明的是,一个实时系统并不是由嵌入式实时操作系统自身决定的,而是由嵌入式硬件、嵌入式操作系统、嵌入式应用软件等共同决定的,单一因素,比如嵌入式操作系统无法决定整个系统的实时性,这很容易理解。还有一种对嵌入式操作系统的实时性进行描述的说法叫做“半实时操作系统”。这种操作系统不像严格的实时操作系统(姑且叫做硬实时操作系统)对事件的相应有一个严格的底限,但又与普通操作系统对外部事件相应的不确定性有所区别,介于两者之间。
本文标题:自己动手写嵌入式操作系统
链接地址:https://www.777doc.com/doc-4496904 .html