0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Sti5516芯片的Java虚拟机的软件架构研究

牵手一起梦 来源:微计算机信息 作者:佚名 2020-09-19 17:19 次阅读

1 引言

随着现代信息技术的迅猛发展,电视数字化步伐加快了。从一开始的模拟电视到现在的数字电视,不仅大大提高了电视节目的质量,也推动了电视数字化的进一步发展。在各种数字视频广播标准中,欧洲的DVB(Digital Video Broadcast)标准使用比较广泛,它为在同一信道中传输视频、音频、数据提供了一种灵活、高效的方式,可以通过卫星、电缆和地面信道传输高质量的电视节目。同时基于DVB的数据广播标准也能满足人们对于宽带数据业务的要求,如证券信息服务、电子节目、MP3音乐下载、电子邮件、网页浏览等,在现代信息技术领域应用极为广泛。

基于Sti5516芯片的Java虚拟机的软件架构研究

图一数字机顶盒架构

从图一我们可以看到, 一个完整的数字机顶盒由硬件平台和软件系统组成,可以将其分为4层,从底向上分别为硬件、底层软件、中间件、应用软件。硬件提供机顶盒的硬件平台;底层软件提供操作系统内核以及各种硬件驱动程序;应用软件包括本机存储的应用和可下载的应用;中间件是一种将应用程序与底层的操作系统、硬件细节隔离开来,使应用不依赖于具体的硬件平台的软件环境。这样用户可以在任何厂家的硬件平台上进行应用软件开发,和应用软件下载。而不必介意任何底层的有关信息,保证了机顶盒的开发专业化。这种分层的思想在现代系统设计中十分常见,如大名鼎鼎的TCP/IP协议。中间件通常由各种虚拟机来构成,如HTML虚拟机、JavaScript虚拟机、Java虚拟机等。

现在广电行业倾向于DVB-MHP(多媒体家庭平台)中间件标准。DVB-MHP基于开放性的Java程序语言,具有软硬件兼容性好、可移植成本低、二次再开发功能强等优点,是一种很有发展前途的中间件技术标准。可以相信,Java在数字视频广播中的应用将越来越多,我们有必要研究Java技术核心—虚拟机,包括其结构、运行机制及虚拟机移植到数字机顶盒平台的关键技术。本文面向采用ST(意法半导体公司)Sti5516芯片的数字机顶盒平台,将基于数字电视播放(Digital Video Broadcast,DVB)的多媒体家庭平台(Multimedia Home Platform,MHP)规范进行中间件平台分析,重点研究开放源码的Java虚拟机---Kaffe在其中的作用和相关的移植技术。

2 平台介绍

2.1 硬件平台

数字机顶盒硬件平台基于ST公司的芯片Sti5516,Sti5516芯片集成了CPU内核ST20-C2、音/视频MPEG-2解码器、PAL/NTSC/SECAM编码器等。开发板上有8MB的共享内存和16MB的外部内存,4MB的Flash,并采用实时处理的嵌入式操作系统OS20。

2.2 软件平台

一个典型的适用于嵌入式的Java运行环境包括以下组件:

1.一个Java虚拟机。用来将独立于平台的Java字节码解释成目标机本地机器码,并执行动态类加载。这可以采取解释执行或实时编译执行(JIT)的形式。两者的不同点就在于字节码的执行速度;因为JIT避免了重复解释以前执行过的程序块。

2.一个标准Java类库集,以字节码的形式存在。如果应用程序并不引用任何类库,那这些类库就并不一定要求存在。

3.任何类库或虚拟机所需的本地方法(JNI)。这些函数是由其它高级语言所写,并和Java虚拟机一起预编译,链接。这些函数被用来执行处理器相关或Java无法直接实现的功能。

4.一个多任务操作系统,用来提供Java线程及线程同步机制的底层实现。

5.一个垃圾回收线程。垃圾回收周期运行或当动态内存池不能满足分配请求时运行,用来申明那些已经被分配但不再被应用程序所使用的内存。

Kaffe是一个完整的Java实现,它由3部分组成:遵从 Personal Java1.1规范的 Java类库,Java1.1虚拟机和本地动态或静态链接库。Kaffe虚拟机源码按以下子目录组织:

kaffe---包括了解释器与JIT平台无关部分,以及垃圾回收,动态类加载和Java runtime environment其它模块的源代码。

config---包括了解释器与JIT平台相关部分。它按所支持的处理器来划分子目录,里面存放系统相关代码。

package---Java类库以及任何它所依赖的本地方法。

include---在子目录中提供的本地方法的接口定义。这些接口被平台独立文件所需要。

3 Kaffe移植的关键技术及方案

