(计算机应用技术专业论文)基于java的agent透明迁移研究.pdf_第1页
(计算机应用技术专业论文)基于java的agent透明迁移研究.pdf_第2页
(计算机应用技术专业论文)基于java的agent透明迁移研究.pdf_第3页
(计算机应用技术专业论文)基于java的agent透明迁移研究.pdf_第4页
(计算机应用技术专业论文)基于java的agent透明迁移研究.pdf_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河海大学硕士研完生论文 基于j a v a 的a g e n t 透明迁移研究 摘要 在移动a g e n t 中,弱迁移指代码和数据的迁移,而强迁移则包括代码、数据 和执行状态的迁移。在强迁移中,所有捕获和恢复执行状态的动作对于应用程序 员来说是透明的,因此,强迁移也称为透明迁移。透明迁移对于很多应用领域, 比如计算密集型应用,有着重要的作用。目前直接基于j a v a 提供的代码迁移机 制构建的移动a g e n t 系统,比如a g l e t s 、m o l e 等,都只支持弱迁移,缺少对透明 迁移的支持。 论文提出了一种基于c e n t i n u a t i o n 的a g e n t 透明迁移机制。该方法不需要 修改j a v a 虚拟机,具有可移植性。论文引入了函数程序设计语言中c o n t f n u a t i o n 的概念,c o n t f n u a t i o n 表示一个计算过程在某一时刻的全部状态,即线程的执 行状态,在a g e n t 迁移到目的主机后就可以使用c o n t i n u a t i o n 恢复这个状态。 c o n t i n u a t i o n 的实现需要字节码转换的支持。论文使用j a v a 5 0 提供的字节码 转换接口、a n n o t a t i o n 机制以及开源字节码转换工具a s m 实现对字节码的转换, 将线程状态保存到c o n t i n u a t i o n 中,并插入状态恢复指令。 论文并在该方法的基础上实现了一个原型系统:j m o b i l e 。j m o b i l e 主要包 括c o n t i n u a t i o n 模块、字节码转换模块以及基于j a v as o c k e t 的a g e n t 迁移模 块。其中a g e n t 迁移模块使用s o c k e t 机制实现a g e n t 的迁移,a g e n t 在加载到 虚拟机之前使用字节码转换模块对其进行转换,这样a g e n t 就携带其执行状态以 流的形式在网络中迁移。论文并对j m e b i l e 中的字节码转换从存储空间开销和时 间开销两个方面进行了测试。 关键词:代码迁移、移动a g e n t 、透明迁移、延续 河海大学硕士研究生论文 基于j a v a 的a g e n t 透明迁移研究 a b s t r a c t i nm o b i l ea g e n ts y s t e m sw e a km i g r a t i o nt r a n s f e r sc o d e a n dd a t a ,w h i l es t r o n g m i g r a t i o nt r a n s f e r sc o d e ,d a t aa n de x e c u t i o ns t a t e a l lt h eo p e r a t i o n so fc a p t u r i n ga n d r e e s t a b l i s h i n gt h ee x e c u t i o n s t a t ea r et r a n s p a r e n tt ot h ep r o g r a m m e rw h i l eu s i n g s t r o n gm i g r a t i o n s os t r o n gm i g r a t i o ni sa l s oc a l l e dt r a n s p a r e n tm i g r a t i o n t r a n s p a r e n t m i g r a t i o np l a ya ni m p o r t a n tr o l ei nm a n ya p p l i c a t i o nd o m a i n s ,e g c o m p u t a t i o n a l l y i n t e n s i v ea p p l i c a t i o n a tp r e s e n tt h em o i b l ea g e n ts y s t e m s ,w h i c ha r ec o n s t r u c t e d d i r e c t l yu p o nt h ec o d em i g r a t i o nm e c h a n i s mj a v ap r o v i d e s ,e g a g l e t s ,m o l e ,o n l y s u p p o r tw e a km i g r a t i o n t h e yd o n ts u p p o r tt r a n s p a r e n tm i g r a t i o n t h i sd i s s e r t a t i o np r o p o s e sat r a n s p a r e n ta g e n tm i g r a t i o nm e c h a n i s mb a s e do n c o n t i n u a t i o n t h ej a v av i r t u a lm a c h i n ei sn o tm o d i f i e d ,s ot h i sm e t h o di sp o r t a b l e t h i sd i s s e r t a t i o ni n t r o d u c e s c o n t i n u a t i o n ,w h i c h i san o t i o no ff u n c t i o n a l p r o g r a m m i n gl a n g u a g e c o n t i n u a t i o nc o n t a i n s t h ew h o l es t a t ea to n ep o i n to fa c o m p u t a t i o n a lp r o c e d u r e ,i e t h ee x e c u t i o ns t a t eo fat h r e a d a f t e ra r r i v i n ga t t h e t a r g e tm a c h i n e ,t h ea g e n tc a nr e e s t a b l i s ht h e s t a t e b yu s i n g c o n t i n u a t i o n t h e i m p l e m e n t a t i o n o fc o n t i n u a t i o n d e p e n d s o n b y t e c o d et r a n s f o r m a t i o n t h i s d i s s e r t a t i o nu t i l i z e st h e b y t e c o d et r a n s f o r m a t i o ni n t e r f a c ea n dt h ea n n o t a t i o n m e c h a n i s mj a v a5 0 p r o v i d s ,t o g e t h e rw i t ha s m ( a no p e n s o u r c e b y t e c o d e i n s t r u m e n t a t i o nt 0 0 1 ) t oi n s t r u m e n tt h eb y t ec o d eo fa g e n t t h et h r e a ds t a t ei ss t o r e di n c o n t i n u a t i o n ,a n dt h ei n s t r u c t i o n st or e e s t a b l i s ht h es t a t ei si n n s e r t e di nt h ea g e n t t h i sd i s s e r t a t i o na l s op r o v i d e sap r o t o t y p ei m p l e m e n t a t i o nj m o b i l eb a s e do nt h e a b o v em e c h a n i s m j m o b i l ec o n t a i n st h r e em o d u l e s :c o n t i n u a t i o nm o d u l e ,b y t ec o d e i n s t r u m e n t a t i o nm o d u l ea n da na g e n tm i g r a t i o nm o d u l eb a s e do nj a v as o c k e t t h e a g e n tm i g r a t i o nm o d u l ei m p l e m e n t s t h em i g r a t i o no fa g e n tb yu s i n gt h es o c k e t m e c h a n i s m t h ea g e n ti si n s t r u m e n t e db yt h eb y t ec o d ei n s t r u m e n t a t i o nm o d u l e b e f o r el o a d e db yt h ev i r t u a lm a c h i n e t h e nt h ea g e n ti sc o n v e r t e dt oas t r e a m ,w h i c h c a nm i g r a t ei nt h en e t w o r kw i t hi t se x e c t u t i o n s t a t e t h eo b s e r v e dp e r f o r a m c e m e a s u r e sa r ea l s or e p o s e d ,i nt e r m so ft h es a p c eo v e r h e a da n dt h er u n t i m eo v e r h e a d b yb y t ec o d ei n s t r u m e n t a t i o n k e y w o r d s :c o d em i g r a t i o n ,m o b i l ea g e n t ,t r a n s p a r e n tm i g r a t i o n ,c o n t i n u a t i o n i l 学位论文独创性声明: 本人所呈交的学位论文是我个人在导师指导下进行的研究工作 及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方 外,论文中不包含其他人已经发表或撰写过的研究成果。与我一同工 作的同事对本研究所做的任何贡献均已在论文中作了明确的说明并 表示了谢意。如不实,本人负全部责任。 论文作者( 签名) : 学位论文使用授权说明 薛壑堡 五“年j 月2 6 目 河海大学、中国科学技术信息研究所、国家图书馆、中国学术 期刊( 光盘版) 电子杂志社有权保留本人所送交学位论文的复印件或 电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子 文档的内容和纸质论文的内容相一致。除在保密期内的保密论文外, 允许论文被查阅和借阅。论文全部或部分内容的公布( 包括刊登) 授权 河海大学研究生院办理。 论文作者( 签名) : 惑塞塾“年, 月二占日 第一章引言 1 1 代码迁移概述 分布式系统包含一系列相互独立的、自治的计算机,这些计算机一起运作, 呈现给用户的是一个单一的内部协调一致的系统。分布式系统将运行于不同计 算机上的应用程序集成到一个系统中,这些应用程序之间的通信是由位于系统中 更高层次上的软件来提供的。在传统的分布式系统中,各个节点间的通信是通过 静态配置的、固定的物理链接进行的。在这种计算模式下,运行于节点上的分布 式应用程序的各个构件在其程序的整个生命周期中都被固定地绑定在这些节点 上。随着技术的发展,分布式系统中引入了“移动性”的概念,移动性可以分为 物理上的移动性和逻辑上的移动性。1 ,物理上的移动性是指系统的各个主机在无 线网络中的物理位置不是固定的,而是移动的;逻辑上的移动性是指代码迁移, 即程序代码,可能包括正在执行的程序的状态在各个主机之间的迁移。传统的分 布式系统受到了来自所谓代码迁移的挑战。代码的可移动性是指能够动态改变程 序代码段和它们的执行位置的能力。“。代码迁移使得程序代码,甚至是正在运 行的程序能够在网络的各个节点间进行移动。分布式应用程序的构件的位置成为 应用程序设计中的“一等公民”。代码迁移简化了分布式应用程序的设计,使得 研究、开发人员能够更加灵活地创建和使用分布式系统,正受到学术界以及产业 界的越来越多的关注。 从字面上看,代码迁移表示仅仅在各个主机问移动程序代码,但是实际上这 个术语涵盖了更广阔的领域。我们可以从狭义和广义两个角度来理解代码迁移。 从狭义上讲,代码迁移只表示程序代码的迁移;从广义上讲,代码迁移表示的是 整个程序的迁移,包含了数据、程序代码以及正在执行的程序的状态的迁移。 在研究工作的早期,研究者们已经设计并实现了一些在网络的节点间移动代 码的机制,比如i b m 的r e m o t ej o bs u b m i s s i o n “1 以及使用p o s t s c r i p t 去控制打 印机”1 。在分布式操作系统的研究中,进程迁移是研究的一个主要问题。进程迁 移是指将一个操作系统进程从一台计算机迁移到另一台计算机上。研究者们在操 作系统层上对活动进程的迁移问题进行了研究,进程的迁移包括进程的状态和相 关的代码的迁移”1 。进程迁移机制很好的处理了进程和其执行环境之间的绑定, 使得进程在迁移到目的主机后能够无缝地恢复执行。对整个系统而言,进程迁移 机制使得进程从系统中负载较高的节点迁移到负载较低的节点上,从而实现了负 载均衡,提高了系统的整体性能。随着计算机网络的迅速发展,i n t e r n e t 成为 最大的分布式系统,为了适应新系统的要求,研究者们在原有迁移技术的基础上 塑堡苎量堡主竺墨生堕墨 叁主! ! :! 竺坚! 坐墨望堡壁塑查 对更为一般的代码迁移进行了深入的研究。在此基础上,许多研究者把代码迁移 的概念进步扩展到移动对象“3 。在移动对象环境中,一个对象,包括代码和数 据,从一台主机移动到另一台主机上。而移动a g e n t 是对移动对象的进一步扩 充。 1 2 移动a g e n t 概述 移动a g e n t 是一个独立运行的计算机程序,能够在其运行过程中自主地从一 台主机迁移到另台主机,也就是说a g e n t 可姒中断自己的运行,迁移到另一台 主机上,并且在新主机上从中断的地方继续运行。“。移动a g e n t 是代码迁移的一 种形式。移动a g e n t 概念的提出,更一般的说是代码迁移,使得应用程序构件的 执行位置成为程序设计过程中的首要元素。开发者在程序设计过程中更多的考虑 程序构件的执行位置,以及a g e n t 在各个节点间的迁移问题。移动a g e n t 是代码 迁移发展的最新形式,是种新颖的构建分布式应用程序的设计范例。移动a g e n t 越来越受到学术界和工业界的关注。 移动a g e n t 具有自主性、移动性、协作性、安全性和智能性等特征o “。自主 性是指a g e n t 可以不需要用户的干预,按照自己的意愿完成特定的任务。移动性 是指a g e n t 可以在任意的主机h 中断执行,迁移到目的主机上恢复执行。移动性 是移动a g e n t 的核心属性,a g e n t 的迁移既有代码迁移的一般特点,也有其作为 移动a g e n t 的特性。比如,a g e n t 可以自主迁移,即a g e n t 可以不受用户的干预, 根据自己的意愿进行迁移。协作性是指若干个移动a g e n z 可阻在网络中相互通信 和合作,共同完成某一任务。安全性是指对a g e n t 本身及a g e n t 运行环境的安全 性保障。智能性是指a g e n t 具有一定的自适应能力,可对环境的变化作出适当的 反应。 移动a g e n t 主要有以下几个方面的好处:减轻网络负载,克服网络延迟,封 装协议,异步和自治执行,动态适应环境,适应异构环境较好的健壮性和容错 能力。目前,移动a g e n t 主要应用于以下几个方面:电子商务、分布式信息查询、 数据库访问、电信网络服务、工作流应用和群件、监视和通知、并行处理、移动 设备、信息发布、网络管理等。 移动a g e n t 的真正的优势不在于开发新的分布式应用稗序,而是能够在一个 通用的框架里实现大量高效的、健壮的以及简单的分布式应用程序。目前,学术 界和产业界已经实现了一些移动a g e n t 系统,主要有:d a g e n t s “、a g t e t s ”、 t e l e s e r i p t “、a l o le “、s u m a t r a “等。由于j a v a “7 1 对分布式计算的良好支持, 很多移动a g e n t 系统采用j a v a 作为其实现基础,包括:a g l e t s 、m o l e 、s u m a t r a 很多移动a g e n t 系统采用j a v a 作为其实现基础,包括:a g l e t s 、m o l e 、s u m a t r a 等。 翌堡垄主塑主竺垄兰堡墨墨! ! ! :! 塑望! ! ! 堡望兰壁! 查 1 3j a v a 对代码迂移的支持 目前,j a v a 已经成为分布式应用程序开发的一个重要平台,j a v a 的面向对 象特性、平台无关性、动态类加载以及安全特性使得它非常适合开发分布式应用 程序。j a v a 编译器将j a v a 源程序编译为j a v a 字节码( j a v ab y t ec o d e ) ,j a v a 字节码是可以被j a v a 虚拟机( j v m ) “”执行的中间代码,是可移植的。j a v a 解 释器可以在任何移植了j a v a 虚拟机的机器上执行j a v a 字节码。目前j a v a 虚拟 机已经被移植到了几乎所有的系统平台上,这样基于j a v a 的a g e n t 就能够运行 于异构平台之上。 j v m 提供了动态类加载和对象序列化“4 ”1 两个服务以简化分布式应用程序的 开发。其中,动态类加载服务允许j a v a 代码在网络的各个节点间迁移:对象序 列化服务使得j a v a 对象能够在网络的各个节点间迁移。因此,通过动态类加载, j a v a 为分布式应用程序的开发提供了程序代码的迁移服务;通过对象序列化, j a v a 提供了数据的迁移服务。很多现有的基于j a v a 的移动a g e n t 系统正是利用 j a v a 提供的迁移服务来实现a g e n t 的迁移的,比如a g l e t s 、m o l e 等。这些基于 j a v a 的移动a g e n t 系统定义a g e n t 为虚拟机底层的执行单元,也就是j a v a 线程。 依据动态类加载机制,移动a g e n t 系统可以实现一个网络类加载器,该加载器可 以将属于当前a g e n t 的所有类的j a v a 字节码在网络中移动,这其中也包括该 a g e n t 所引用的其它的类。j a v a 对象序列化机制能够以对象流的形式序列化和移 动对象,而该对象所引用的其它对象的实例也会递归地序列化。在基于j a v a 的 移动a g e n t 系统中使用序列化a p i 时,a g e n t 只需要被序列化,也就是a g e n t 必 须实现j a v a i o s e r i a l i z a b l e “”接口,该接口没有方法需要a g e n t 来实现,它 只是定义了可以被序列化的语义。只要a g e n t 实现了该接口,j a v a 就会使用默 认的实现机制来序列化该a g e n t 。在j a v aa g e n t 系统中,另一种实现a g e n t 序 列化的方法是实现j a v a i o e x t e r n a l i z a b l e 。”接口,该接口定义了两个方法来 实现对象的序列化和反序列化,实现该接口的a g e n t 需要实现这两个方法来完成 自身的序列化。 但是j a v a 并没有提供迁移正在执行的程序( j a v a 线程) 的服务,因此如果 一个正在运行的程序通过对象序列化和动态类加载服务迁移到一个新的主机上, 该程序的执行状态就会丢失掉,也就是说,在程序迁移到新主机上后,该程序能 够访问它的代码和重新实现的数据,但是它必须重新开始程序的运行,而不能够 继续程序在原主机上的运行。早期的移动a g e n t 系统,比如d a g e n t s 和 t e l e s c r i p t ,就提供了机制来支持执行状态的迁移。而由于j a v a 语言本身没有 提供支持执行状态的迁移,所以,在基于j a v a 的a g e n t 系统中要实现a g e n t 执 行状态的迁移仅仅依靠j a v a 提供的服务是不够的,需要系统实现者自己提供状 河海大学硕士研究生论文 基于j a v a 的a g e n t 透明迁移研究 态迁移的服务,这也论文所要研究的主要问题。 1 4 研究背景 移动性是移动a g e n t 的核心属性,移动a g e n t 有两种迁移形式:弱迁移( w e a k m o b i l i t y ) 和强迁移( s t r o n gm o b i l i t y ) 。1 。弱迁移只是a g e n t 在不同的主机 间迁移代码,迁移时可能携带一些初始化数据,但是不涉及执行状态的迁移。弱 迁移的显著特征就是在a g e n t 迁移到新的主机后通常是从其初始状态重新开始 执行。弱迁移比较简单,它只需要新的主机能够执行a g e n t 即可。和弱迁移相比, 强迁移支持a g e n t 的代码、数据和执行状态在各个主机问的迁移。强迁移涉及了 执行状态的迁移。强迁移的显著特征是一个正在运行的a g e n t 在其运行过程中能 够中断其执行过程,接着迁移到新的主机上,并从中断的地方继续运行。强迁移 比弱迁移的功能更强大,但是实现起来比弱迁移更困难。在支持弱迁移的系统中, 如果a g e n t 需要保持线程状态,那么程序员需要提供额外的代码将执行状态保存 到变量中,并且在a g e n t 迁移到目的主机后提供代码去读取并重新建立在源主机 上保存的状态,因此弱迁移也称为非透明迁移。在强迁移系统中,从被迁移的 a g e n t 角度看迁移完全是透明的,不需要程序员编写代码去存储执行状态,以及 在迁移后读取并重新建立在源主机上保存的状态,因此也称为透明迁移。强迁移 和弱迁移相比主要有以下几个方面的优势: 1 应用程序员使用强迁移进行程序开发比使用弱迁移开发程序更容易。在 强迁移系统中,程序员只要在需要迁移的代码处插入系统提供的迁移原语,不需 要改变程序的架构。而在弱迁移系统中,程序员必须按照系统提供的开发模式进 行开发,单个的逻辑动作将被分散在多个方法中执行。“,增加了程序开发的难度, 降低了系统的易用性。 2 强迁移在计算密集型的应用领域( 比如网格计算) 中,有着一定的应用。 在这些应用环境中,可以使用移动a g e n t 实现复杂的、需要长时间计算的程序。 在计算过程中,如果该a g e n t 需要使用网络中共享的计算资源时,它就会带着执 行状态迁移到资源所在的主机上,在那里a g e n t 接着原先的计算过程继续执行。 如果a g e n t 是在只支持弱迁移的系统中运行,那么在a g e n t 迁移到目的主机后, 由于其并没有保存计算状态,因此,该a g e n t 不得不从头开始计算,将重复其在 源主机上已经完成的部分计算,增加7 系统的开销。 由于j a v a 的平台无关性和对代码迁移的良好支持r 目前大多数移动a g e n t 系统都是基于j a v a 来构建的。然而,j a v a 的执行模型没有提供对程序运行状态 的访问,因此,目前直接基于j a v a 提供的代码迁移机制构建的主流的移动a g e n t 系统,比如a g l e t s 、m o l e 等,都只支持弱迁移。这些系统使用方法回调机制实 现a g e n t 的迁移,基于这些系统进行应用程序的开发存在着一定的难度,系统的 河海太擘硕士研究生论文基于j a v a 的a g e n t 透明迁移研究 易用性很差。对于j a v aa g e n t 系统中强迁移机制的实现是当前j a v aa g e n t 研究 的一个重要方面。本文进行j a v aa g e n t 系统中实现强迁移机制,即透明迁移, 的研究。 1 5 本文工作 本文的研究目的主要有以下两个方面:提供一种透明的、可移植的j a v a 线 程迁移的方法,并基于该方法实现一个原型系统。透明性是指迁移的动作从被迁 移程序的角度来看是完全透明的,应用程序员只需要在程序中有迁移请求的地方 调用简单方便的a p i 。可移植性是指实现迁移的方法要能够对任何部署了标准 j a v a 虚拟机的平台都适用,这样所研究的方法就必须保证不修改标准的j a v a 虚 拟机。 本文进行基于j a v a 的a g e n t 透明迁移的研究,在基于j a v a 的a g e n t 系统中, a g e n t 表现为底层的j a v a 线程,因此,对a g e n t 透明迁移的研究就主要表现为 对j a v a 线程迁移的研究。本文对j a v a 线程迁移的三种主要方法:基于虚拟机层 的方法、基于应用程序层的方法和基于j p d a 的方法进行了研究,并对这三种方 法进行了比较,指出每种方法的优缺点。结合本文的研究目的,本文在a g e n t 迁 移模型中引入了函数式程序设计语言中的c o n t i n u a t i o n 的概念,c o n t i n u a t i o n 表示一个计算过程在某一时刻的全部状态,即线程的执行状态,在a g e n t 迁移到 目的主机后就可以使用c o n t i n u a t i o n 恢复这个状态。在c e n t i n u a t i o n 的基础上, 本文提供了字节码转换方法对a g e n t 的字节码进行转换,在其中插入具有捕获和 恢复其执行状态的指令,这样,c o n t i n u a t i o n 就可以捕获到a g e n t ,并携带着 a g e n t 迁移到目的主机上,在那里恢复其执行,实现了a g e n t 的透明迁移。本文 在对基于c o n t i n u a t i o n 的透明迁移机制研究的基础上实现了一个原型系统: j m o b i l e 。j m o b i l e 主要包括实现c o n t i n u a t i o n 功能的模块、字节码转换模块和 基于j a v as o c k e t 的a g e n t 迁移模块三个模块。其中c o n t i n u a t i o n 模块实现了 c o n t i n u a t i o n 的功能,该模块可以用来执行建立c o n t i n u a t i o n 环境、中断a g e n t 的执行过程以及恢复a g e n t 的执行过程的操作,这些操作都是捕获和恢复a g e n t 执行状态必需的方法。而实际的捕获和恢复执行状态的操作是通过字节码转换来 实现的。字节码转换模块基于a s m 实现了对a g e n t 字节码的转换,在其中插入具 有线程状态捕获和恢复功能的指令,并结合c o n t i n u a t i o n 实现了a g e n t 的透明 迁移。其中基于j a v as o c k e t 的a g e n t 迁移模块使用s o c k e t 机制实现a g e n t 的 迁移。实现了序列化接口的c o n t i n u a t i o n 在捕获到a g e n t 后可以通过s o c k e t 以 对象流的形式在网络中迁移。在该原型系统中,通过c o n t i n u a t i o n 模块,并结 合字节码转换模块,可以实现a g e n t 的透明迁移功能。 目前,j a v a 只提供对象序列化机制,并没有提供对j a v a 线程迁移的支持, 河海大学硕士研究生论文基于j a v a 的a g e n t 透明迁秽研究 但是,在很多应用领域中,比如持久化、移动计算等,都需要j a v a 线程状态的 捕获和恢复服务,即j a v a 的线程迁移机制。因此,本文的研究内容对这些应用 领域具有一定的指导作用。我相信,由于有着实际应用的需求,s u n 公司会在未 来j a v a 的版本中加入j a v a 线程迁移机制。 1 6 本文组织 第一章,引言。本章对代码迁移和移动a g e n t 进行了概述,介绍了j a v a 对 代码迁移的支持。最后给出了本文的研究目的和所做的工作以及文章组织。 第二章,j a v aa g e n t 透明迁移。本章首先讨论了和j a v aa g e n t 迁移有关的 j a v a 虚拟机的一些概念,以及透明迁移的分类。接着重点讨论了三种j a v a 线程 迁移的方法分析了各自的线程状态的捕获和恢复机制,并指出了每种方法的优 缺点及适用环境,并对三种方法进行了比较。 一 第三章,基于c o n t i n u a t i o n 的透明迁移机制。本章提出了一种基于 c o n t i n u a t i o n 的透明迁移机制,给出了在c o n t i n u a t i o n 环境中线程执行状态的 捕获和恢复方法,进而提出了一种可移植的a g e n t 透明迁移机制。e o n t i n u a t i o n 环境的建立依赖于字节码改写技术,本章还讨论了字节码转换器的实现技术,并 给出了一个简单的例子对字节码转换进行分析。 第四章,j m o b i l e 的实现。本章在第三章研究的基础上给出了j h o b i l e 原型 系统的实现。j m o b i l e 原型系统包括下面三个模块:实现c o n t i n u a t i o n 功能的 模块、字节码转换模块和基于j a v as o c k e t 的a g e n t 迁移模块。本章还对该系统 中字节码转换的性能从存储空间和时间两个方面进行了测试。 第五章,总结与展望。本章对论文的内容进行总结,指出存在的问题,并展 望了今后需要进一步完善和开展的工作。 河海大学硕士研究生论文 基于j a v a 的a g e n t 透明迁移研究 第二章j a v aa g e n t 透明迁移 目前,j a v a 虚拟机已经被移植到了几乎所有的系统平台上,这样基于j a v a 的a g e n t 就能够运行于异构平台之上。j a v a 的动态类加载服务使得j a v a 代码能 够在网络的各个节点间迁移,j a v a 的对象序列化服务使得j a v a 对象能够在网络 的各个节点问迁移。这样,j a v a 支持弱迁移。所以,现代多数移动a g e n t 系统 都是基于j a v a 实现的,比如a g l e t s 、m o l e 等。这些直接使用j a v a 提供的代码 迁移机制来构建的移动a g e n t 系统,它们只支持弱迁移,不支强迁移( 透明迁移) 。 在基于j a v a 的移动a g e n t 系统中,a g e n t 为虚拟机底层的执行单元,也就是j a v a 线程,线程包含了其执行状态,因此,a g e n t 的透明迁移也就表现为j a + a 线程 的迁移。要实现j a v a 线程的迁移,必须要能够捕获线程的执行状态,并在a g e n t 迁移到目的主机后恢复该状态。由于j a v a 线程运行于j a v a 虚拟机中,对于本章 后面所讲述的j a v a 线程状态的理解需要j a v a 虚拟机的基础知识,因此,本章首 先讲述j a v a 虚拟机的背景知识。 2 1 j a v a 虚拟机 j a v a 虚拟机是整个j a v a 平台的基石。j a v a 虚拟机是一个抽象的计算机器, 它有一系列的指令集,能够在运行时操作不同的内存区域。j a v a 虚拟机可以看 作是j a v a 程序的运行时环境。j a v a 编译器将j a v a 源程序编译为j a v a 字节码, j a v a 字节码是可以被j a v a 虚拟机执行的二进制格式的中间代码,具有可移植性, j a v a 虚拟机负责解释j a v a 字节码。目前j a v a 虚拟机已经被移植到了几乎所有 的系统平台上,因此,j a v a 字节码程序就能够运行在异构平台上。j a v a 虚拟机 主要是由三个部分组成:指令集( i n s t r u c t i o n ss e t ) 、执行机( e x e c u t i o ne n g i n e ) 和运行时数据区域( r u n t i m ed a t aa r e a s ) “。图2 1 表示了j a v a 虚拟机的内 部架构。 j a v a 虚拟机中的字节码指令集和处理器中的指令集相似。每个指令定义了要 执行的操作,操作数的数目和类型。比如字节码指令i a d d ,l a d d ,f a d d ,d a d d 分别对两个整型、长整型、浮点型和双精度型的操作数进行加法运算,并且分别 返回相同类型的结果。j a v a 虚拟机基于栈结构执行字节码指令。比如字节码指 令i a d d 表示两个整型数v a l u e l 和v a l u e 2 相加,在i a d d 执行前这两个值被压入 操作数栈,在运算完成后这两个值从操作数栈中弹出,运算结果r e s u l t 压入栈 中。 河海大学硕士研究生论文 基于j a v a 的a g e n t 透明迁移研究 n a t l v e m e t h o d f i b r a r i e s 图2 1j a v a 虚拟机的内部架构 j a v a 虚拟机中的执行机是运行字节码的环境。早期的j a v a 虚拟机是基于解 释执行的,j a v a 解释器将字节码指令翻译成本地代码,然后执行。现代的j a v a 虚拟机使用即时编译( j u s t i n t i m e ,j i t ) “8 1 技术,大大提高了j a v a 虚拟机的 性能。即时编译在第一次调用某个方法的时候就将该方法编译为本地代码,接下 来的每次对该方法的调用都是使用已经编译好的本地代码,提高了程序的运行速 度。还有一种情况,就是当一个方法很少被调用的时候,就没有必要在第一次调 用的时候将其编译为本地代码,而要使用一种自适应的即时编译技术,也就是说, 只动态编译经常被调用的方法,对于不经常被调用的方法,还是采取解释执行的 办法。 j a v a 虚拟机定义了多个在程序执行过程中使用的运行时数据区域。这些数据 区域中有一些是在j a v a 虚拟机启动的时候创建的,在j a v a 虚拟机停机的时候结 束。其它的数据区域对应于每一个线程,它们在线程创建的时候创建,在线程终 止的时候结束。j a v a 虚拟机中的运行时数据区域包括:p c 寄存器( p r o g r a m c o u n t e rr e g i s t e r ) 、j a v a 虚拟机栈( j a v av i r t u a lm a e h i n es t a c k s ) 、堆( h e a p ) 、 方法区域( m e t h o da r e a ) 、运行时常量池( r u n t i m ec o n s t a n tp 0 0 1 ) 、本地方法 栈( n a t i v e m e t h o ds t a c k s ) “。每个j a v a 虚拟机线程都拥有自己的p c 寄存器, p c 寄存器中包含了下一条将要执行的j a v a 虚拟机指令的地址。每个j a v a 虚拟 机线程都有一个私有的j a v a 虚拟机栈。j a v a 虚拟机栈是在其对应的线程创建的 时候创建的。j a v a 虚拟机栈和c 语言中的栈很相似,栈中保存着局部变量和操 作数栈,栈在方法的调用和返回中起着重要的作用。这些局部变量和操作数栈以 框架( f r a m e s ) 的形式存储在栈中。j a v a 栈是由一系列连续的栈框架组成的, 框架是用来存储局部变量和操作数的数据结构。在j a v a 虚拟机中,每次一个线 程调用一个方法时,j a v a 虚拟机就创建一个新框架,并将该新框架压入线程的 河海大学硕士研究生论丈 基于j a v a 的a g 如i 透明迁移研究 j a v a 栈中。当方法完成时,虚拟机就弹出并丢弃掉该方法对应的框架。j a v a 栈 中的每一个框架都有自己的局部变量表( 以数组的形式存储) 和操作数栈。图 2 2 显示了j a v a 栈中的框架结构。 l o c a lv a r i a b l e s 圈2 2j a v a 栈结构 在j a v a 虚拟机的运行时数据区域中,j a v a 栈、对象堆和方法区域是描述一 个j a v a 线程状态的三个主要的数据结构。对象堆和方法区域分别对应着j a v a 对 象和j a v a 类,这些结构在异构系统中具有可移植性。而j a v a 栈是一个本地的数 据结构,通常是c 结构,因此,j a v a 栈中包含的信息的表现方式依赖于底层的 架构,不具有可移植性。图2 3 表示了j a v a 线程状态。 ,、 r 孟i e c 、 = ! :二声、 : 、 厂寸、c 1 8 8 乡e f e r e n c e 、o b j e c t ) 、:、 r e f e r e n c e套 孓乡? j 孓 o b j e c t ) j a v as t a c kh e a p 图2 3j a v a 线程状态 2 2j a v aa g e n t 透明迁移分类 对于a g e n t 程序员来说,如果a g e n t 的迁移是完全透明的,也就是说不需要 a g e n t 程序员编写代码来辅助完成a g e n t 的迁移,那么,这种迁移就称为a g e n t 的透明迁移,也即强迁移。透明迁移要求将a g e n t 的执行状态随着a g e n t 一起迁 移到目的主机上,并恢复执行。因此,透明迁移除了包括a g e n t 程序代码的迁移, 还包括状态迁移( s t a t em i g r a t i o n ) ”。状态迁移是由执行状态迁移( e x e c u t i o n m i g r a t i o n ) 和数据状态迁移( d a t am i g r a t i o n ) 构成。执行状态迁移包括程序 河海大学硕士研究生论文 基于j a v a 的a g c n t 透明迁移研宄 计数器迁移( p r o g r a mc o u n t e rm i g r a t i o n ) 和线程迁移( t h r e a dm i g r a t i o n ) : 数据状态迁移包括成员迁移( m e m b e rm i g r a t i o n ) 、栈迁移( s t a c km i g r a t i o n ) 和资源迁移( r e s o u r c em i g r a t i o n ) 。关于透明迁移的各个组成成分可参见图2 4 。 s t r o n g m i g r a t i o n m i g r a 图2 4 透明迁移分类 组成a g e n t 的程序代码的迁移是指a g e n t 韵所有的代码从源主机迁移到目的 主机上。通常情况下,a g e n t 不只是由一个类所组成,在a g e n t 中还有着许多对 其它对象的引用,因此,这些对象的代码也要相应地进行迁移。但是,需要注意 的是,并不是a g e n t 引用的所有对象的代码都要迁移,比如j a v a 的核心类库和 a g e n t 系统本身的框架类就不需要迁移。因为,这些类库是驻留在主机上的,如 果一起迁移,将影响到系统的性能。 要实现a g e n t 的透明迁移,就要实现状态迁移。状态迁移中主要的一方面是 执行状态迁移,在执行状态迁移中主要是要实现程序计数器的迁移。a g e n t 的执 行状态包括j a v a 栈、对象堆和方法区域。这些执行状态存在于虚拟机中,这样, 要实现a g e n t 的透明迁移,就要能够访问位于虚拟机中的这些执行状态,捕获执 行状态,并进行迁移。由于程序计数器指示着当前执行的程序指令,因此程序计 数器迁移使得a g e n t 在迁移到目的主机后,能够从在源主机上中断的地方恢复执 行。由于移动a g e n t 具有自主性,a g e n t 能够自主地决定自己的迁移,这样在a g e n t 的代码中就存在一些预先定义的点,当a g e n t 运行到这些点时,a g e n t 就开始迁 移。栈迁移依赖于程序计数器迁移,栈迁移实现了调用栈中所有方法的局部变量 和操作数栈的迁移。关于程序计数器迁移和栈迁移的具体实现本文后面章节将有 具体阐述。状态迁移还需注意线程迁移,在a g e n t 迁移时,需要考虑该a g e n t 所 创建的所有子线程。对于这种形式的线程迁移的实现可以使用前面讨论的程序计 数器迁移和栈迁移,以及后面将要讨论的成员迁移和资源迁移。 状态迁移的另一个主要方面是数据状态迁移。对象数据包括调用栈上的所有 方法的对象成员和局部变量。成员变量和局部变量保存着a g e n t 的数据,它们的 迁移是a g e n t 状态迁移的一个非常重要的方面。资源迁移涉及到a g e n t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论