CN100465894C - 一种Java Processor启动时类装载方法 - Google Patents
一种Java Processor启动时类装载方法 Download PDFInfo
- Publication number
- CN100465894C CN100465894C CNB2007100262610A CN200710026261A CN100465894C CN 100465894 C CN100465894 C CN 100465894C CN B2007100262610 A CNB2007100262610 A CN B2007100262610A CN 200710026261 A CN200710026261 A CN 200710026261A CN 100465894 C CN100465894 C CN 100465894C
- Authority
- CN
- China
- Prior art keywords
- class
- java
- code
- loading bin
- loading
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种Java Processor启动时类装载方法,其步骤为:1)芯片初始化;2)启动字节码读取单元;3)选择并设置类装载路径;4)装载用户类装载器;5)装载操作系统。该方法参考通用PC中的BIOS技术思想设计,芯片生产时,将启动模块代码固化在芯片内部,系统启动时自动运行该部分代码,实现外围设备初始化的功能外,同时构建Java虚拟机系统类装载器,以及从外围存储设备或网络环境中装载以字节码文件存储的Java嵌入式操作系统或Java应用程序。本发明使得基于JavaProcessor的Java应用程序开发过程与其他嵌入式Java应用程序趋于相同,为芯片使用者和软件开发者提供便利,同时使得所有遵循Java规范的Java字节码文件都能在芯片上运行,提高系统通用性和发挥Java技术可移植性。
Description
技术领域
本发明属于嵌入式处理器设计领域,具体来说,涉及一种JavaProcessor启动时类装载方法。
背景技术
目前在Java Processor里的类装载功能主要是在开发主机中通过软件模拟实现,在开发主机中运行软件,根据编译后的Java字节码文件,进行类型验证,分配内存,符号解析,初始化变量等类装载操作,生成一个Java程序执行时内存镜像文件,然后将镜像文件下载到系统存储器中,直接运行。
这种方法使用开发主机实现了一部分Java程序运行的过程,与Java标准规法不兼容,使得Java软件开发过程变得繁琐,除了必须运行常规的Java编译程序将Java高级语言源代码编译成字节码文件之外,还必须进行一个“二次编译”的过程生成执行时内存镜像文件。这种方法生成的镜像文件不能移植到其他Java平台使用,以及“二次编译”软件对平台的依赖性,显著的削弱了Java技术的可移植性。
发明内容
为了克服以上的不足,本发明提出了一种Java Processor启动时类装载方法。它的步骤包括:1)芯片执行存储于片上ROM中的初始化程序,进行初始化;2)启动字节码读取单元;3)选择并设置类装载路径并装载系统类;4)装载用户自定义的装载器;5)装载以Java语言编写的小型操作系统。
所述方法参考通用PC中的BIOS设计思想,在芯片生产时,将步骤1)中的初始化程序固化在芯片内部。
所述步骤1)芯片初始化过程中,将启动模块中的初始化程序代码作为一段微码子程序存储在片上ROM中,启动时直接执行该段代码,以进行初始化工作,启动模块同时也提供用于I/O操作的微码子程序,为之后字节码的读取和运行做准备。
所述步骤3)中系统类装载器以软件实现,程序代码同样固化在芯片内部的片上ROM。
所述步骤4)中用户类装载器是作为一个类被装载到系统中。
步骤5)中操作系统是一个由Java语言开发的小型操作系统,其核心的装载将由系统类装载器和用户类装载器进行。
所述启动模块固件不能像其他Java程序那样使用类来组织数据和代码,其具体实现方式有以下三种:
1)用自定义的微码指令实现,微码指令功能简单,易于开发,但并未形成标准,仅适合于启动时较为简单的需求;
2)使用没有形成类结构的Java字节码指令实现,可以实现强大的功能,由于Java字节码指令比较复杂,并且该部分程序代码没有形成类结构,不能使用Java高级语言编写,缺少开发环境,技术难度比较大;
3)以上两种方式的结合,在简单的初始化阶段运行微码指令,在复杂的类装载器实现和装载字节码文件阶段使用Java字节码指令。
本发明的有益效果:
1、使得基于Java Processor的Java应用程序的开发过程与其他嵌入式Java应用程序的开发过程趋于相同,为芯片使用者和软件开发者提供便利。
2、使得所有遵循Java规范的Java字节码文件都能在芯片上运行,提高系统的通用性和发挥Java技术的可移植性。
附图说明
图1为Java processor的启动流程图。
具体实施方式
下面结合附图对本发明进行进一步阐述。
如图1所示,一种Java Processor启动时类装载方法,它的主要步骤包括:1)芯片初始化;2)启动字节码读取单元;3)选择并设置类装载路径;4)装载用户类装载器;5)装载操作系统。
该方法参考通用PC中的BIOS设计思想,在芯片生产时,将启动模块代码固化在芯片内部,在系统启动时自动运行该部分代码,除了实现外围设备初始化的功能外,同时构建Java虚拟机的系统类装载器,以及从外围存储设备或网络环境中装载以字节码文件存储的Java嵌入式操作系统或者Java应用程序。
各步骤具体说明:
1、芯片初始化
Java processor在执行Java字节码指令时需要将其翻译成微码子程序来运行,因此在处理器内部有一个片上ROM来存储微码子程序。每一条可实现的字节码指令都对应一段微码子程序。本技术利用这一机制,将启动模块中的初始化程序代码也作为一段微码子程序存储在片上ROM中,启动时直接执行该段代码,以进行初始化工作,如检测内存,初始化串口,网络等工作,同时为I/O操作提供简单的系统调用,为之后字节码的读取和运行做准备。
2、启动字节码读取单元
Java process处理器的指令执行过程分成4步进行:取字节码,取微码,译码,执行。
在芯片初始化过程中,字节码读取单元没有启动,因此“取字节码”这一步并没有也没必要进行,处理器直接在片上ROM中读取以微码形式存储的初始化程序代码,然后执行。
初始化过程结束后,为了能够执行Java字节码指令,处理器必须启动字节码读取单元,该动作由初始化程序代码的最后两条指令触发,第一条指令将启动字节码读取单元,使得“取字节码”这一步流程加入到执行过程中,等待第一条字节码指令成功读取后,最后一条微码指令根据字节码指令的内容,跳转到对应的微码子程序段执行。
3、选择并设置类装载路径
该步骤的执行核心是系统类装载器。Java程序以类的形式组织,因此用户必须为系统提供类装载路径,系统根据用户的选择将可从串口,Flash存储器,或者网络获取字节码文件,并对其进行解析进而运行应用程序。这个过程必须由类装载器实现。而根据Java虚拟机规范,最初始化的类装载器,即系统类装载器必须由虚拟机自己本身实现。由系统类装载器可以装载其他由用户自定义类装载器,进而实现更强大的类装载功能。
系统类装载器以软件实现,程序代码同样固化在芯片内部的片上ROM。
运行系统类装载器的时机有两个:
其一,在字节码读取单元启动之前运行。
因为此时字节码读取单元尚未启动,处理器只能执行微码指令,所以只能以微码指令实现系统类装载器,由于微码指令功能简单,不具备通用性,所以这样实现的类装载器开发过程比较复杂,但运行效率较高。
其二,在字节码读取单元启动之后进行。
字节码读取单元启动之后,处理器能够执行的Java字节码指令必须是已经在内存中平坦存储的,而不能执行Java class文件中具有类结构的字节码,Java class字节码文件是由Java编译器以类为单位编译后的字节码文件。其中除了包含字节码指令之外,还包含了其他与类组织相关的信息,如类属性,常数池,可访问标记等。以访问内存时的地址为例,此时字节码指令中的地址必须是明确的物理地址,而Java class文件中字节码指令的地址是以符号链接的形式存储的。要执行这些Java虚拟机规范中指定的具有类结构的字节码,必须先实现系统类装载器,用于解析Java class文件。通常的解析过程非常复杂,因此,在字节码读取单元启动之后进行该步骤,可利用已经可以运行的的平坦Java字节码指令来实现系统类装载器。字节码指令的功能复杂丰富,使得该部分程序开发容易简单,也易于该模块的修改升级。
4、装载用户类装载器
对于Java虚拟机或者Java processor而言,用户类装载器也是作为一个类被系统类装载器装载到系统中。相比起系统类装载器,用户类装载器可提供更强大的类装载功能。Java虚拟机规范中,实现系统类装载器时允许选择是否提供用户类装载功能,对于绝大多数的嵌入式Java应用程序,系统类装载器提供的装载功能已经足够,但是为了实现Java操作系统,在Java processor中,提供用户类装载功能是有必要的。
用户类装载器在PC机上使用Java高级语言开发,编译成Java class文件后,由Java process中的系统类装载器模块装载到系统中。
5、装载操作系统
鉴于越来越复杂的嵌入式应用,系统将提供一个由Java语言开发的小型操作系统,以简化应用程序的开发过程,可缩短产品周期。和普通Java应用程序一样,操作系统核心的装载将由系统类装载器和用户类装载器进行。
由于启动时,系统还不具有类装载器,所以启动模块固件1-3步不能像其他Java程序那样使用类来组织数据和代码。具体实现方式有以下三种:
1.使用微码指令实现,微码指令功能简单,易于开发,适合于启动时较为简单的需求。
2.使用没有形成类结构的Java字节码指令实现,可以实现较为强大的功能。由于Java字节码指令比较复杂,并且该部分程序代码没有形成类结构,不能使用Java高级语言编写,缺少开发环境,技术难度比较大。
3.以上两种方式的结合,在简单的初始化阶段运行微码指令,在复杂的构建类装载器和装载字节码文件阶段使用Java字节码指令。
Claims (7)
1、一种Java Processor启动时类装载方法,它的步骤包括:1)芯片执行存储于片上ROM中的启动模块里的初始化程序,进行硬件初始化;2)启动模块继续执行,启动字节码读取单元;3)启动模块读取用户输入,设置类装载路径并装载系统类,在内存中创建系统类装载器并将其启动;4)系统类装载器负责装载用户类装载器;5)系统类装载器和用户类装载器负责装载以Java语言编写的小型操作系统,其特征在于,在芯片生产时,将启动模块代码固化在片上ROM中,启动代码执行时,允许用户设置类装载路径。
2、根据权利要求1所述的Java Processor启动时类装载方法,其特征在于所述方法参考通用PC中的BIOS设计思想,在芯片生产时,将步骤1)中的启动模块固化在芯片内部。
3、根据权利要求1所述的Java Processor启动时类装载方法,其特征在于所述步骤1)芯片初始化过程中,将启动模块中的初始化程序代码作为一段微码子程序存储在片上ROM中,启动时直接执行该段代码,以进行初始化工作,启动模块同时也提供用于I/O操作的微码子程序,为之后字节码的读取和运行做准备。
4、根据权利要求1所述的Java Processor启动时类装载方法,其特征在于所述步骤3)中系统类装载器以软件实现,程序代码同样固化在芯片内部的片上ROM。
5、根据权利要求1所述的Java Processor启动时类装载方法,其特征在于所述步骤4)中用户类装载器是作为一个类被装载到系统中,并且是必须的。
6、根据权利要求1所述的Java Processor启动时类装载方法,其特征在于所述步骤5)中操作系统是一个由Java语言开发的小型操作系统,其核心的装载将由系统类装载器和用户类装载器进行。
7、根据权利要求2所述的Java Processor启动时类装载方法,其特征在于所述启动模块固件不能像普通Java字节码程序那样使用类来组织数据和代码,其具体实现方式有以下三种:
1)用微码指令实现;
2)使用没有形成类结构的Java字节码指令实现
3)以上两种方式的结合,在芯片初始化阶段运行微码指令,在构建类装载器和装载字节码文件阶段使用Java字节码指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100262610A CN100465894C (zh) | 2007-01-12 | 2007-01-12 | 一种Java Processor启动时类装载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100262610A CN100465894C (zh) | 2007-01-12 | 2007-01-12 | 一种Java Processor启动时类装载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101013377A CN101013377A (zh) | 2007-08-08 |
CN100465894C true CN100465894C (zh) | 2009-03-04 |
Family
ID=38700910
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100262610A Expired - Fee Related CN100465894C (zh) | 2007-01-12 | 2007-01-12 | 一种Java Processor启动时类装载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100465894C (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763273B (zh) * | 2008-12-26 | 2014-08-13 | 上海闻泰电子科技有限公司 | 一种在嵌入式系统的扩展存储器中动态装入代码的方法 |
US10482221B2 (en) * | 2015-03-02 | 2019-11-19 | Inventio Ag | Protecting a computer program against reverse engineering |
CN106897638B (zh) * | 2015-12-21 | 2020-11-24 | 扬智科技股份有限公司 | 芯片制造方法及其芯片 |
CN106648681A (zh) * | 2016-12-29 | 2017-05-10 | 南京科远自动化集团股份有限公司 | 一种可编程语言编译装载系统及方法 |
CN113010179B (zh) * | 2021-02-23 | 2024-03-15 | 深圳市广和通无线股份有限公司 | 基于实时操作系统的独立应用的运行方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040168163A1 (en) * | 2003-02-07 | 2004-08-26 | Samsung Electronics Co., Ltd. | System and method for shortening class loading process in Java program |
CN1641571A (zh) * | 2004-01-14 | 2005-07-20 | 三星电子株式会社 | 用于增加爪哇程序处理能力的系统和方法 |
-
2007
- 2007-01-12 CN CNB2007100262610A patent/CN100465894C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040168163A1 (en) * | 2003-02-07 | 2004-08-26 | Samsung Electronics Co., Ltd. | System and method for shortening class loading process in Java program |
CN1641571A (zh) * | 2004-01-14 | 2005-07-20 | 三星电子株式会社 | 用于增加爪哇程序处理能力的系统和方法 |
Non-Patent Citations (6)
Title |
---|
Java 处理器技术. 傅勇.小型微型计算机系统,第23卷第3期. 2002 |
Java 处理器技术. 傅勇.小型微型计算机系统,第23卷第3期. 2002 * |
Java虚拟机中类装载机制的原理分析与应用研究. 李超,方潜生.安徽建筑工业学院学报( 自然科学版),第13卷第3期. 2005 |
Java虚拟机中类装载机制的原理分析与应用研究. 李超,方潜生.安徽建筑工业学院学报( 自然科学版),第13卷第3期. 2005 * |
一种新体系结构、带Java 功能的32 位嵌入式微处理器设计. 徐科,忻凌,朱柯嘉,闵昊.小型微型计算机系统,第26卷第1期. 2005 |
一种新体系结构、带Java 功能的32 位嵌入式微处理器设计. 徐科,忻凌,朱柯嘉,闵昊.小型微型计算机系统,第26卷第1期. 2005 * |
Also Published As
Publication number | Publication date |
---|---|
CN101013377A (zh) | 2007-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100377085C (zh) | 嵌入式操作系统硬件镜像启动优化的实现方法 | |
CN101763279B (zh) | 一种BootLoader架构设计方法 | |
Von Hagen | The definitive guide to GCC | |
CN1134731C (zh) | 在计算机系统中编译指令的方法 | |
CN100530108C (zh) | 一种调用函数的方法及系统 | |
EP2705422B1 (en) | Dynamically redirecting boot to another operating system | |
US7162626B2 (en) | Use of common language infrastructure for sharing drivers and executable content across execution environments | |
JPH10269082A (ja) | アーキテクチャ独立バイナリープログラムを直接実行するシステム、方法及び装置 | |
WO2006040505A1 (en) | Platform-independent dynamic linking | |
CN102402427A (zh) | 一种Java应用程序的更新方法及装置 | |
CN100465894C (zh) | 一种Java Processor启动时类装载方法 | |
EP3698241A1 (en) | Using semantic annotations to control compatibility behaviors | |
US20060080681A1 (en) | Mechanism to extend functionality in a restricted computing environment | |
JP5401561B2 (ja) | クラスファイル内にネイティブコードを埋め込むことによる仮想メカニズム内でのプラットフォーム依存ルーチンの適用 | |
US20170102924A1 (en) | Software architecture for embedded systems | |
CN102841802A (zh) | 移动终端的软件升级方法 | |
KR20130068630A (ko) | 임베디드 디바이스의 초기화 방법 및 장치 | |
CN100498710C (zh) | 自储存装置上读取选择只读存储器程序代码的方法 | |
CN102591669A (zh) | 模块化计算机固件及其实现方法 | |
Al-Bokhaiti et al. | Customization and Optimization of Android Operating System for Custom Board with the Implementation of an Administrative Tool | |
US8135943B1 (en) | Method, apparatus, and computer-readable medium for generating a dispatching function | |
CN101187876A (zh) | 一种寄生dos操作系统的制作及使用方法 | |
TWI777636B (zh) | 組成模組化韌體的方法、裝置及電腦程式產品 | |
Pandit et al. | Development of BSP for ARM9 Evaluation Board | |
Van Canneyt et al. | Free Pascal User’s Guide |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090304 Termination date: 20150112 |
|
EXPY | Termination of patent right or utility model |