经过对Kaffe深入分析和研究,笔者已在Sti5516平台上成功地移植了Kaffe,并依据DVB-MHP规范,结合机顶盒特定软硬件环境要求,建立了能运行Kaffe虚拟机的Java应用程序运行平台。下面将移植工作及相应步骤总结如下:

3.1 字节码解释器

由于Kaffe源码中没有映射Java字节码到处理器相关的汇编代码块,而是使用C实现了每个字节码。这样就导致字节码解释器的源代码没有一行是处理器相关的。这意味着移植最简虚拟机(无JIT)将非常简单:只需要使用交叉编译器来编译kaffe/kaffevm子目录下的文件即可。

3.2 内部线程

Kaffe有它自己的内部线程包。换句话说,它维护自己的线程数据结构,并在适当的时候执行线程调度及上下文切换。为了使内部线程包能运行在ST20处理器架构上, 需要在config/os20子目录中创建一个threads.h文件。这个文件定义了两个常量和四个宏。这些常量和宏被内部线程包里处理器无关的部分代码所使用。

USE_INTERNAL_THREADS定义为ENABLE。

THREADSTACKSIZE是一个常量,定义为每个线程堆栈的大小,单位bytes。

THREADINIT(ctx * pContex, void (*func)())执行新线程的上下文初始化。该线程的入口点被func指针所提供。

THREADSWITCH(ctx * pNewContext, ctx * pOldContext)执行实际的上下文切换。

THREADINFO(ctx * pContext)在Kaffe初始化期间重置整个任务控制块。

THREADFRAMES(thread * taskId, int count)返回活动的堆栈桢个数。

3.3 支持软件

和其它大多数用C写的程序一样,Kaffe依赖于标准C库里的例程。由于ST采用符合GNU规范的GCC编译器,如strcmp(),atoi(),sin()等标准C库函数被支持。除此之外OS20提供以下支持:

动态内存分配malloc()。尽管Java程序员不会直接调用malloc(),但Kaffe虚拟机需要从底层调用内存分配例程来请求大的内存池。

信号。Kaffe依赖于与POSIX兼容的信号实现机制来执行相应的软件中断。而这可以用来唤醒休眠线程和异常句柄。

非阻塞I/O接口。和select()相似。

3.4 动态类加载器

为了在OS20操作系统中使用,须修改源代码中平台无关的部分---动态类加载器。它是Java运行时环境的一部分,被用来负责加载被调用的方法(methods)。在桌面环境中,与方法相关的字节码被放在类文件中,动态类加载器使用给定的方法名在类路径下的子目录和文件里搜索。但由于OS20操作系统没有文件系统,所以类加载器必须被修改成在内存(RAMROM)中搜索类文件。为此我们完全重写动态类加载器。

我们采用了静态查找表装载机制,建立了一个查找表。这个查找表的结构定义如下:

typedef struct

{

int index;

int size;

char name;

}classIndexTable;

这个查找表用来映射类名或方法名到它们在内存中的起始地址。这样就可以用查找表来替代类加载器。即将类型和路径组合为一个唯一的标识, 比如“java string”,组合起来就是“java_string”,然后再利用这个组合的结果检索查找表。

利用组合的结果与查找表中每一项的name字段进行字符串比较,直到完全匹配为止。如果没有任何匹配则说明系统不支持这个类型。匹配上name 后,类装载器将获得index和size的值。index是一张存放所有.class文件起始地址表的索引,根据这个索引就可以找到具体的.class文件的二进制映像的起始地址,而size则是该.class文件的大小。这样根据.class文件存储位置的地址和大小就可以成功地完成类的装载。

3.5 虚拟机启动

由于OS20操作系统是被GCC编译到主程序中,我们需要将kaffe虚拟机的初始化函数做为主应用程序中的某个任务来运行。kaffe虚拟机的初始化与启动是通过在主程序中运行initializeKaffe()函数来完成的。

4 测试与结果

在主程序中,调用OS20操作系统中的系统调用task_create()来将Kaffe虚拟机初始化为系统的一个进程。并为它分配必要资源,包括进程优先级、系统需要的内存空间等。依照分配的优先级,参与系统的进程调度。最后,将整个修改好的源代码在新的编译环境下编译连接成可执行代码,通过JTAG口下载到机顶盒开发板中运行。

Kaffe虚拟机的“输入”是“hello.java”,经过编译后生成类文件“hello.class”。运行下载到Flash的主程序,在调试终端可以看到“hello world”字样,这是Kaffe虚拟机解释字节码的结果。说明基于Sti5516芯片的Kaffe虚拟机移植成功。

5 结束语

