电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者维修技术维修教程知识电子制作Java虚拟机应用于数字电视机顶盒的研究与实现

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

09-08 12:11:32 | http://www.5idzw.com | 电子制作 | 人气:497
标签:电子小制作,http://www.5idzw.com Java虚拟机应用于数字电视机顶盒的研究与实现,http://www.5idzw.com
摘 要:为了促使数字电视朝着基于Java虚拟机的中间件标准DVB。MHP (多媒体家庭平台)发展,简略介绍Java虚拟机的体系结构,从由Sun公司提供的基于Linux的J2ME到嵌入式操作系统OS20的移植过程,重点介绍Java本地方法调用的移植实现。实验证明,该方法能够使简单的Java程序在数字电视机顶盒上成功运行。 
关键词:Java虚拟机;数字电视;连接设备配置;本地方法 

        引    言 

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

        结构及工作原理 

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

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

        图1 Java虚拟机的工作过程 

        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语言编写的虚拟机,该虚拟机也称为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移植

[1] [2]  下一页

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