`
acen.chen
  • 浏览: 157385 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多

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

  引言

    随着有线广播电视网向数字化、网络化、产业化方向发展,利用有线电视网络作为传输 平台的数字电视机顶盒 除了能够让用户在现有模拟电视机上观看数字电视节目之外,广播和交互式多媒体应用功能的要求也应运而生,互动电视成为数字电视发展的方向。众多程序员熟悉的为网络广泛运用的Java语言能很好地满足机顶盒一些服务应用的要求,因此提出了包含Java虚拟机的数字电视机顶盒中间件的系统架构,该虚拟机用来执行 Java应用程序,并且中间件将应用程序和底层操作系统、硬件细节隔离开,使上层的数字电视的服务应用不必考虑过多的底层细节。本文主要介绍了J2ME中主要用于数字电视领域的CDC的移植,其中又着重介绍了本地方法(nativemethod)的实现过程。

结构及工作原理

    图1  Java虚拟机的工作过程

    Java虚拟机工作原理

    Java虚拟机处于机器和编译程序之间,在任何平台上都提供给编译程序一个共同的接口。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。

    Java虚拟机的主要任务是装载class文件并且执行其中的字节码。Java虚拟机包含一个类装载器,它可以从程序和API中装载class文件。字节码由执行引擎来执行,具体过程如图1所示。

    Java虚拟机结构

    类装载器的体系结构是Java虚拟机在安全性和网络移动 性上发挥重要作用的一个方面,图中所示的类装载器可以包含多个类装载器的子系统,Java应用程序能够在运行时决定需要安装的类,并且将被不同的类装载器装载的类存放在不同的命名空间。

    执行引擎处于Java虚拟机的核心位置,它的行为由指令集所决定,其主要作用就是解释字节码(即运行经过编译后的Java程序的class文件),不同的执行引擎实现可能非常不同。由软件实现的虚拟机的执行引擎分为一次性解释字节码、即时编译器和自适应优化器,由硬件芯片构成的虚拟机用本地方法执行 Java字节码,它的执行引擎是内嵌在芯片里。

    Java虚拟机相当于一个堆栈计算机,它在指令间传送信息时不使用任何物理寄存器,而使用堆栈的帧来表示方法的状态、字节码的操作对象、方法的参数空间及局部变量的空间,它的“程序计数器”为一个伪寄存器,是当前所执行指令的字节码数组的一个指针。

    Java实现方法

    Java有两种实现方法:Java方法和本地方法。Java方法是由Java语言编写,编译成字节码,存储在class文件中。本地方法是由其他语言(比如C,C++,或者汇编语言)编写的,编译成和处理器相关的机器代码,保存在动态连接库中,格式是各个平台专有的,它是联系Java程序和底层主机操作系统的连接方法。Java方法与平台无关,但是本地方法却不是,运行中的Java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。通过本地方法,Java程序可以直接访问底层操作系统的资源,使程序和特定的平台相关,一个本地方法接口——Java本地接口(JNI)使得本地方法可以在特定的主机系统的任何一个Java平台上运行。

    J2ME中的CDC移植的解决方案

    我们选用的要移植的Java虚拟机是Sun公司提供的J2ME对于数字电视领域CDC配置,该虚拟机是针对Linux的软件实现(用C语言编写的虚拟机,该虚拟机也称为CVirtualMachine,简称CVM)。Java虚拟机规范并没有强求Java虚拟机必须支持任何特定的本地方法接口,但是Sun 公司提供了本地方法接口(JavaNativeInterface),是为移植所用。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个数据包含JNI环境指针(env)、本地方法的函数指针(nativecode)、Java栈指针(args)、本地方法的描述符 (tersesig),Java栈的参数总数(argssize)表示静态或非静态方法的类对象标志(classobject)及用于存储返回值的一个指针变量(returnvalue),其中env要作为第一个本地方法的参数传递,并且nativecode也要传递到本地方法来实现本地方法的正确调用。

    J2ME中的CDC移植

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

    当进入汇编函数时,工作区指针为Wptr,实参、状态寄存器和指令指针寄存器的值全部自动入栈,然后是我们定义的代替Linux寄存器的局部变量自动入栈,此时的Wptr自动移到Wptr′,利用OS20的汇编指令,手动将实参传递过来的参数通过计算得到本地方法参数的个数,然后将本地方法所需的参数依次压栈,最后再手动调节工作区指针实现本地方法的成功调用。这里我们先将本地方法函数指针和1个标志位flag(0x10101010)入栈,原因有两个:

    ①当随后我们手动调节工作指针Wptr′到Wptr"时,工作栈已由先前的嵌套汇编的函数进入到了要调用的本地方法的C函数,因此先前的函数的局部变量在此时无效,也就是说此时如果用以前实参传递过来的本地函数指针调用本地的函数肯定不会成功,因此要把这个函数指针先手动保存起来。

    ②flag的设置的原因是:本地方法的参数的个数不是固定的,而OS20所提供的用汇编调用函数在回到函数入口点时只弹出Wptr"指向的4个单元的内容,因此多余的参数出栈操作也必须通过调节Wptr手动完成,通过向下移动Wptr查找flag标志,再调节Wptr到Wtpr+2即可正确地回到汇编函数。当本地方法的参数完全手动入栈后就可以手动调节工作区指针Wptr而进入到调用的本地函数,函数返回后的第一件事是保存在寄存器中的函数的返回值到 returnvalue,恢复工作区指针Wptr,并将本地方法的返回值类型作为嵌入汇编的函数的返回值,此时就完成了由Java栈到C栈的转换,并成功调用本地方法。

    图3  Java栈到本地栈的转换

    结论

    通过对Sun公司下载的CDC代码的修改与编写,对CDC中的加载的类做了一些裁减,并且将线程化的解释器改为一次性解释字节码的单线程解释器简化程序,成功地生成了在机顶盒上可以运行简单的Java程序的虚拟机。

分享到:
评论

相关推荐

    基于数字电视机顶盒的Java虚拟机的移植

    【基于数字电视机顶盒的Java...总之,基于数字电视机顶盒的Java虚拟机移植是提升交互式电视功能的重要技术手段,通过中间件和Java虚拟机的结合,实现了跨平台的软件开发和应用,为数字电视带来了更广阔的发展前景。

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

    众多程序员熟悉的为网络广泛运用的Java语言能很好地满足机顶盒一些服务应用的要求,因此提出了包含Java虚拟机的数字电视机顶盒中间件的系统架构,该虚拟机用来执行Java应用程序,并且中间件将应用程序和底层操作系统...

    数字电视机顶盒中Java虚拟机的研究

    众多程序员熟悉的为网络广泛运用的Java语言能很好地满足机顶盒一些服务应用的要求,因此提出了包含Java虚拟机的数字电视机顶盒中间件的系统架构,该虚拟机用来执行Java应用程序,并且中间件将应用程序和底层操作系统...

    解析数字电视机顶盒的关键技术

    数字电视机顶盒是现代家庭娱乐的重要组成部分,它整合了电视信号接收、解码、数据处理等多项技术,使得用户能够在传统电视机上享受到数字电视服务。数字电视机顶盒的主要组成部分包括高频头、QAM解调器、TS流解复用...

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

    1. **Java虚拟机的中间件架构**:在数字电视机顶盒中,Java虚拟机被用于执行Java应用程序,并通过中间件层隔离了应用与底层操作系统和硬件的交互。这样做的好处是提高了应用的可移植性和独立性,使得开发人员可以...

    基于数字机顶盒jvm设计

    为了满足这一需求,文章介绍了一种在数字电视机顶盒上实现增强网络交互能力的方法——即通过移植嵌入式中间件和Java虚拟机(JVM)。这不仅提高了机顶盒的功能性,而且为开发人员提供了更加灵活的编程环境。 #### 二...

    消费电子中的基于数字电视机顶盒的Java虚拟机的移植

    在消费电子领域,尤其是数字电视机顶盒中,Java虚拟机的移植对于实现交互式电视功能至关重要。这是因为Java语言具有跨平台的特性,能够帮助开发者创建能在不同硬件和操作系统上运行的应用程序。 数字电视是一种融合...

    消费电子中的数字电视机顶盒中Java虚拟机的研究

    总的来说,Java虚拟机在消费电子中的数字电视机顶盒中扮演着至关重要的角色,通过提供跨平台的执行环境和与硬件的低级别交互,促进了互动电视应用的开发和部署。通过对J2ME CDC的移植,我们可以实现Java技术在数字...

    面向MHP的嵌入式Java虚拟机的移植与优化.pdf

    本文详细介绍了如何将Kaffe移植到ALI公司的数字电视机顶盒开发平台上,并实现了Java虚拟机的全部功能。移植过程中主要涉及以下几个方面: 1. **硬件兼容性分析**:考虑到机顶盒的硬件特性,如处理器架构、内存大小...

    嵌入式系统/ARM技术中的基于ST20嵌入式系统的Java虚拟机研究与移植

    摘 要:分析了开放源码的Java虚拟机Kaffe的结构、运行机制,并针对DVB(Digital Video Broadcast)数字机顶盒软件架构中对基于Java虚拟机的MHP(Multimedia Home Platform)中间件研发的需求,研究了将Kaffe移植到...

    关于有线电视数字机顶盒的关键技术详解

    总结来说,有线电视数字机顶盒的关键技术涵盖了从射频信号接收处理到用户界面交互的全过程,实时操作系统和中间件的设计与实现是机顶盒软件开发的核心,而开发板则为技术的实验和应用提供了重要的支持。随着技术的...

    我的数字电视阅读笔记

    MHP定义了机顶盒的架构,包括硬件、嵌入式操作系统、MHEG-5引擎、Java虚拟机、中间件和应用程序等组成部分。MHP的核心目标是确保不同业务提供商之间的互操作性,具备伸缩性、更新能力、功能分离的实现,同时独立于...

    数字电视技术深入分析和实际应用

    ##### 3.5 虚拟机技术和Java机顶盒上的运用 - **JVM(Java Virtual Machine)**:运行Java程序的虚拟环境。 - **J2ME(Java 2 Platform Micro Edition)**:适用于移动设备的Java平台。 - **Xlet**:运行在Java虚拟...

Global site tag (gtag.js) - Google Analytics