Java虚拟机应用于数字电视机顶盒的研究与实现

[10-10 20:38:44]   来源:http://www.88dzw.com  电子制作   阅读:8497

文章摘要: J2ME中的CDC移植的解决方案 我们选用的要移植的Java虚拟机是Sun公司提供的J2ME对于数字电视领域CDC配置,该虚拟机是针对Linux的软件实现(用C语言编写的虚拟机,该虚拟机也称为C Virtual Machine,简称CVM) 。Java虚拟机规范并没有强求Java虚拟机必须支持任何特定的本地方法接口,但是Sun 公司提供了本地方法接口(Java Native Interface) ,是为移植所用。Java程序通过调用本地方法和主机交互。 Java虚拟机 图2Java虚拟机的位置 虚拟机处于嵌入式操作

Java虚拟机应用于数字电视机顶盒的研究与实现,标签:电子小制作,http://www.88dzw.com

        J2ME中的CDC移植的解决方案 

        我们选用的要移植的Java虚拟机是Sun公司提供的J2ME对于数字电视领域CDC配置,该虚拟机是针对Linux的软件实现(用C语言编写的虚拟机,该虚拟机也称为C Virtual Machine,简称CVM) 。Java虚拟机规范并没有强求Java虚拟机必须支持任何特定的本地方法接口,但是Sun 公司提供了本地方法接口(Java Native Interface) ,是为移植所用。Java程序通过调用本地方法和主机交互。 

        Java虚拟机 

        图2 Java虚拟机的位置 

        虚拟机处于嵌入式操作系统OS20 上,因此Sun公司提供的Java虚拟机中与底层操作系统相关的操作都应该替换为OS20的内核函数。因此将Sun公司提供的CDC移植到OS20需要完成一些工作,比如: C语言中关于基本数据类型的数据位的修改,关于线程的创建机制(OS20为任务) ,关于线程之间的同步、互斥,关于动态连接的实现,关于本地方法的实现等,本节主要介绍关于本地方法的实现过程。 

        本地方法 
        解释器处理字节码时,与给定字节码有关的动作的语义、执行字节码的相关动作大多是从堆栈中获得其操作数,并将其结果送回堆栈中。典型的情况下字节码是带有参数的,这些参数在字节码流中紧跟在字节码自身之后。

        在虚拟机解释字节码过程中,执行引擎会不时遇到请求本地方法调用的指令,虚拟机负责试着发起这个本地方法的调用。本地方法是Java虚拟机指令集的一种可编程扩展,运行这个本地方法就是Java虚拟机对这条指令的执行。 

        本地方法函数调用 
        为了增加虚拟机的性能,加快其速度,解释器在处理一些字节码时调用的本地方法函数用汇编实现了将Java栈转换为C栈,然后在C堆栈上实现函数的调用。Linux下是用独立的汇编语言程序invokeNative_i386。 S实现函数CVMjniInvokeNative () ,我们采用在C里面嵌入汇编的形式来实现该函数。 

        该函数的形参有7个,完成的主要功能是将由实参传递来的部分数据通过直接或者运算后得到本地方法的参数,然后压入本地栈,通过汇编来实现本地的C函数调用。实参传递过来的7个数据包含JN I环境指针(env) 、本地方法的函数指针(native code) 、Java栈指针(args) 、本地方法的描述符(terse sig) , Java栈的参数总数(args size)表示静态或非静态方法的类对象标志(class object)及用于存储返回值的一个指针变量(return value) ,其中env要作为第一个本地方法的参数传递,并且native code也要传递到本地方法来实现本地方法的正确调用。 

        J2ME中的CDC移植 
        由于Linux有多个通用寄存器,在实现该函数的代码中充分运用了如esp、ebp、esi等寄存器,但是OS20提供的可操作的寄存器只有3个通用寄存器Areg、Breg、Creg和1个工作指针寄存器Wptr (相当于堆栈指针) ,在实现过程中,我们用在C函数中设立局部变量来代替Linux的通用寄存器,通过手动调整工作栈指针来实现本地方法的调用,具体实现过程如图3所示。 

上一页  [1] [2] [3]  下一页


Tag:电子制作电子小制作维修教程知识 - 电子制作