以上介绍了Java虚拟机Kaffe的软件架构,从中我们可以看出,Kaffe虚拟机具有较好的可扩展结构模型,是遵循Java规范的优良的开放源码虚拟机,可以适应多种嵌入式应用环境。本文按照欧洲DVB-MHP规范,给出了Kaffe虚拟机在Sti5516机顶盒环境下的移植方案,使其可以应用于要求较高的嵌入式系统中,为机顶盒在证券信息服务、电子节目、MP3音乐下载、电子邮件、网页浏览等新型服务领域的开发应用奠定坚实的基础。我们相信,随着基于Java技术的DVB-MHP中间件技术的广泛使用,将使嵌入式系统的应用开发更加简捷方便。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6748

    浏览量

    123210
  • JAVA
    +关注

    关注

    19

    文章

    2960

    浏览量

    104578
  • 虚拟机
    +关注

    关注

    1

    文章

    908

    浏览量

    28116
收藏 人收藏

    评论

    相关推荐

    请问QTE可以同几种JAVA虚拟机集成

    《嵌入式linux应用开发完全手册》第500页中有讲:“QTE可以同几种JAVA虚拟机集成。JAVA程序可以基于QTE的工作平台上运行,提供同源程序相同的效果”我就是想请问,是否有那个版本的QTE是有带
    发表于 05-24 05:45

    浅谈Java虚拟机研究与移植

    Kaffe移植的关键技术及方案基于ST20嵌入式系统的Java虚拟机研究与移植
    发表于 04-25 09:49

    怎么实现机顶盒中智能卡通信?

    本文主要讨论智能卡与机顶盒之间的通信。机顶盒中的主芯片一般都提供与智能卡通信的接口,利用相应的硬件和通信协议,就可以实现它们之间的正常通信。在本文中,机顶盒芯片采用ST公司的Sti5516。由于
    发表于 05-28 06:17

    Java虚拟机介绍

    什么是JVM?Java虚拟机Java Virtual Machine, JVM)实际上是一个类似于真实计算机系统的抽象(Abstract Computing Machine),它拥
    发表于 04-10 16:15 0次下载

    Java虚拟机向ARM平台的移植

    介绍Java 虚拟机的概念,以常用的KVM 为例,讲述了将Java 虚拟机移植到ARM 平台的方法,重点介绍了移植过程中的编译选项。
    发表于 09-23 11:54 38次下载

    Java虚拟机向ARM平台的移植

    介绍Java 虚拟机的概念,以常用的KVM 为例,讲述了将Java 虚拟机移植到ARM 平台的方法,重点介绍了移植过程中的编译选项。
    发表于 09-23 11:54 22次下载

    微软java虚拟机下载

    微软java虚拟机下载:Java虚拟机(JVM)是Java Virtual Machine的缩写,它是一个虚构出来的计算机,是通过在实际的计
    发表于 02-26 08:26 38次下载

    Java虚拟机基础

    JVM基础----java虚拟机的学习内容。
    发表于 10-30 10:21 0次下载

    深入JAVA虚拟机

    深入JAVA虚拟机
    发表于 03-19 11:24 1次下载

    JAVA虚拟机的体系结构及基本类型

    JAVA虚拟机的体系结构 下图是JAVA虚拟机的结构图,每个Java虚拟机都有一个类装载子系统,
    发表于 09-27 11:30 0次下载
    <b class='flag-5'>JAVA</b><b class='flag-5'>虚拟机</b>的体系结构及基本类型

    Dalvik虚拟机进程模型分析

    Android是集操作系统、中间件和关键应用为一体的运行与移动设备上的软件包。Dzlvik虚拟机是Google自主开发的代号为Dalvik的Java虚拟机技术。Google自主开发
    发表于 03-20 10:00 10次下载
    Dalvik<b class='flag-5'>虚拟机</b>进程模型分析

    Java虚拟机参数调优

    随着JAVA在应用系统级的项目开发中的使用越来越广泛,虚拟机、垃圾收集、热点编译、J2EE等新技术层出不穷,JAVA作为系统级开发的一个选择的优势也越来越明显,在此同时其不能完全编译、垃圾收集等与生
    发表于 04-03 11:29 1次下载

    VMware软件虚拟机和PLC通讯的连接方法

    现在虚拟机应该说主流的用的比较多的还是使用VMware软件虚拟机,所以我就以VMware软件虚拟机应该如何和PLC通讯做一个简单的说明!
    的头像 发表于 09-30 14:29 2.4w次阅读

    由浅入深的了解Java虚拟机

    说到Java虚拟机,相信作为Java程序员的小伙伴们都不陌生,他们每天都在写Java代码,写的代码都是在一个叫做Java
    的头像 发表于 01-01 17:50 2296次阅读

    Java:JVM虚拟机的入门知识

    Java开发现在面试越来越难了,进大厂必备的JVM、多线程高并发这都是最基础的知识了,今天我们一起来学习Java虚拟机入门。
    的头像 发表于 07-01 11:43 2291次阅读
    <b class='flag-5'>Java</b>:JVM<b class='flag-5'>虚拟机</b>的入门知识