摘要:从内存管理、进程调度、消息传递以及与内存管理有关的编程等方面详细介绍Symbian OS,说明它是最适合无线信息设备的操作系统。
关键词:无线信息设备 操作系统 无线通信
无线信息设备(wireless information device)是集PDA与传统手机与一体的新型手持设备,随着无线通信网络的发展必将成为未来几年手持设备的发展趋势。这种设备与其它嵌入式设备有所不同,它面对的是广大消费者,具有型号多、功耗低、重量轻、体积小和移动性强的特性;而它的磁盘、内存、电池和CPU处理能力又都比较有限。因此,对于所采用的操作系统具有特殊的要求。
无线信息设备的操作系统占用内存要尽量少,并且支持高效的多任务及进程间通信机制;应具有有效的电源管理功能,适合利用电池供电;要连续运行多年而无需重新启动;确保用户数据安全可靠的存储;提供友好的图形用户界面;采用面向对象的设计方法,软件程序代码具有良好的可重用性;支持多种标准通信协议,以便接入国际互联网和与其它设备互连;提供开放的应用程序平台,便于第三方软件开发商提供多样的应用程序。
无线信息设备对操作系统的诸多要求中,高可靠性占了首要地位;而实现高可靠性的关键是其操作系统要具有高效的内存操作及管理机制,提供的编程机制要能够充分管理有限的内存空间,不造成任何的内存分配与回收错误。否则,极微小的内存泄漏故障经过长时间的积累都将导致灾难性的后果。
Symbian OS是由诺基亚、摩托罗拉、爱立 信、西门子等联合开发的,为无线信息设备量身定制的操作系统。它充分满足了无线信息设备对于操作系统的各项要求,得到了各厂商的青睐。现在已有多种商用无线信息设备采用了此操作系统,如诺基亚的9210、9229、7650以及爱立信的R380、R380e等。
1 Symbian OS的主要特点
Symbian OS是一个开放的操作系统。它采用基于静态优先级的抢先式多任务机制且配合时间片轮转,构成简捷、高效的内核,具有模块化的系统结构,提供了良好的扩充空间,支持强大的通信及多媒体功能。
*高可靠性。具备高效电源管理机,而且即使在电池耗尽的情况下,也能确保不丢失任何用户数据。由于采用特殊的编程规范,可以及时高效地管理系统内存资源的分配和回收,不会造成内存的泄漏。因此,以Symbian OS为操作系统的设备可连接运行多年而无须重新启动,这也是对无线信息设备的基本要求。
*采用面向对象的设计和编程,程序代码具有很好的可重用性。Symbian OS支持C++和Java两种应用广泛的面各对象编程语言,提供各种常用的32位应用程序接口函数,而且具有图形用户界面编程框架,可以方便地创建用户应用程序。系统支持Unicode,容易进行本地化。
*支持多任务、提供多种通信协议并具有一定的实时性,增强了与其它设备的互操作性。支持标准的国际互联网通信协议(TCP/IP、PPP、Telnet、HTTP)、电子邮件协议(POP3、SMTP、IMAP4);提供GPRS、WAP等标准协议栈;支持短信息;具有蓝牙协议模块;可以通过电缆或红外与PC机相连,进行数据同步和备份。
*硬件配置充分考虑了现有无线信息设备的硬件选型和未来需求。以Symbian OS为操作系统的设备采用ARM系列RISC处理器,具有较强的处理能力;利用ROM进行永久程序存储,并可通过外加快闪存储卡来扩展系统存储量;支持高分辨率彩色显示、触摸屏和笔输入,具有多媒体功能。
2 Symbian OS的系统管理机制
作为专门针对无线信息设备的操作系统,Symbian OS的突出特色是它的高效内存管理机制。另外,与其它操作系统不同,Symbian OS采用了事件驱动的消息传递代替了其它操作系统中广泛使用的多线程机制。多线程的使用会涉及上下文切换,增加系统开销,并且容易产生各种错误,增加系统运行的不稳定因素。Symbian OS可以更方便、有效地创建一个新的进程,在进程门传递消息来进行通信,而不是生成新的线程。因此,采用Symbian OS的设备运行更加稳定,可靠性更高。
2.1 内存地址的映射采用二极页表结构
现有的无线信息设备多采用32位的ARM RISC系列处理器作为中央处理器,因此,Symbian OS假设以ARM处理器作为内存管理单元(MMU),采用二级页表方式进行寻址。
如图1所示,32位的线性地址分为两部分:高20位和低12位。高20位用于选择相应的页物理地址,低12位给出在页中的偏移量,偏移量加上基址就是最终的物理地址。而高20位地址从线性地址到物理地址的转换又分两步完成。其中高12位构成页目录,低8位构成页表。这种二级页表结构对于进程的调度起着关键作用。
2.2 进程调度
Symbian OS采用基于静态优先级的抢先式多任务机制。高优先级的任务先获得处理器资源,相优先级的任务要用时间片轮转法轮流占用处理器资源。系统中有两个特权级进程:内核服务器进程和空进程。前者在系统中具有最高优先级,处理其它客房进程的要求;后者具有最低优先级,在没有任何其它进程运行时,调用电源管理子系统使设备处于休眠状态,以便节省能源。进程的各种状态及在各状态间的转换如图2所示。由于各应用程序都是单独的进程,避免了同一进程中多个线程频率调度导致上下文切换所需的内存操作,增强了系统的稳定性。
2.3 事件驱动的消息传递机制
Symbian OS4采用客房/服务器形式来简化片获得高效的进程间通信,因此系统包括多个管理程序。管理程序是不直接与用户交互的应用程序,它管理一个或多个系统资源,执行服务器的功能,响应客房请求,并通过操作系统的API函数为客户提供服务。其客户可以是应用程序或其它的管理器。
文件管理器、窗口管理器和通信管理器是Symbian OS系统中最主要的管理程序。文件管理器负责文件处理,窗口管理吕是Symbian OS高效率事件传递及处理机制的核心,通信管理器提供对多种通信协议的支持。在Symbian OS系统中,每个应用程序和管理程序都是独立的事件处理进程。窗口管理器负责提供用户、应用程序和操作系统内核间的事件传递。用户按键、笔等输入事件先传给窗口管理器,由它将事件发送给应用程序。应用程序完成相应的事件处理后,通知窗口管理器,并由窗口管理器负责处理应用程序的屏幕重画请求。事件处理过程如图3所示。通信管理器分为串行通信管理器、管道管理器和电话应用管理器三个部分。串行通信管理器提供串行通信的支持,管道管理器利用通用的管道机制支持TCP/IP、短信息数据包、红外数据接包,电话数据接口,电话应用管理器提供与GSM电话及调制器解调器相关的接口功能。
3 Symbian OS与内存操作相关的编程
Symbian OS支持C++和Java两种应用广泛的编程语言。由于操作系统本身是由C++编写的,因此,用C++去进行开发可以获得操作系统最充分的支持,使应用程序更加灵活、高效。目前,大多数Symbian OS应用程序开发者采用C++。
鉴于无线信息设备的特殊性,Symbian OS针对内存操作方面的编程具有自己的规范。开发人员遵从这一规范,就能够充分保证应用程序进行内存操作的安全性,创建稳定的应用程序。
首先,Symbian OS提供了与内存分配相关的出错处理机制。如果应用程序有一系列内存申请的连续操作,其中任何一步出现内存分配失败,都需要在出错处理程序释放所有在这步之间已成功分配的内存,以确保系统内存的正确回收。因此,编程人员在开发出错处理程序时要充分考虑应用程序中的内存使用状况,防止内存泄漏的发生。为了更有效地管理内存的分配和回收,简化开发人员的编程工作,Symbian OS提供了Eleave标识和Cleanup栈。具有Eleave标识的指针指向的内存空间可以在程序退出时被系统自动释放,Cleanup栈是系统提供的专门用于存储且具有Eleave标识的指针堆栈,开发人员可以通过调用系统函数将其清空。从堆中分配指针时,以Eleave作为指针标识,指针分配成功后将其压入Cleanup栈。如果此指针指向的对象在程序后序处理中出现申请内存的失败,系统会自动释放栈中指针指向的所有内存,并在程序调用PopAndDestroy函数时删除此指针,保证内存的有效回收。
其次,类的两步构造。标准的C++构造函数是在类的对象实例创建时自动调用的,因此,不可能人为地将其中申请的指针放入Cleanup栈中。如果类创建失败,在构造函数中分配的内存也就无法被操作系统回收。由于无线信息设备是常年连续运行而不重新启动的,因此内存的泄漏会不断积累,最终导致严重的后果。为解决这一问题,Symbian OS提出了类的创建分两步进行:第1步是按照C++本身的特性自动运行构造函数,但是在构造函数中不进行任何从堆中申请内存的操作;第2步是调用含有内存请求的类创建函数ConstructL,在ConstructL中采用Symbian OS的内存分配出错处理机制。这样的设计可以增强系统的稳定性。
最后,内存管理有关的宏。Symbian OS提供了一些检测堆中内存泄漏的宏代码,如_UHEAP_MARK,_UHEAP_MARKEND,_UHEAP_MARKENDC(aCount),_UHEAP_CHECK(aCount)等。通过在程序代码中嵌入它们可以动态监控堆的分配情况。
结束语
以上从系统管理方式及与内存管理相关的编程方法的角度介绍了Symbian OS,说明它具有高效的处理机制,高度的可靠性,充分满足了无线信息设备的需要。随着无线通信从第2代向第2.5代的过渡,以及第3代移动通信的最终实现,无线信息设备必将拥有广阔的市场前景,Symbian OS作为理想的操作系统也定会得到更广泛的应用。
- test.axf: Error: L6218E: Undefined symbol OSInit (referred from text1.o).
- [公告]单片机C语言通用处理程序范例(很好很强大很规范)
- 求助有关51单片机串口通信的问题
- 【Hercules】基于TMS570的CAN通信接口板设计第一波TMS570主板学习
- 用altium designer查看PCB,发现信号线分段,怎么回事?
- 如何应对说话含糊的领导?
- USB资料(包括PCB)
- 南京招聘:有嵌入式及硬件基础知识的Delphi BCB程序员,从事监控主站开发
- MicroPython动手做(26)——物联网之OneNET
- MSP430F5342操作MAX31856采集多路热电偶