【Java开源代码栏目提醒】:网学会员,鉴于大家对Java开源代码十分关注,论文会员在此为大家搜集整理了“在ARM上实现的一种Java虚拟机 - 毕业设计”一文,供大家参考学习!
毕业设计 在ARM上实现的一种
Java虚拟机 在ARM上实现的一种
Java虚拟机 A
Java Virtual Machine Implemented On Arm 摘要 本文叙述了
Java虚拟机JVM的概念ARM体系结构的介绍及如何根据现有
代码修改和移植实现一个ARM上的
Java虚拟机—ArmJVM。
着重介绍了虚拟机的体系结构实验室已有基于WIN32平台的
代码从Windows到Linux再到Arm Linux的修改、移植、优化过程以及对移植后的虚拟机的改进工作。
其中详细介绍了ARM Linux、Linux与Windows程序设计的异同、ArmJVM虚拟机具体实现中遇到的难点和解决、gcc的内嵌汇编以及arm汇编简要介绍。
最后通过测试ArmJVM来验证其正确性和运行效率。
关键词 ARMLinuxJava虚拟机JVM本地方法动态链接gcc内嵌汇编 Abstract This paper describes the conception of
Java Virtual Machine JVM the ARM architecture and how to implement the JVM on ARM which modified and ported from the exist codes in WIN32 of my lab. It emphasizes the architecture of JVM and how to port the existed codes from Win32 platform to Linux and then to Arm Linux. It describes the details about the JVM porting including the differences between Windows Linux and Arm Linux the problem with implementing the ArmJVM on Arm machine the gcc inline asm language and the arm asm language. At last the correctness and efficiency of the implementation is validated by testing ArmJVM Key
words Arm Linux
Java Virtual Machine JVM Native Method Dynamic Link Gcc Inline Asm毕业设计 在ARM上实现的一种
Java虚拟机 目录 在ARM上实现的一种
Java虚拟机..................................................................................................1 A
Java Virtual Machine Implemented On Arm.................................................................................1 第一章 绪论.......................................................................................................................4 第二章 开发平台及运行环境.........................................................................................12 1. 硬件平台.................................................................................................................12 2. 软件平台.................................................................................................................15 3. 运行环境.................................................................................................................16 第三章 实现方案.............................................................................................................16 1. 原有
代码MiniJavaVM概述...................................................................................16 2.
代码修改重组.........................................................................................................19 3. 移植到X86 PC的Linux平台上..............................................................................19 4. 从X86 PC的Linux移植到ARM Linux...................................................................19 5.
代码的优化.............................................................................................................20 6. 移除对STL的使用..................................................................................................20 7. API的剪裁..............................................................................................................20 第四章 移植.....................................................................................................................20 1. 从Windows到LinuxX86下.............................................................................20 Makefile的编写......................................................................................................21 动态链接库的使用.................................................................................................22 编码问题.................................................................................................................29 Visual Studio C与GCC对于c的支持不同....................................................32 GCC行内汇编.........................................................................................................33 2. 从X86 Linux到ARM Linux....................................................................................36 ARM指令集及汇编
代码的重写............................................................................36 动态链接库定位问题.............................................................................................41 所需库的编译.........................................................................................................42 第五章 改进与优化.........................................................................................................43 1. 解压
代码效率分析及重写.....................................................................................43 2. API的裁剪..............................................................................................................46 第六章 验证ArmJVM的正确性.....................................................................................47 1. ArmJVM的使用方法.............................................................................................47 2. 测试操作码实现的正确性.....................................................................................50 3. 其他方面验证.........................................................................................................52 第七章 不足与后续工作.................................................................................................52 1. 本地方法.................................................................................................................52 2. I/O操作...................................................................................................................52 3. 多线程.....................................................................................................................53 4. 效率.........................................................................................................................53 毕业设计 在ARM上实现的一种
Java虚拟机 5. 后续
工作.............................................................................................................53 致谢.........................................................................................................................................54 参考文献.................................................................................................................................54 毕业设计 在ARM上实现的一种
Java虚拟机 第一章 绪论 1. 嵌入式系统 1.1嵌入式系统概述 何谓嵌入式系统根据英国电机工程师协会的定义所作的翻译“嵌入式系统为控制、监视或辅助设备、机器或甚至工厂操作的装置”。
它具备了下列四项的特性 1通常执行特定功能 2一位电脑与外围构成核心 3严格的时序与稳定性要求 4全自动操作循环 嵌入式系统是电脑软件与硬件的综合体亦可涵盖机械或其他的附属装置。
整个综合体设计的目的在于满足某种特殊功能。
嵌入式系统的架构可分为五部分处理器、内存、输入与输出、操作系统与应用软件。
他们常见于各种实验仪器、办公设备、
交通运输设备、电信设备、制造设备、建筑设备、医疗设备及个人电脑等。
嵌入式系统另外可以分为硬件及
软件两部分其中硬件的设计包括单片机控制电路的设计、网络功能设计、无线通信设计及使用接口等等嵌入式软件为信息、
通信网络或消费性电子等产品系统中的必备软件专司硬件产品的驱动、控制处理或基本接口功能以提升硬件产品的价值为该硬件产品不可或缺的重要部分它常以韧件形式如控制器或驱动程序等方式呈现。
现今嵌入式系统大多数的产品仍然以低级的8位处理器配合少量的内存与电路来作控制不过高级的毕业设计 在ARM上实现的一种
Java虚拟机 嵌入式系统产品也逐渐增加。
我们的这个ArmJVM即是运行于高级的嵌入式产品ARM7上。
1.2嵌入式系统的可移植性 嵌入式系统产品总是针对某个特定领域的应用而开发的因此嵌入式系统不存在通常意义上的可移植性。
这里我们所说的嵌入式系统的可移植性实际上指的是嵌入式开发平台缩提供的自动移植功能。
为了方便快捷的适应不同的目标系统一个移植性良好的嵌入式开发平台必须具备两个特性剪裁性和开放性。
剪裁性是指开发平台能提供多种可选的功能应用开发者可以根据性能、功耗、体积等特征参数选用一些功能舍弃一些功能开发出规模合适的应用产品。
从某种角度来说剪裁性实际上是一种针对不同应用的移植性。
开放性提供了管理和维护平台的基本途径。
开发平台是应用产品
系统开发关键部分它不仅是一种设计方法也是一种技术管理的方法。
研发部门希望不断积累的经验能以可见的知识保存起来开发经验不会随着技术人员的流失而流失这就要求开发平台在不断加强的同时符合一定的规范从而定制出满足特定要求的嵌入式系统开发平台。
通常在底层的硬件驱动程序上效率和可移植性是相互矛盾的必须找到一个折衷。
2.
Java虚拟机概述 说起
Java人们首先想到的是
Java编程语言然而事实上
Java是一种技术
毕业设计 在ARM上实现的一种
Java虚拟机 它由四方面组成:
Java编程语言、
Java类文件格式、
Java虚拟机和
Java应用程序接口
Java API。
它们的关系如下图所示1 运行期环境代表着
Java平台开发人员编写
Java代码.
java文件然后将之编译成字节码.class文件。
最后字节码被装入内存一旦字节码进入虚拟机它就会被解释器解释执行或者是被即时
代码发生器有选择的转换成机器码执行。
从上图也可以看出
Java平台由
Java虚拟机和
Java应用程序接口搭建
Java语言则是进入这个平台的通道用
Java语言编写并编译的程序可以运行在这个平台上。
这个平台的结构如下图所示1
毕业设计 在ARM上实现的一种
Java虚拟机 在
Java平台的结构中 可以看出
Java虚拟机JVM 处在核心的位置是程序与底层操作系统和硬件无关的关键。
它的下方是移植接口移植接口由两部分组成适配器和
Java操作系统 其中依赖于平台的部分称为适配器JVM通过移植接口在具体的平台和操作系统上实现在JVM的上方是
Java的基本类库和扩展类库以及它们的API 利用
Java API编写的应用程序application 和小程序
Java applet 可以在任何
Java平台上运行而无需考虑底层平台 就是因为有
Java虚拟机JVM实现了程序与操作系统的分离从而实现了
Java的平台无关性。
1 什么是
Java虚拟机
Java虚拟机是运行所有
Java程序的抽象计算机它仅仅是由一个规范来定义的抽象的
计算机。
当提及“
Java虚拟机”时可能指的是如下三种不同的东西 抽象规范 一个具体的实现 一个运行中的虚拟机实例2
Java虚拟机负责
Java程序设计语言的内存安全、平台无关和安全特性。
Java虚拟机屏蔽了与具体操作系统平台相关的信息使得
Java语言编译程序只需生成毕业设计 在ARM上实现的一种
Java虚拟机 在
Java虚拟机上运行的目标
代码字节码就可以在多种平台上不加修改地运行。
Java虚拟机JVM在多个平台上实现统一语言。
Java之所以得以大行其道除了它是一门面向对象、构造精美的语言之外更重要的原因在于它摆脱了具体机器的束缚使跨越不同平台编写程序成为可能。
3. 项目背景 越是高级的语言其编译和运行的系统开销就越大应用程序也越大运行越慢。
因此一般来说编程人员都会首选汇编语言和C语言然后才会考虑C语言或
Java语言。
但是随着不断增长的市场需求很多嵌入式设备必须适应网上交流的需要为了迎合此要求考虑到开发Internet应用
程序的便利众多开发者都发现使用
Java语言是有意义的。
而随着内存及32位处理器价格的下降最初在嵌入系统使用
Java太昂贵的问题不再有了使用
Java的成本开始减少。
于是
Java在嵌入式领域迎来了新的机会。
在嵌入式系统的应用开发中研发人员需要面对许多新的设备与新的技术同时也遇到种种限制例如运行速度、内存配置、外形尺寸以及与时间相关的技术问题。
Java具有良好的跨平台性、面向对象的特性、内在的Internet集成因此获得了大批拥有雄厚技术实力的开发商如Sun、MicroSoft等可以帮助人们顺利地完成嵌入式系统的开发而且它的优秀的面向对象特性、平台无关性和丰富的类库将大大方便开发人员的开发和调试提高工作效率。
可以相信
Java在嵌入式环境中的应用将越来越多我们有必要研究
Java技术核心—虚拟机包括其结构、运行机制及虚拟机移植到不同的嵌入式系统平台的关键技术。
毕业设计 在ARM上实现的一种
Java虚拟机
Java虚拟机JVM在多个平台上实现统一语言。
Java之所以得以大行其道除了它是一门面向对象、构造精美的语言之外更重要的原因在于它摆脱了具体机器的束缚使跨越不同平台编写程序成为可能。
Java是当今最为有生命力的一种语言。
由于它本来就是为嵌入式系统的设计所开发的所以同嵌入式Linux的结合也就顺利成章了。
Java程序语言在其产生之初就是为机顶盒设备设计的。
后来由于它在互联网上的出色表现使它赢得了巨大的声誉和财富。
现在它又回到自己原来的领地—嵌入式系统。
不过现在用
Java来开发嵌入式系统产生了许多复杂的新
问题由于新设备、新技术的出现使其在速度、内存、大小、和时间定义等方面面临着一些以前从没有遇到过的问题。
我们将在一个嵌入式设备—ARM上实现一个简单的
Java虚拟机这个
Java虚拟机能在嵌入式设备有限资源的情况下执行
Java程序。
当前国内外关于嵌入式JVM的研究一般是对其进行部分的优化比如对垃圾回收机制进行改进而且一般是对
开源项目Kaffe的改进。
并且都没有实际的可用产品而嵌入式设备的内存和存储器容量都是有限的因此对JVM程序本身的大小也有限制。
因此我们的项目将根据目标机器的实际需要进行开发并根据平台本身做相应优化根据需要对
Java API进行剪裁和修改以达到基于本平台的最大运行效率得到我们自己需要的
Java虚拟机程序。
4. ArmJVM的功能 能够装载并解析
java class文件 对于已经编译好的
java class文件能够读取该class文件的内容装载该类毕业设计 在ARM上实现的一种
Java虚拟机 并保存在程序内部的数据结构中。
当在程序运行的过程中需要解析该类时进行解析并替换符号引用为直接引用 在完成虚拟机的初始化后能够找到main函数并执行程序Error Reference source not found. 对于指定的入口类在虚拟机完成了初始化后寻找该类的main方法如果找到则执行该方法否则抛出异常虚拟机运行中止。
支持
Java虚拟机规范中规定的200多个操作码的功能 实现了
Java虚拟机的200多个操作码的功能由此使MiniJavaVM这个虚拟机模拟
Java虚拟机的功能成为可能这200多个操作码包括 栈和局部变量操作指令 将常量池入指令 从栈中的局部变量中装载值指令 将栈中的值存入局部变量指令 通用栈操作指令 类型转换指令 整数运算指令 逻辑运算指令 移位操作指令 按位布尔运算指令 浮点运算指令 对象和数组指令 对象操作指令 数组操作指令 控制流指令 条件分支指令 比较指令 无条件转移指令 表跳转指令 异常指令 finally子句指令 方法调用与返回指令 方法调用指令 方法返回指令 线程同步指令 具有内存管理和垃圾收集机制 毕业设计 在ARM上实现的一种
Java虚拟机
Java虚拟机对内存的管理使得
java程序具有很高的安全性程序员不用担心内存访问越界问题也不用为在合适的时候释放分配的空间而费心。
垃圾收集机制的存在解决何时回收不用的内存和如何回收内存的问题。
支持非本地方法调用 按照
Java虚拟机规范中的要求来设置非本地方法的调用情况包括参数压栈分配局部变量空间压入方法调用的栈桢等。
支持本地方法调用
Java虚拟机中所有与本地方法相关的部分都重新写过以动态链接库的形式为MiniJavaVM工程提供支持。
MiniJavaVM的本地方法只实现最基本的功能不再负责虚拟机的安全机制。
支持异常处理 有了异常处理就能够在程序运行时平稳处理意外情况。
根据
Java class文件中的异常表MiniJavaVM程序支持所有的异常处理并在不能解决异常时输出异常信息虚拟机停止运行。
能够运行与I/O无关的完整
Java程序并提供参数供查看运行效果提供了-version-showversion–help-–verbose命令。
version命令显示MiniJavaVM的版本信息然后退出 showversion命令显示MiniJavaVM的版本信息然后继续运行
Java程序 help-命令显示帮助信息 verbose命令输出详细数据显示运行过程 毕业设计 在ARM上实现的一种
Java虚拟机 第二章 开发平台及运行环境 1. 硬件平台 本项目采用的开发板为导师翁恺老师设计的采用的CPU为EP7312EP7312是为超低功率应用产品而设计的例如要求数字音频解压的手持设备、互联网产品和小功率工业用控制器。
该芯片的核心逻辑功能建立在一个ARM720T处理器上其运行时钟速率达74和90兆赫并带有8KB 4路联合并行处理统一高速缓存和写缓冲器。
增强的存储器管理部件与ARM720T相结合可支持成熟的操作系统例如Microsoft Windows CE和Linux. EP7312可进行超低功率运行。
它的核心运行功率仅为2.5伏它的输入输出运行范围在2.5至3.3伏之间。
该芯片有三种基本电源状态: 运行、空转和待机。
EP7312集成了一个可与许多低成本、高质量的Cirrus Logic音频转换器直接连接的接口。
通过在高度集成的EP7312上简单地增加所需内存和外设可完成一个小功率系统的解决
方案。
所有必需的逻辑接口都已集成在片上。
EP7312具有如下特性 ?? ARM7TDMI处理器和MMU支持Thumb模式 o 8KB 4路联合并行处理高速缓存 ?? 支持MP3、WMA、AAC、ADPCM、Audible等 ?? 48 KB 片上SRAM ?? 用于数字
版权管理或IP安全设计的32位唯一MaverickKey ID ?? 74兆赫和90兆赫动态时钟速率 ?? LCD控制器、中断控制器和启动ROM ?? IrDA、PWM 2 和 16550 UART 2 接口 ?? 实时时钟和两个通用16位计时器 ?? 集成外设接口 o 可与两个外部组合相连接的32位SDRAM接口 毕业设计 在ARM上实现的一种
Java虚拟机 o 8/32/16位SRAM/Flash/ROM o 非胶合数字音频加CODEC端口 o 两个同步串行接口SSI1SSI2 o 8x8键盘扫描仪和专用LED断续开关通过实时时钟控制 o 27个通用输入/输出引脚 ?? 超低功耗 o 74 兆赫下90毫瓦 o 90 兆赫下108微瓦典型值 o 待机状态下小于0.03毫瓦 ?? 封装208引脚 LQFP256球 PBGA204球 TFBGA o 可适用于消费和工业温度条件 另外还在板上加入了CS8900 NIC IC的网卡。
EP7312的内核为ARM7TDMI在ARM Linux下显示的情况如下 Processor : ARM ARM720T rev 2 v4l BogoMIPS : 65.33 Hardware : ARM-Prospector720T Revision : 0000 Serial : 0000000000000000 ARM是Advanced RISC Machine的缩写。
ARM芯片具有RISC体系的一般特点如具有大量的寄存器绝大多数操作都在寄存器中进行寻.