论文部分内容阅读
摘要:本文从高效的动态软件更新实现机制、自动化的运行时对象状态转换方法及动态更新错误自动恢复技术H个方面系统研究了Java程序动态更新支撑技术,并在工业级的Java虚拟化上实现了上述技术,得到一个高效、易用、可靠的Java程序动态软件更新。
关键词: 动态软件;软件更新
1 动态软件更新
早期的动态更新系统的技术原理,给出了用于刻画动态软件更新技术的需求,即动态更新不需要修改过多的运行时软件实体、对某一模块的动态更新不需要同时停止整个系统、某一模块的动态更新需要对其他模块或用户透明。事实上,动态软件更新之根本在于软件模块化的本质,而技术上来说源自于动态链接技术,及大量的间接访问技术。实际上,送种将更新应用在相对较小粒度的运行时模块(例如对象、方法)而不是运行中的整个系统有显而易见的好处,凸显动态更新技术相比于传统基于停止再重启的更新模式的优势。从模块化的软件来看,动态软件更新技术面临个通用的技术问题。如何在更新某一模块的同时保持对其他模块的引用透明,如何对一个模块进行运行时状态转换,如何在多个模块需要更新时保障不同模块更新之间的依赖。动态软件更新的基本问题是对动态软件的理解,即运行中的软件形态。不同的运行时软件形态有其自身的困难和挑战,继而同样有着与之相匹配的更新技术。现有工作主要涵盖程序(代码)、组件系统、软件模型、开发框架、软件体系结构、操作系统、分布式系统、嵌入式系统、实时系统,对应的动态更新粒度有运行时的找中活动方法、堆区对象、组件、系统调用、节点等。因此,本节主要按照软件的运行时形态来探讨动态软件更新相关技术,即先通过介绍不同软件形态的特性,再讨论与之匹配的运行时更新和更新支撑技术。考虑到动态更新系统自身也是一种软件,因此围绕其有相关的传统软件工程需要研究的问题,例如,软件测试、安全、形式化和验证。这些技术由于并不与如何实现一个动态软件更新系统相关,因此我们不在込一节深入讨论。
1.1程序动态更新
程序是一种最广泛的软件形态。在当前存储程序结构下,运行中程序有相对固定的底层形态,即机器指令所操纵的内存中的数据。但是,不同程序设计语言分别有不同的高层抽象,例如面向过程程序中的过程,面向对象程序中的对象等。早期的程序动态更新技术主要关注如何为程序的运行时环境引入动态的更新的能力,大多集中讨论如何设计一个动态更新系统,提高动态更新的灵活性。
1.2动态软件更新
灵活性,也就是支持的更新类型的多少。由于依赖于早期的程序运行时环境、编译器,因此一些早期工作在现代的生产环境中变的不适用。此外,这些早期工作尚未能关注于一些实用性技术需求(例如性能),但實际上这些工作蕴含的有关动态软件更新的设计思想至今仍然用于指导现代动态软件更新系统的设计和实现。从技术实现上来讲,程序动态更新主要利用一些程序分析工具或者编译器对被更新的程序的源代码或者二进制文件进行插植达到控制程序执行和应用动态更新能力。动态更新技术一般不能自动保障更新的正确性口,所—般需要程序员参与准备更新过程中的运行时状态转换,开发相应的动态更新补下。因此,绝大部分既有工作都专注于如何自动的保障类型安全口。基于程序代码层插粧的动态更新系统需要在更新前对原程序的源码或者二进制文件进行修改。具体来说,这些动态更新系统需要在程序一开始执行时插入一些检测更新请求、触发动态更新的代码。此外,对于堆区对象更新,由于没有垃圾回收等技术的支持,送些动态更新要求用户实现对需要被更新的堆区对象的检测,对新版本对象空间的重分配等问题,因此给动态补了开发者带来额外的动态更新准备困难。基于程序代巧层插粧的动态更新系统与基于特定编程模型动态更新系统一个不同之处在于前者不需要开发者在开发阶段考虑动态软件更新,因此可适用于历史遗留程序,而后者需要开发者在设计、开发阶段就要考虑动态更新,过早的为系统引入复杂性。
2 分析的高效延时程序动态更新
基于类型分析的高效延时动态更新实施机制:针对既有工作无法同时保障低更新中断时间和低额外开销的不足,我们提出了一种基于类型分析的高效延时动态更新实施机制。该机制通过采用一种延时更新方式,将堆区对象的更新推迟到更新中断后的访问时,在不损失安全性、灵活性、及时性的前提下,有效地保障了低更新中断时间。同时,Java程小结序设计语言的静态类型特性和面向对象特性为基础,该机制通过精确的类型分析技术,大量消除由延时更新引入的程序执行过程中的更新相关操作,有效降低了系统运行时的额外开销,最终达到实现高效的Java程序动态更新的目标。
3 Java程序动态更新
Java程序的基本组成单元是类,一个类的类文件中定义了该类所继承的父类、实现的接口、创建的对象所包含的域和方法等信息。Java程序运行在Java虚拟机之中。当Java程序被Java虚拟机加载执行后,送些类文件中的信息会被转换成一系列元数据。这些元数据一般存储在特定的称之为元数据空间内存区域,为了叙述方便,本文用代码区来指代元数据空间。元数据定义了一个类在运行时的类型,用于指导程序执行过程中在堆区动态地创建该类型的对象。我们在动态更新过程中一般将运行中的Java程序的状态抽象地概括为由代码区、找区和堆区组成,在更新时只考虑对运行时状态中的代码区的元数据、找区的方法峽及堆区的对象进行更新。动态软件更新需要对程序的运行时状态进行修改。基于修改Java虚拟机的动态更新系统一般来说能够有效实现对运行时状态的修改,支持较多的更新类型,运行时性能高,无明显额外开销,与当前的软件系统集成较为容易。基于Java语言较好的向下兼容性,送些系统可同样较好支持历史遗留程序化。
参考文献:
[1]周志远,张大方,缪力.对Java并发程序进行模型检测[J].计算机工程与设计,2012(02).
[2]王艳臣,李必信,戴君.基于扩展同步序列的Java多线程程序可达性测试方法[J].东南大学学报(自然科学版),2013(06).
[3]华卫中,赵春云.Java线程的深入探讨[J].计算机系统应用,2012(07).
[4]唐建清,邹国霞.操作系统中“阅览室”问题的JAVA实现[J].桂林航天工业高等专科学校学报,2013(04).
[5]中国互联网信息中也Technicalreport,第38次中圉互联网络发展状况统计报告,2016.
关键词: 动态软件;软件更新
1 动态软件更新
早期的动态更新系统的技术原理,给出了用于刻画动态软件更新技术的需求,即动态更新不需要修改过多的运行时软件实体、对某一模块的动态更新不需要同时停止整个系统、某一模块的动态更新需要对其他模块或用户透明。事实上,动态软件更新之根本在于软件模块化的本质,而技术上来说源自于动态链接技术,及大量的间接访问技术。实际上,送种将更新应用在相对较小粒度的运行时模块(例如对象、方法)而不是运行中的整个系统有显而易见的好处,凸显动态更新技术相比于传统基于停止再重启的更新模式的优势。从模块化的软件来看,动态软件更新技术面临个通用的技术问题。如何在更新某一模块的同时保持对其他模块的引用透明,如何对一个模块进行运行时状态转换,如何在多个模块需要更新时保障不同模块更新之间的依赖。动态软件更新的基本问题是对动态软件的理解,即运行中的软件形态。不同的运行时软件形态有其自身的困难和挑战,继而同样有着与之相匹配的更新技术。现有工作主要涵盖程序(代码)、组件系统、软件模型、开发框架、软件体系结构、操作系统、分布式系统、嵌入式系统、实时系统,对应的动态更新粒度有运行时的找中活动方法、堆区对象、组件、系统调用、节点等。因此,本节主要按照软件的运行时形态来探讨动态软件更新相关技术,即先通过介绍不同软件形态的特性,再讨论与之匹配的运行时更新和更新支撑技术。考虑到动态更新系统自身也是一种软件,因此围绕其有相关的传统软件工程需要研究的问题,例如,软件测试、安全、形式化和验证。这些技术由于并不与如何实现一个动态软件更新系统相关,因此我们不在込一节深入讨论。
1.1程序动态更新
程序是一种最广泛的软件形态。在当前存储程序结构下,运行中程序有相对固定的底层形态,即机器指令所操纵的内存中的数据。但是,不同程序设计语言分别有不同的高层抽象,例如面向过程程序中的过程,面向对象程序中的对象等。早期的程序动态更新技术主要关注如何为程序的运行时环境引入动态的更新的能力,大多集中讨论如何设计一个动态更新系统,提高动态更新的灵活性。
1.2动态软件更新
灵活性,也就是支持的更新类型的多少。由于依赖于早期的程序运行时环境、编译器,因此一些早期工作在现代的生产环境中变的不适用。此外,这些早期工作尚未能关注于一些实用性技术需求(例如性能),但實际上这些工作蕴含的有关动态软件更新的设计思想至今仍然用于指导现代动态软件更新系统的设计和实现。从技术实现上来讲,程序动态更新主要利用一些程序分析工具或者编译器对被更新的程序的源代码或者二进制文件进行插植达到控制程序执行和应用动态更新能力。动态更新技术一般不能自动保障更新的正确性口,所—般需要程序员参与准备更新过程中的运行时状态转换,开发相应的动态更新补下。因此,绝大部分既有工作都专注于如何自动的保障类型安全口。基于程序代码层插粧的动态更新系统需要在更新前对原程序的源码或者二进制文件进行修改。具体来说,这些动态更新系统需要在程序一开始执行时插入一些检测更新请求、触发动态更新的代码。此外,对于堆区对象更新,由于没有垃圾回收等技术的支持,送些动态更新要求用户实现对需要被更新的堆区对象的检测,对新版本对象空间的重分配等问题,因此给动态补了开发者带来额外的动态更新准备困难。基于程序代巧层插粧的动态更新系统与基于特定编程模型动态更新系统一个不同之处在于前者不需要开发者在开发阶段考虑动态软件更新,因此可适用于历史遗留程序,而后者需要开发者在设计、开发阶段就要考虑动态更新,过早的为系统引入复杂性。
2 分析的高效延时程序动态更新
基于类型分析的高效延时动态更新实施机制:针对既有工作无法同时保障低更新中断时间和低额外开销的不足,我们提出了一种基于类型分析的高效延时动态更新实施机制。该机制通过采用一种延时更新方式,将堆区对象的更新推迟到更新中断后的访问时,在不损失安全性、灵活性、及时性的前提下,有效地保障了低更新中断时间。同时,Java程小结序设计语言的静态类型特性和面向对象特性为基础,该机制通过精确的类型分析技术,大量消除由延时更新引入的程序执行过程中的更新相关操作,有效降低了系统运行时的额外开销,最终达到实现高效的Java程序动态更新的目标。
3 Java程序动态更新
Java程序的基本组成单元是类,一个类的类文件中定义了该类所继承的父类、实现的接口、创建的对象所包含的域和方法等信息。Java程序运行在Java虚拟机之中。当Java程序被Java虚拟机加载执行后,送些类文件中的信息会被转换成一系列元数据。这些元数据一般存储在特定的称之为元数据空间内存区域,为了叙述方便,本文用代码区来指代元数据空间。元数据定义了一个类在运行时的类型,用于指导程序执行过程中在堆区动态地创建该类型的对象。我们在动态更新过程中一般将运行中的Java程序的状态抽象地概括为由代码区、找区和堆区组成,在更新时只考虑对运行时状态中的代码区的元数据、找区的方法峽及堆区的对象进行更新。动态软件更新需要对程序的运行时状态进行修改。基于修改Java虚拟机的动态更新系统一般来说能够有效实现对运行时状态的修改,支持较多的更新类型,运行时性能高,无明显额外开销,与当前的软件系统集成较为容易。基于Java语言较好的向下兼容性,送些系统可同样较好支持历史遗留程序化。
参考文献:
[1]周志远,张大方,缪力.对Java并发程序进行模型检测[J].计算机工程与设计,2012(02).
[2]王艳臣,李必信,戴君.基于扩展同步序列的Java多线程程序可达性测试方法[J].东南大学学报(自然科学版),2013(06).
[3]华卫中,赵春云.Java线程的深入探讨[J].计算机系统应用,2012(07).
[4]唐建清,邹国霞.操作系统中“阅览室”问题的JAVA实现[J].桂林航天工业高等专科学校学报,2013(04).
[5]中国互联网信息中也Technicalreport,第38次中圉互联网络发展状况统计报告,2016.