CN100339831C - 应用于Java操作系统中虚拟机的编译体系实现方法 - Google Patents

应用于Java操作系统中虚拟机的编译体系实现方法 Download PDF

Info

Publication number
CN100339831C
CN100339831C CNB2005100619934A CN200510061993A CN100339831C CN 100339831 C CN100339831 C CN 100339831C CN B2005100619934 A CNB2005100619934 A CN B2005100619934A CN 200510061993 A CN200510061993 A CN 200510061993A CN 100339831 C CN100339831 C CN 100339831C
Authority
CN
China
Prior art keywords
layer
program
compiling
code
optimization
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
Application number
CNB2005100619934A
Other languages
English (en)
Other versions
CN1790267A (zh
Inventor
陈天洲
戴红军
陈国兵
胡威
黄域
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CNB2005100619934A priority Critical patent/CN100339831C/zh
Publication of CN1790267A publication Critical patent/CN1790267A/zh
Application granted granted Critical
Publication of CN100339831C publication Critical patent/CN100339831C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种应用于Java操作系统中虚拟机的编译体系实现方法。以Java语言为主,汇编语言为辅,采用四层体系架构:虚处理层、基准编译层、优化编译层、汇编层汇编器;以操作平台的目标代码为最终编译结果,有针对性地选择优化编译,既考虑程序执行速度又顾及虚拟机自身效率,在Java操作系统的支持下动态优化,使程序运行达到最优。这一方法在突出了Java语言在模块化、安全性、灵活性方面的优势,同时也利用了汇编语言的强大功能,能在更大程度上优化目标代码,同时也十分有利于平台移植,方便不同的商业应用,从整体上提高了Java操作系统的运行速度,特别是在嵌入式平台这类本身硬件运行速度不是很快时,更具有明显的效果。

Description

应用于Java操作系统中虚拟机的编译体系实现方法
技术领域
本发明涉及Java虚拟机设计领域、编译器设计领域,以及嵌入式设备平台对Java支持的解决方法。
背景技术
目前,实现Java平台主要有三种方式:
Java虚拟机:以虚拟机运行在现有操作系统之上,实现Java程序的运行。这种方式由于其简易、低代价等特点,是现在最常用的一种。
Java操作系统:这种方式又分为两种:1.将Java虚拟机整合进现有的操作系统;2开发一种全新的独立的基于Java的操作系统。这种方式省去了虚拟机到操作系统那一层的通讯和调度,因而较之虚拟机的方式有效率的提高。但要开发一个全新的操作系统并提供相关的支持(包括驱动程序支持和应用软件支持)代价也是非常大的。
Java芯片:这种方式将操作系统这一软件的架构整合进了芯片之中,或者打造一个全新的Java专用芯片。由于采用硬件的方式来解决软件的问题,这种方式的性能比较前两种都有更大的提升,但缺点也是显而易见的:丧失了Java的跨平台特性。
可以看出,第一种平台与第二种平台都要依赖于Java虚拟机的支持。而Java虚拟机的核心——执行引擎其实质上就是编译机制。
传统的Java虚拟机中执行引擎大都采用解释、即时编译、自适应优化等执行策略。其编译体系采用了普通的一级编译/解释,而由执行引擎来控制具体执行方式,不能充分发挥编译体系的作用,并且即时编译技术虽然使得java程序速度大为提高,但该技术仍是一种解释过程,所以仍慢于编译型程序的速度。
发明内容
为了获得更好的代码编译性能、代码执行性能,为了提高Java虚拟机的执行效率,为了提供一个更优异的嵌入式Java支持平台,本发明的目的在于提供一种应用于Java操作系统中虚拟机的编译体系实现方法
本发明解决技术问题所采用的技术方案是:
1、一种应用于Java操作系统中虚拟机的编译体系实现方法,其特征在于:
1)四层体系结构与功能:
虚处理层C1:对外处理编译解释任务,对内负责代码预处理;
基准编译层C2:对程序首次编译,作简单的优化,以满足程序快速执行的需要;
优化编译层C3:生成高度优化和快速执行的中间代码,有针对性的选择编译,使程序达到本地最优;
汇编层汇编器:将中间代码汇编成本地平台的目标代码;
层与层之间并不是普通的层层向上负责,而是一个纵横的关系,四层体系结构既保证了对现存java程序的兼容性:虚处理层、基准编译层、优化编译层保证了现有java程序的运行环境;又满足了程序快速执行和针对性优化的目的:汇编层对中间代码进行编译汇编,最终生成本地二进制目标代码;
2)编译优化过程
①当程序首次编译时,实现步骤
首次编译:指程序源码第一次编译为本地目标代码的过程;
I.程序进入虚处理层C1进行预处理,虚处理层C1为程序中的每一个要被编译的方法、函数、变量生成基本信息,写入信息表,确保执行方法提前编译,从而减少编译时间的损耗;
II.调用基准编译层C2,利用信息表中的已经生成的程序基本信息,对程序作快速处理,作机器无关优化,为程序分配寄存器,从而实现快速编译产生程序的中间代码,最后将优化信息和中间代码写入信息表;
III.信息表中的中间代码输出到汇编层汇编器,将中间代码汇编成目标代码;
②当程序二次编译时,实现步骤
二次编译:指当程序在目标平台运行时,操作系统动态跟踪程序执行情况进行统计,根据优化机制,适时调用编译器,作再一次的编译过程;
I.操作系统将运行程序的信息提交到虚处理层C1,虚处理层C1将原来编译器为程序生成的信息表读入到内存;
II.调用优化编译层C3,优化编译层C3读取信息表,提取原来的基本信息、优化信息以及中间代码,利用操作系统统计数据采取机器相关优化,重新生成程序的中间代码,最后将优化信息和中间代码写入信息表;
III.信息表中的中间代码输出到汇编层汇编器,将中间代码汇编成目标代码;
在未来的程序执行中,编译器会时常被调用,重复二次编译的过程,对运行程序作多次有针对性的优化,以达到运行程序的最优。
本发明具有的有益效果是:首先,多层编译体系设计,充分体现了模块化、安全性、可移植性方面的独特优势,具有很高的运行安全性以及开发过程中的高可重用性,大大降低了多平台开发成本;其次,多层体系带来了多种编译策略的选择,既考虑了执行引擎本身执行的效率,又提高了目标代码执行的速度,在整体上提高了Java操作系统的运行速度,特别是在嵌入式平台这类本身硬件运行速度不是很快的情况下,更具有明显的效果;再次,本编译体系采用混合语言来实现,前三层的Java和最后汇编层的汇编语言。这种方式突出了Java语言在模块化、安全性、灵活性方面的优势,同时也利用了汇编语言的强大功能,能在更大程度上优化目标代码,同时也十分有利于平台移植,方便不同的商业应用。最后本发明引入汇编器做底层的编译器,把编译的工作提到在本地机安装时来进行,避开了执行时的时间代价,避免了在程序运行时解释字节码的消耗,从而保证了程序的时刻高效,动态优化。
附图说明
附图是本发明的流程图。
具体实施方式
本发明按照上述四层体系来布局,将每一层作为一个功能模块来实施。下面将就本体系作详细介绍。
1)四层体系结构与功能:
①虚处理层C1:对外处理编译解释任务,对内负责代码预处理。为程序每一个要被编译的方法生成一个信息表,信息表用于保存程序的基本信息、优化信息,中间代码。它确保每一个方法在执行之前都已进行编译,而避免那些从没有被调用过的方法被重复编译,从而减少编译时间的损耗。另外,在二次编译时虚处理层C1也负责读入程序原信息表,调用优化编译层C3作进一步的优化。因此,虚处理层C1并不进行实际的编译工作,既不是一个独立的编译器。它主要完成一些预处理工作,再判断选择底层的其他编译器来完成具体的编译过程。
②基准编译层C2:是这个编译器体系的基础,负责将Java字节码转换成中间代码并根据需要调用汇编层汇编器生成本地执行代码,它的目标是进行快速编译,做机器无关优化,最终产生合理的快速目标指令代码。
③优化编译层C3:生成高度优化和快速执行的目标指令代码,优化编译层C3是一个优化编译器,主要进行与机器相关的代码优化,它以生成高度优化和快速执行的目标指令代码、而不是编译器执行速度,作为自身的目标。
④汇编层汇编器:将中间代码汇编成目标平台本地代码,汇编层汇编器在系统中自成一个独立的部分,它将中间代码汇编成目标平台本地代码。它由基准编译层C2或者优化编译层C3来调用执行任务。
层与层之间并不是普通的层层向上负责,而是一个纵横的关系,四层体系结构既保证了对现存java程序的兼容性:虚处理层、基准编译层、优化编译层保证了现有java程序的运行环境;又满足了程序快速执行和针对性优化的目的:汇编层对中间代码进行编译汇编,最终生成本地二进制目标代码;
2)编译优化过程
①当程序首次编译时,实现步骤
首次编译:指程序源码第一次编译为本地目标代码的过程;
I.程序进入虚处理层C1进行预处理,虚处理层C1为程序中的每一个要被编译的方法、函数、变量生成一个信息表,确保执行方法提前编译,从而减少编译时间的损耗;
II.调用基准编译层C2,利用信息表中的已经生成的程序基本信息,对程序的字节码作快速处理,减少其在内存直接执行的操作的数量(常常为0),但同时增加可用寄存器到32、64或128,降低寄存器分配难度。清除代码中重复出现的表达式,如果有多个表达式的值相同,保存的第1次的计算值并删除重复计算,清除程序中不可到达及死代码,将程序中的高代价代码替换为低代价代码,采用常量传播方法将程序中的恒定变量替换为常量,对循环进行循环代码外提,削减强度,删除归纳变量等优化方法,建立一个虚堆栈来消除大量的堆栈操作。最终形成中间代码。作机器无关优化,为程序分配寄存器,从而实现快速编译并产生程序的中间代码,最后将优化信息和中间代码写入信息表;
III.信息表中的中间代码输出到汇编层,将中间代码汇编成目标平台本地代码;
②当程序二次编译时,实现步骤
二次编译:指当程序在目标平台运行时,操作系统动态跟踪程序执行情况进行统计,根据优化机制,适时调用编译器,作再一次的编译过程;
I.操作系统将运行程序的信息提交到虚处理层C1,虚处理层C1根据执行路径查找程序的信息表,如果存在,就将原来编译其为程序生成的信息表读入到内存,如果不存在给出提示信息,退出优化;
II.调用优化编译层C3,优化编译层C3读取信息表,取出信息表中的基本信息、优化信息、中间代码,利用操作系统统计数据采取相应的优化方案,做机器相关优化,为程序分配寄存器,重新生成程序的中间代码,最后将优化信息和中间代码写入信息表,优化编译层C3的执行过程分为四个步骤:
1、由虚处理层C1装入的信息表中获得基本信息、优化信息、中间代码;
2、进行第二遍优化,即机器相关优化;
3、寄存器重新分配;
4、将优化信息、以及优化后的中间代码写回到信息表;
第1步虚处理层C1读入信息表,读取程序的基本信息、优化信息、中间代码。信息表中的基本信息、优化信息、中间代码是在程序上次编译时生成的,其中中间代码已经做过一些优化,被于程序作相关保存,以备二次编译时使用。优化编译层根据这些信息判断是否优化、重新编译,或如何优化、编译。
第2步优化编译层C3在原始代码的基础上对语句参数进行优化替换并消除死代码,即从来不会被执行的代码,根据本机特性作多处理器优化、特殊指令优化、无用之令消除,根据操作系统的统计数据,预测哪条分支最有可能运行、哪个过程经常调用以及哪部分代码最经常执行,调整转移结构,循环和过程代码来最小化最经常执行部分的运行时间。
第3步的寄存器分配,根据统计数据把经常要计算变量引用次数并将高引用率的变量放入寄存器,为变量重新分配可获得的机器寄存器,将利用率较低的变量移入内存。最后阶段的代码生成将调用汇编层汇编器对优化后的中间代码进行解析,从而生成目标执行代码。
第4步将优化信息以及优化后的中间代码写回到信息表,替换原来的优化信息和中间代码,并调用汇编层。
III.中间代码输出到汇编层,将中间代码再次汇编,从而生成高度优化和快速执行的目标指令代码
在未来的程序执行中,编译器会时常被调用,重复二次编译的过程,对运行程序作多次有针对性的优化,以达到运行代码的最优。
本发明的流程图如图1所示,操作系统调用编译器,对程序进行编译。首先启动虚处理层虚处理层C1对当前程序执行虚处理,第一步判断该程序是首次编译,还是二次编译,如果是首次编译,虚处理层C1为程序生成唯一的一张信息表,保存程序的方法、函数、常变量的基本信息,否则装载程序的信息表。其次,信息表生成后,如果是首次编译,调用基准编译层C2,利用信息表中的基本信息,对程序进行与机器无关优化,从而实现快速编译并最终在信息表中产生程序的中间代码,将优化信息和中间代码写回到信息表,如果是二次编译,调用优化编译层C3读入信息表,提取基本信息、优化信息、中间代码,优化编译C3利用统计数据采取相应的优化方案,进行与机器相关优化,重新生成优化信息以及程序的中间代码,替换信息表中的优化信息和原始中间代码;再次第三步中间代码输出到汇编层,将中间代码汇编成目标平台本地代码。在以后的程序执行中,本编译器会时常被调用,重复二次编译的过程,对运行程序作多次有针对性的优化,以达到运行代码的最优。
实施例
现有一个程序源码A,内含变量a,变量b,变量c,函数a、函数b,以及方法a,源码A由操作系统提交给本编译器,虚处理层C1获得源码A后,判断源码A为首次编译,在内存中建立信息表T,在表中为变量a,变量b,变量c,函数a,函数b,方法a分别建立对应的数据结构Tva,Tvb,Tvc,Tfuna,Tmetha,调用基准编译层C2,对原码A作一系列机器无关代码优化,在信息表T中mva,mvb,mvc,mfuna,mmetha处登记变量a,变量b,变量c,函数a,函数b,方法a做的优化处理方式以及优化指标,即优化信息,最后编译为中间代码B,把优化信息和中间代码B写入信息表T,并保存,中间代码B提交到汇编层汇编器,由汇编层汇编器将中间代码编译成最终的目标代码程序C。
程序C生成后可以直接在操作系统中运行,在程序C运行过程中,操作系统监视程序中的“热区”,并加以统计,在确定“热区”代码块可优化后之后启动本编译器,将统计情况及程序信息交给虚处理层C1,虚处理层C1判断该程序为二次编译,装入对应的信息表T,如果没有发现信息表T,退出编译器。装入成功后调用优化编译层C3,优化编译层读入基本信息、优化信息、中间代码B,根据统计信息和优化方案对中间代码B进行机器相关优化,在信息表T中中mva,mvb,mvc,mfuna,mmetha处登记变量a,变量b,变量c,函数a,函数b,方法a做的优化处理方式以及优化指标,即优化信息,重新编译为中间代码B,把优化信息和中间代码B写入信息表T,并保存,中间代码提交到汇编层汇编器,由汇编层汇编器将中间代码编译成最终优化后的目标代码程序C。

