基于android的嵌入式系统研究及开发源代码内容摘要:
运行效率上明显比传统的 Java 虚拟机要高 许多。 Dalvik 虚拟机对内存的高效使用和在低速的 CPU 上表现出的高性能,确实让人们刮目相看。 Android 的上层应用程序虽然是用 Java 开发的,但是 Dalvik 虚拟机却和传统的Java 虚拟机有着很大的区别,两者是不兼容的。 首先,众所周知在 Java 中,所有的程序代码会被编译器编译成字节码( .class)应用程序进程 调用 Runtime 中Android 函数库函数 Android Libraries Android Runtime Dalvik 虚拟机 交给 Dalvik 虚拟机进行处理 Libraries Dalvik 虚拟机调用 Libraries 中相应函数 图 22 应用程序调用 Android Libraries中函数的过程 本科毕业论文 Google Android手机嵌入式系统的研究与开发 8 文件,然后再打包成 JAR文件,在执行时 Java虚拟机就从 JAR文件中提取出相应的字节码文件来执行。 在 Android 中不再使用字节码文件而是一种 Android 所特有的DEX( Dalvik EXecutable)文件。 DEX文件的生成还是需要经过生成字节码文件的这个过程的。 使用 Java语言编写好的 Android 程序代码,同样是先用 Java编译器编译成为字节码文件,但是在这之后还需通过 Google 提供的一个 DX工具将编译好的字节码转换成为 DEX 文件,然后 Dalvik 虚拟机通过 DEX 文件获得执行的代码。 Google 弃用字节码文件而采用特有的 DEX 文件格式,这表明在 Android 实际运行中 DEX 文件格式相对于字节码文件格式应该有一些独特的优势。 在 Java 中当一个应用程序定义了多个类后,通过编译则会产生相应数目 的 class 字节码文件,在这些字节码文件中则必然会有冗余信息,例如一些相同的类库会冗余等。 而 DEX文件格式则是把这些 class 字节码文件整合到一个 DEX 文件中,使得字节码中的冗余减少了,同时使整体文件的尺寸也减少了。 这样一来,对于同一个应用程序来说,相对于 Java的字节码文件 Android 的 DEX 文件格式在 I/O 操作中所需要的时间也减少了,同时也减少了查找类所需要的时间。 另外 DEX使用等长的指令,这样的话能够使得 DEX文件尽量的简洁,从而提高了解析速度。 通过上面的研究可以看出 DEX文件格式是一种专为 Dalvik虚拟机设计的压缩格式,该格式的高性能很适合内存和处理器速度有限的平台,从中可以看出 Android 是定位于嵌入式平台的一个操作系统。 在这也体现出了Google 给 Android 所定义的发展以及战略方向,如今移动平台的网络应用已经成为当前移动终端设备的发展方向,作为网络搜索的龙头大哥, Android 就是其打入该移动平台网络应用的利器。 Android 应用开发和 Dalvik 虚拟机同样都使用 Java 开发语言,在应用程序开发好以后我们就需要将这个应用发布到 Android 移动终端设备。 我们把一个开发好的应用的 Java 代码经过编译以后生成 .class 的字节码文件,通过 Android 的 DX 工具转换成 .DEX格式的文件,最后使用 Android 的 appt打包工具把 DEX文件,源文件以及 文件组合成一个 APK应用程序包,然后就能发布到移动终端设备上了。 在 APK 应用程序程序包发布到移动终端设备后,应用程序运行前会对其中的DEX 文件进行优化,优化后的文件格式称之为 DEY, DEY 文件被保存到缓存区域,虚拟机会在缓存中执行这些文件。 其次,传统的 Java 虚拟机是采用的是基于栈的设计,而 Dalvik 虚拟机则是基于寄存器设计的。 基于栈设计的虚拟机能够使指令变得简单,不需要考虑程序中的源寄存器和目的寄存器,只需要开辟栈空间而不需要为临时变量再开辟一个存储空间。 另外基于栈设计的虚拟机移植性比基于寄存器设计的虚拟机要高很多,从组成原理和嵌入式操作系统课程中我们知道,一般的 32 位 x86处理器的通用寄存器和 32位的 ARM的通用寄存器数目是不同的。 虚拟机的设计中,为了执行的效率,有时会把这些寄存器一一映射本科毕业论文 Google Android手机嵌入式系统的研究与开发 9 到物理寄存器上,但是由于平台的不同,导致通用寄存器数量不同造成如果基于寄存器设计的虚拟机很难做到一一映射,执 行效率就会大打折扣。 而用基于栈的设计的话,就不存在这种问题,就很容易的分配寄存器。 另外,基于栈设计的虚拟机采用的是零地址指令,这样的话指令形式比较紧凑。 虽然基于栈结构的虚拟机有上述的一些优点,但是为什么 Google 不采用基于栈的设计而采用基于寄存器结构设计 Dalvik 虚拟机呢。 我个人觉得这是和 Android 所搭载的平台以及 Google 的战略有关的。 首先, Android 所搭载的主要平台为移动终端设备,如今的移动终端设备虽然性能比过去好多了,但是还是无法摆脱 CPU 处理能力低于桌面 PC,存储资源有限的限制,在这 样一个平台上使用基于栈的设计,在指令执行时必定会多出一个进栈( PUSH)和出栈( POP)的操作,那一定会影响指令执行的效率,这也是为什么我们在一些手机平台上运行 Java 程序时感到很慢的原因了。 其次从 Google 对 Dalvik 虚拟机设计中采用的 16个通用寄存器中可以看出 Android的发展方向是基于 ARM 的硬件平台,这也和 Google 的战略方向相一致。 虽然移植性降低了,但是使用二地址和三地址的指令,使得代码执行效率大大提高。 另外, Dalvik虚拟机虽然没有采用现在流行虚拟机技术例如 JIT( just in time,及时编译)技术,但是 Dalvik 虚拟机仍然是一个具有很高性能的虚拟机,在这不得不说一下, Dalvik虚拟机是一个设计相当不错的虚拟机。 从 Dalvik 虚拟机的设计上我们可以看到Google 打算用 Android 系统来冲击手机移动终端设备,想把其提供的服务扩展到移动设备上的战略。 另外, Dalvik 虚拟机的设计方面也有其独特的地方。 它就是本着能够并发执行多个虚拟机的设计思路来编写的。 每一个 Dalvik 虚拟机实例对应于一个应用程序,同时这个虚拟机实例还都是一个进程空间。 换句话说就是一个应用对应一个 Dalvik 虚拟机同时对应一个进程空间。 不同的应用程序在不同的 Dalvik 虚拟机实例中运行,不同的 Dalvik 虚拟机又对应于不同的进程空间,加之不同的应用程序在 Linux 内核中以不同的 Linux 用户来执行,这样可以最大限度的保证应用程度的独立性和安全性。 但 Dalvik 虚拟机要实现如线程机制,内存的分配和管理等操作的话,仍然需要底层操作系统的支持。 另外 Dalvik 虚拟机线程机制中的一个线程对应于 Linux 中相应的一个线程,这样操作系统中的线程就能最大限度的为 Dalvik 虚拟机服务。 通过这样的一个设计, Android 的安 全性大大提高了。 说到 Dalvik 虚拟机,那就应该说说虚拟机中的一个特殊的虚拟机进程 Zygote,之前说过一个 Dalvik虚拟机对应一个进程空间。 Zygote进程的功能有点类似于 Linux中的 1 号进程,在 Linux 当系统启动时即产生 1号进程,而其他的进程都由 1 号进程创建。 在 Dalvik 虚拟机中 Zygote 进程 fork出所有的虚拟机进程,每当系统提出执行一个 Android 应用时,需要一个 Dalvik 虚拟机是, Zygote 就会 fork 出一个子进程来执行该应用。 使用它可以加快系统的执行,因为 Zygote 进程在系 统启动时就产本科毕业论文 Google Android手机嵌入式系统的研究与开发 10 生,已经完成了虚拟机的初始化,预置类库的加载和初始化等等操作。 当我们要执行一个应用而建立一个虚拟机时,只需让 Zygote 进程自身复制,这样就可以减少虚拟机初始化等操作的时间。 另外,对于一些只读库所有虚拟机实例都和 Zygote 进程共享一块内存区,这样大大减少了对内存的开销。 Android 的进程管理机制 Android 虽然是基于 Linux,但是它却采用了一种有别于 Linux 的一种管理机制。 Linux在一个进程活动停止后就立刻结束该进程,而 Android 在一个进程活动停止后不会立刻结束 该进程,并使该进程常驻内存中。 直到系统资源不够需要更多内存或者当某个结束进程的事件发生时才将该进程结束。 在 Android 中进程被分成了前台进程( foreground)、可见进程( visible)、次要服务( secondary server)、后台进程( hidden)、内容供应节点( content provider)、空进程( empty)六种。 ⑴前台进程是指一些系统进程和当前屏幕上正在显示的进程。 比如说你打开Google 地图查找路线,此时 Google 地图就是一个前台进程。 ⑵可见进程则是那些虽然不在前台 ,但是用户依然可见的进程,如输入法,时钟等,这些进程虽然不是在前台运行的,但是其存在和我们的使用却是密切相关的,如果关闭了这些应用程序将给我们的使用带来非常大的不便⑶次要服务是一些与系统功能息息相关的服务,如Google 企业套件等。 ⑷后台进程,可以这么说后台进程就是一个前台进程被另一个前台进程替换后,进程没有结束,但是已经不再是前台进程的一个状态。 在实际应用中就是当一个前台进程运行时按 HOME 键后的进程状态⑸内容供应节点是没有程序实体,而是仅仅提供内容给别的程序使用的比如说日历节点⑹空进程是没有任何东西在运 行的进程,在一个程序退出后会有一个没有任何数据和代码在运行但是依然驻留在进程空间中的进程,该进程仅仅是作为一个能够提高该程序下次启动速度和记录程序历史记录的进程。 Android 在调度以上几种进程时使用了一个系统值作为系统对进程的一个评估,当要结束一个进程时该值的数值越大的进程被系统选中并结束的概率越大。 一般的,前台进程的值为 0,这表明前台进程不可能被系统选中并结束。 当进程进入后台以后,系统将会分配一个更高的值给该进程。 相对于 Linux 的最近最早未使用的调度策略,Android 在其基础上提供了一套独特的进 程管理模块,他能让程序员使用脚本来对内存管理进行定制。 比如当内存小于某个值时可以结束这个系统值大于另外一个值的进程,还可以当内存小某个值时结束上面六类进程中的一类(但顺序必须是空进程,内容供应节点,后台进程,次要服务,可见进程,最后才是前台进程)。 根据这种特性 该系统值至少由两部分组成,一个是基值,另一个根据 LRU(最近最久未使用)调度算法产生的一个值。 对于以上说的六种进程应该分别有一系统给其赋予的值,其大小本科毕业论文 Google Android手机嵌入式系统的研究与开发 11 顺序应该是空进程大于内容供应节点大于后台进程大于次要服务大于可见进程大于前台进程,而这个系统赋予的值 则是基值。 这样就能保证一些这六种进程总是当一种进程被结束完了以后另外一种进程才会被结束,同时只需要根据这个系统值就能轻易做到对内存管理的定制。 应用程序框架层 在 Android 系统构架图中可以看到,应用程序框架层是处于 Android Runtime 和库函数层于应用程序层之间,之前的叙述中知道,该层使用开发语言的是 Java 语言。 应用程序框架是能够让开发者完全访问核心应用程序所使用的 API( Application Programming Interface,应用程序编程接口),该框架能够让组件软件 重用的工做简单化。 同时该框架中的任何一个功能模块都是等价的,任何一个应用程序都可以发布其功能模块,该功能模块可以替代当前的任意一个功能模块,但前提是必须遵循框架的安全限制 [ 4] ,另外,其他的任意应用程序能够使用这个发布的功能模块。 这样的设计就使 Android 的构件重用率提高了。 在每一个应用程序背后,应用程序框架为其提供了一系列的服务。 这些服务包括:①一个丰富并且可扩展的视图,通过这个视图我们可以使用它提供的一些包括按钮、文本框、列表、网格等甚至可嵌入的 web浏览器的应用程序来构造我们的应用程序。 ②内容提 供器( content providers),有了内容提供器,一个应用程序可以共享它自己的数据或者访问另外一个应用程序中共享的数据。 ③资源管理器( resource manager),使用资源管理器,我们在应用程序中能够访问到一些如图形、布局文件等一些非代码资源。 ④通知管理器( notification manager),给程序员提供了一个可以在程序状态栏中显示自定义提示信息的管理器。 ⑤活动管理器( activity manager),提供常用导航功能用来管理应用程序生命周期的服务。 通过这些应用程序框架层提供的服务 程序员能够方便的开发一个界面优秀功能强大易于共享的的应用程序。 应用程序层 回到 Android 系统构架图中,应用程序层包括了如名片管理、。基于android的嵌入式系统研究及开发源代码
相关推荐
生茎腐病俗称“倒秧病”、“卡脖病”、“死秧”,常引起花生整株或侧枝死亡,造成严重减产。 茎腐病症状在幼苗期主要表现为子叶发生黑色腐烂。 花生感病初期,地上部叶色变淡,叶片下垂,复叶闭合,随着病情的发展,叶柄全部下塌,整株萎蔫。 成株期多在基部第一对侧枝上下发生,长出许多黑色小突起,引起侧枝分期死亡。 据观察,该病主要发生在 5 月6 月上旬。 6 月下旬为第一次发病高峰期,8 月上旬9
第四章 数据库设计 数据库结构 服务器数据库为总数据源,每一个客户端都拥有独立的小型数据库。 客户端数 据库信息从服务器端同步获得。 服务器的数据库是基于 Mysql 建立,客户端数据库是基于 SQLite 建立。 数据库体系结构如图 所示。 图 数据库体系结构图 服务器数据库设计: ER 关系如图 所示。 图 服务器数据 ER 图 根据上面的 ER 图,本软件服务器端定义的 arashmen
系列微处理器为可综合处理器,使用单一的处理器内核提供了微控制器、 DSP、 Java 应用系统的解决方案,极大的减少了芯片的面积和系统的复杂程度。 ARM9E 系列微处理器提供了增强的 DSP 处理能力,很适合于那些需要同时使用 DSP 和微控制器的应用场合。 ARM9E 系列微处理器的主要特点如下: - 支持 DSP 指令集,适合于需要高速数字信号处理的场合。 - 5 级整数流水线
from within the Eclipse IDE. 2) Choose Help | Software Updates | Find and Install. 3) In the Install/Update window, which allows you to begin the process of downloading and installing any of the
源滤波器之后,电源电路输出端的纹波只有 6~8mV 了。 在主控板的电源输入端分别再对177。 15V、177。 5V 加一级 LC 滤波,最后把纹波控制在 6mV 以下了。 主控电路保护二极管: 二极管用以防止电流倒灌 ,防止 烧坏电源。 四、 系统的软件设计 、程序流程图 基于 89C52 的数控直流电源 13 开 始 ‘ +’键按下还是‘ ’键按下。 Flag标志位置‘ 1’