Claims (1)

1、一种应用于Java操作系统中虚拟机的编译体系实现方法,其特征在于:
1)四层体系结构与功能:
虚处理层C1:对外处理编译解释任务,对内负责代码预处理;
基准编译层C2:对程序首次编译,作简单的优化,以满足程序快速执行的需要;
优化编译层C3:生成高度优化和快速执行的中间代码,有针对性的选择编译,使程序达到本地最优;
汇编层汇编器:将中间代码汇编成本地平台的目标代码;
层与层之间并不是普通的层层向上负责,而是一个纵横的关系,四层体系结构既保证了对现存java程序的兼容性:虚处理层、基准编译层、优化编译层保证了现有java程序的运行环境;又满足了程序快速执行和针对性优化的目的:汇编层对中间代码进行编译汇编,最终生成本地二进制目标代码;
2)编译优化过程
①当程序首次编译时,实现步骤
首次编译:指程序源码第一次编译为本地目标代码的过程;
I.程序进入虚处理层C1进行预处理,虚处理层C1为程序中的每一个要被编译的方法、函数、变量生成基本信息,写入信息表,确保执行方法提前编译,从而减少编译时间的损耗;
II.调用基准编译层C2,利用信息表中的已经生成的程序基本信息,对程序作快速处理,作机器无关优化,为程序分配寄存器,从而实现快速编译产生程序的中间代码,最后将优化信息和中间代码写入信息表;
III.信息表中的中间代码输出到汇编层汇编器,将中间代码汇编成目标代码;
②当程序二次编译时,实现步骤
二次编译:指当程序在目标平台运行时,操作系统动态跟踪程序执行情况进行统计,根据优化机制,适时调用编译器,作再一次的编译过程;
I.操作系统将运行程序的信息提交到虚处理层C1,虚处理层C1将原来编译器为程序生成的信息表读入到内存;
II.调用优化编译层C3,优化编译层C3读取信息表,提取原来的基本信息、优化信息以及中间代码,利用操作系统统计数据采取机器相关优化,重新生成程序的中间代码,最后将优化信息和中间代码写入信息表;
III.信息表中的中间代码输出到汇编层汇编器,将中间代码汇编成目标代码;
在未来的程序执行中,编译器会时常被调用,重复二次编译的过程,对运行程序作多次有针对性的优化,以达到运行程序的最优。
CNB2005100619934A 2005-12-14 2005-12-14 应用于Java操作系统中虚拟机的编译体系实现方法 Expired - Fee Related CN100339831C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005100619934A CN100339831C (zh) 2005-12-14 2005-12-14 应用于Java操作系统中虚拟机的编译体系实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005100619934A CN100339831C (zh) 2005-12-14 2005-12-14 应用于Java操作系统中虚拟机的编译体系实现方法

Publications (2)

Publication Number Publication Date
CN1790267A CN1790267A (zh) 2006-06-21
CN100339831C true CN100339831C (zh) 2007-09-26

Family

ID=36788159

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100619934A Expired - Fee Related CN100339831C (zh) 2005-12-14 2005-12-14 应用于Java操作系统中虚拟机的编译体系实现方法

Country Status (1)

Country Link
CN (1) CN100339831C (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100533384C (zh) * 2006-09-07 2009-08-26 威盛电子股份有限公司 三维计算机绘图的着色编译系统及方法
US8261248B2 (en) * 2007-11-05 2012-09-04 Sap Ag System and method of executing a dynamic program in a structured environment
US9003380B2 (en) 2010-01-12 2015-04-07 Qualcomm Incorporated Execution of dynamic languages via metadata extraction
CN102117228B (zh) * 2011-02-28 2013-10-16 复旦大学 一种动静态结合的Java程序异常处理优化方法
CN103563300A (zh) * 2011-05-25 2014-02-05 惠普发展公司,有限责任合伙企业 网络设备中网络设备组件的实现
CN102236575A (zh) * 2011-07-20 2011-11-09 复旦大学 一种基于寄存器映射的动态编译方法
CN103299277B (zh) * 2011-12-31 2016-11-09 华为技术有限公司 Gpu系统及其处理方法
CN102662720B (zh) * 2012-03-12 2015-01-28 天津国芯科技有限公司 一种多发射嵌入式处理器编译器的优化方法
WO2014209337A1 (en) * 2013-06-28 2014-12-31 Intel Corporation Compatibility and optimization of web applications across independent application stores
CN105511942B (zh) * 2015-12-02 2019-02-19 华为技术有限公司 语言虚拟机中热点中间代码的识别方法以及装置
CN110162306B (zh) * 2018-02-14 2023-06-23 斑马智行网络(香港)有限公司 系统的提前编译方法和装置
CN110275713A (zh) * 2019-07-02 2019-09-24 四川长虹电器股份有限公司 一种Java虚拟机后端编译的改进方法
CN111026402B (zh) * 2019-12-09 2023-05-12 贵阳永青仪电科技有限公司 一种编译型plc代码执行效率优选方法
CN111399844B (zh) * 2020-03-12 2023-11-24 同盾(广州)科技有限公司 安全编译方法、装置、电子设备及计算机可读介质
CN112052006B (zh) * 2020-08-12 2021-06-15 武汉天喻信息产业股份有限公司 一种软件代码编译方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6530075B1 (en) * 1998-12-03 2003-03-04 International Business Machines Corporation JIT/compiler Java language extensions to enable field performance and serviceability
CN1525321A (zh) * 2003-02-24 2004-09-01 ���ǵ�����ʽ���� 用于在爪哇程序中缩短字节代码的编译时间的系统和方法
CN1641571A (zh) * 2004-01-14 2005-07-20 三星电子株式会社 用于增加爪哇程序处理能力的系统和方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6530075B1 (en) * 1998-12-03 2003-03-04 International Business Machines Corporation JIT/compiler Java language extensions to enable field performance and serviceability
CN1525321A (zh) * 2003-02-24 2004-09-01 ���ǵ�����ʽ���� 用于在爪哇程序中缩短字节代码的编译时间的系统和方法
CN1641571A (zh) * 2004-01-14 2005-07-20 三星电子株式会社 用于增加爪哇程序处理能力的系统和方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Java编译系统的研究 冀振燕,程虎,计算机研究与发展,第36卷第1期 1999 *

Also Published As

Publication number Publication date
CN1790267A (zh) 2006-06-21

Similar Documents

Publication Publication Date Title
CN100339831C (zh) 应用于Java操作系统中虚拟机的编译体系实现方法
CN100343809C (zh) 中间代码执行系统和中间代码执行方法
EP2487585B1 (en) Method and device for dynamically loading relocatable file
EP0943990A2 (en) Method and system of providing dynamic optimization information in a code interpretive runtime environment
Inoue et al. A trace-based Java JIT compiler retrofitted from a method-based compiler
CN100342353C (zh) 嵌入式操作系统中进程映射实现方法
CN1173262C (zh) 虚拟机指令的优化字节码解释器
CN1313927C (zh) 智能卡运行环境的控制方法
CN1153131C (zh) 用于在多个指令的执行期间由微处理机自动插入所需数量的空操作指令的方法
CA3007425A1 (en) System and method for caching and parameterizing ir
CN1499379A (zh) 针对异构体系结构的在集成可执行程序内进行覆盖管理的方法和设备
CN114115990A (zh) 动静结合二进制翻译的程序迁移方法、系统及存储介质
CN1512334A (zh) 程序变换装置和程序变换方法
CN1892602A (zh) 一种二进制翻译中库函数调用的处理方法
CN1650266A (zh) 支持单线程应用程序的时分多路复用推理性多线程
CN103092618A (zh) 基于软件Cache的Dalvik虚拟机JIT加速方法
CN1645319A (zh) 优化网络环境下部分计值服务的方法
CN112559032B (zh) 基于循环段的众核程序重构方法
CN1860437A (zh) 可编译计算机程序的处理
CN100371909C (zh) 嵌入式系统中rom代码的修改方法
CN112558976B (zh) 即时编译引擎自适应函数加载方法
Franz Run-time code generation as a central system service
CN1892603A (zh) 一种基于组合并算法的偏移量分配优化方法
CN114217771A (zh) 一种基于国产异构平台的c++向量编程方法
CN1746849A (zh) 一种动态二进制翻译中的翻译方法

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
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20070926

Termination date: 20111214