版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
柔性软件体系结构SoftwareArchitecture目录THU
SAGroup为何要有柔性?1动态软件体系结构:行为视角2动态软件体系结构:反射视角3动态软件体系结构:协调视角4柔性的概念和实例52为何要有柔性?目前的业务动机的需要业务动机要求软件可以快速改变自身的体系结构以适应新的要求常规的“可扩展性”已经逐渐不能满足快速变化的需要THU
SAGroup3柔性的要求一个可以进行柔性变化的软件需要:在运行时做出体系结构的改变在改变之前需要校验将要做出的改变一方面能够满足需要;另一方面能够被验证是正确的可感受运行上下文(环境)的改变来自行进行体系结构的改变可以通过一些规则对软件的柔性加以限制THU
SAGroup4ChangeableAdaptable柔性的代价要实现柔性软件体系结构必须在运行时显式的维护体系结构模型信息实现自适应机制实现自适应校验机制软件结构高度构件化THU
SAGroup5总之,对软件运行带来冗余开销,对性能和复杂性产生负面影响关键是要进行在系统功能和柔性之间进行权衡动态软件体系结构什么是动态软件体系结构(DynamicSoftwareArchitecture,DSA)?如果说软件体系结构可以被简化的看作为“一组运行时构件、连接器和它们之间关系的集合”,那么动态软件体系结构就是“一组可在运行时变化的运行时构件、连接器和它们之间关系的集合”为什么需要动态软件体系结构?解决柔性软件体系结构中的“可变性”(Changeable)问题。THU
SAGroup6动态性的级别THU
SAGroup7动态性的级别级别1交互动态性
(interactivedynamism)要求数据在固定的结构下动态交互级别2“结构动态性”(structuraldynamism)允许对结构进行修改,通常的形式是构件和连接器实例的添加和删除。特别的,本级别又常被称为“动态重配置”(dynamicreconfiguration)。级别3“体系结构动态性”(architecturaldynamism),这种动态性允许体系结构用以定义所有体系结构元素的基础结构发生改变,例如构件和连接器类型。THU
SAGroup8目录THU
SAGroup为何要有柔性?1动态软件体系结构:行为视角2动态软件体系结构:反射视角3动态软件体系结构:协调视角4柔性的概念和实例59行为视角软件体系结构的描述可以被拆分为两部分:与结构相关的描述与行为相关的描述。在动态软件体系结构中的重点是那些在运行时对结构进行改变的行为。改变系统拓扑结构添加、删除构件实例……THU
SAGroup10抽象中的行为在进程代数中,以一种序列化的方式执行的一系列行为被抽象为进程(Process)。行为的交互被简化为进程的合成。CCSCSPπ-CalculusTHU
SAGroup11Process1DescriptionProcess2DescriptionOperationofProcessesInteractionInteractedorconcurrentprocessValidorNot
?π-演算π-演算:为移动系统提出的演算系统一阶π-演算(first-orderπ-calculus):解决连接移动性问题高阶π-演算(high-orderπ-calculus):解决进程本身的移动问题THU
SAGroup12π-演算文法0
表示停止活动。它表示不做任何事的进程,通常用来作为表达式的末尾。π
是代表活动的前缀。当一个前缀完成它的动作之后,后续的进程就会继续执行。+(求和操作符)的意思是进行选择。如果两个进程P和P’用这个符号进行连接,他们之中只有一个可以执行,另一个被忽略掉。|(并行合成操作符)是指并行的执行。P|P’的意思是这两个进程并行执行,他们可以利用共享的名称进行通讯。ν(限制操作符)用以限制名称的作用域。νzP
的意思是名称z仅仅在进程P中可以使用。进程P也不可以用z与外界环境进行通讯。!(重复操作符)是一种对重复的简化写法。它等价于一个进程总可以生成下一个同样的进程,即一个进程反复的执行下去。THU
SAGroup13π-演算文法(输出前缀)意为“通过名称x发送名称y”。x(z)(输入前缀)意为“通过名称x接受名称z”。τ(不可见前缀)表示对后续进程的不可见动作。例如,τ.P
会演化为P,在此期间不会与外界环境进行交互。[boolean]π(条件前缀)当boolean表达式为真时执行前缀π。这种前缀的表达式通常分为两类,一类是匹配条件,形式是[x=y];另一类是非匹配条件,形式是[x≠y]。THU
SAGroup14π-演算实例一个固定服务器S,一个起中介作用的移动电话A和另一部通过A连接到S的电话B。表示式:意为:一方面,A通过b将连接a发送到外界;另一方面B通过b收到了连接a,然后通过此连接或者发送d,或者接收e。(我们假设d是B用来访问某种数据的连接,而e是从S中访问数据的连接,d和e在图中均未画出)。经过演算规得到:THU
SAGroup15π-演算类型将一个类型赋给一个敏成可以被写作a:T这里a是一个名称,被称为“委派名称”(nameofassignment)T是一个类型,称为“委派类型”(typeofassignment)π-演算中的类型值类型连接类型行为类型(进程的类型)THU
SAGroup16高阶π-演算高阶π-演算:在进程之间传递进程输出前缀形式:经由名称a发送(具有类型T的)进程P,然后执行进程Q输入前缀形式:经由名称a接受(具有类型T的)进程X,然后执行进程Q类型T在无关紧要的时候可以省略THU
SAGroup17高阶π-演算实例S发出了一个能够通过b传递e的进程。A经由a接收了这个进程,然后这个进程被激活。这样A就并行的执行两方面动作,一是A自己b(u),另一方面则是激活的进程。这样的行为表示为:经过演算得到等价的最终结果:THU
SAGroup18进程Xπ-ADLπ-ADL元素构件、连接器、行为构件和连接器都由一组外部端口和内部行为来表示π-ADL中的端口端口被描述成一组附加了通讯协议的连接。而连接则是交互中的最小单位,数据可以经由连接进行传递。连接的种类:输入、输出、输入-输出THU
SAGroup19π-ADL中的连接和π-演算中的连接可以被看作是对等物。π-ADL眼中的软件体系结构THU
SAGroup20π-ADL实例THU
SAGroup21component
DataConverter
isabstraction(){
typeIDis
Natural.typeNameis
String.typeInfois
Any.
type
StudentInfoEntry
is
tuple[ID,Name,Info].
type
SimpleStudentInfoEntry
is
tuple[ID,Name].
portincomingis{connectioninis
in(StudentInfoEntry)}.
portoutgoingis{connectionoutis
out(SimpleStudentInfoEntry)}.
behavior
is{
via
incoming::in
receive
entry:StudentInfoEntry.
projectentryasid,name,info.
via
outgoing::out
send
tuple(id,name) }}assuming{
protocol
is{( via
incoming::in
receive
any.true*.
via
outgoing::out
sendany)*}}π-ADL实例构件解释定义一个构件DataConverter,它将包含学生信息转换为分离的数据。它首先定义了5种值类型,其中三种是基本值类型的别名,两种使用tuple来构造。然后两个端口被定义了。端口incoming负责通过输入连接in接受学生数据。端口outcoming则被用来利用连接out输出分离好的数据。描述行为的那段(behavior)描述了DataConverter是怎样工作的。它接收StudentInfo类型的值对象,将它映射到三个域(id,name
和info)。然后最终发送出只包含学生ID和名称的简单对象。之后的协议(protocol)要求在接收下一个StudentInfo对象之前,DataConverter必须先把当前简化的学生信息对象发出去。THU
SAGroup22compose关键字compose是π-ADL动态性的关键compose等同于π-演算中的“|”操作符compose相当于可以动态改变软件系统的配置与compose相对,π-ADL提供了decompose关键字THU
SAGroup23π-ADL动态性实例释义:如果x的值比1大,则一个Client构件,一个Server构件,以及一个Channel连接器被创建出来,之后它们的配置也被创建了。语义上它们三者同时按照各自的定义开始运行。此语句可被执行多次,表示很多份Client-Server-Channel实例组被产生并运行。产生的实例可以被decompose。THU
SAGroup24behavioris{ …
ifx>1
then
compose{cisClient()andsisServer()andach
isChannel()}
where{
c::outClient
unifies
ch::inChannel
and
s::inServer
unifies
ch::outChannel }
else
done …}unifies关键字指出哪些连接是等价的目录THU
SAGroup为何要有柔性?1动态软件体系结构:行为视角2动态软件体系结构:反射视角3动态软件体系结构:协调视角4柔性的概念和实例525反射视角什么是反射?反射是指在自身上进行推导和实施某种行为的能力首先能“看得到”自己其次能“修改”自己THU
SAGroup26代码级反射的例子释义:根据输入参数中的字符串找到一个类,并将这个类中所有的方法名输出到控制台上。THU
SAGroup27import
java.lang.reflect.*;public
class
MethodsDumper{
publicstaticvoid
main(String
args[]){
try{ Classc=Class.forName(args[0]); Methodm[]=c.getDeclaredMethods();
for(inti=0;i<m.length;i++)
System.out.println(m[i].toString()); }catch(Throwablee){
System.err.println(e); } }}反射的形式化模型一个基于层的模型除最顶层,每层都是其上一层的基层(base-level)除最低层,每层都是其下一层的元层(meta-level)反射模型的两种基本操作是从基层到元层的提升过程,叫做“精化”(reification);从元层到基层的下降过过程,称为“反射”(reflection)THU
SAGroup28…level-4level-3level-2level-1pairofbase-andmeta-levelpairofbase-andmeta-levelpairofbase-andmeta-levelpairofbase-andmeta-level软件体系结构的反射模型MARMOLMARMOL(Meta
ARchitecture
MOdeL)元层的层数是不受限制的。使用MARMOL描述的体系结构至少由一个元层和一个基层组成。MARMOL允许多层系统的出现,其中相邻的两层就被认为是元层-基层对。任何元层-基层对的关系不受限制。对某个元层-基层对进行理解和转换的工作与MARMOL无关。这些内容应当定义在每一个子层使用的模型上。在极端情况下,处于元层-基层对的两层甚至可以毫无关系。每个在基层的构建必须有一个相关联的“元空间”(meta-space)。元空间负责维护所有和这个构件有关的元信息。元空间是由元构件(meta-components),元层构件(meta-levelcomponent)和它们的组合关系构成。元构件是构件进行反射的直接对照物。一个基构件被称为它对应元构件的参照(referent)或者化身(avatar)。元层构件是负责在元层操作元信息的构件。在元空间和它对应的基构件之间有带方向的联系。从基层到元层的称为具体化(reification),从元层到基层的称为反射(reflection)。体系结构构件类型可以被看作元构件。动态性的表达能从这里获益。THU
SAGroup29体系结构反射过程中的动态性表现THU
SAGroup30基于MARMOL的描述语言PilarTHU
SAGroup31构件定义语法\componentname[<parameters>]( {[\interface]
(interfacedefinitions)}
[\config( {instancesdeclarations}|
[\bind( {bindingdeclarations})]
)] {\reifyexplicitreification}
[\constraint( {dynamicconstraint})])
Pilar的反射模型THU
SAGroup32Pilar描述实例释义:构件Multiplier:它有两个端口:A和B。行为是先通过端口A读取一个值,然后再通过端口B将读入值的两倍发送出。问号表示输入,叹号表示输出。关键字\rep表示这个行为不断的重复。构件Logger:它在条件满足时会记录日志。它利用守护关键字\when定义了一个监控器。同时利用关键字avatar实现了与其对应的化身构件的访问。当Logger的化身侦测到端口A上有输入时,它就利用端口C记录日志。为了实现记录日志的行为,Logger化身必须保证定义端口A。THU
SAGroup33\componentMultiplier(
(portA|portB)
\constraint(\rep(A?(x);B!(2x))))\componentLogger(
(portC) \constraint(\rep(\whenavatar.A?(z)
(C!(z)))))\component
LoggedMultiplier(
\config(mul:Multiplier)
\reify(mul:Logger))Pilar描述实例(接上页……)构件LoggedMultiplier。在LoggeMultiplier中声明了构件Multiplier的实例mul。另外,mul与元构件Logger保持具体化联系。因此,在Logger中定义的行为会在此实例中反映出来。mul的整体效果就是当从端口A中收到一个值后,就通过端口B发送出接收值得两倍,同时将这个接收值得副本通过端口C发出,用以记录日志。THU
SAGroup34基于MARMOL的描述语言Pilar操作描述\new(c:T)创建类型T的新实体c\delc删除实体c\aliaspasq端口p的作用域更改,as表示改名\hidep隐藏端口pavatar引用当前元构件的化身self引用元构件本身\reifyR(c:m)在化身c和元实体m之间创建具体化联系\findrR(c:m)寻找c和m之间的具体化联系\nullrR判断R是否是具体化联系THU
SAGroup35动态体系结构操作Pilar的动态性描述实例THU
SAGroup36\componentDB((portdata))\componentServer((port
data_source))\component
DataChannel( (portinput|portoutput)
\constraint(\reify
R(avatar:CommonLink(avatar.input|avatar.output);output?(W);\delR;\reifyS(avatar:CachedLink(avatar.input|avatar.output)))\component
CommonLink( (portinput|portoutput)
\constraint(\rep(avatar.input?(X);avatar.output!(X)))\component
CachedLink( (portinput|portoutput)
\config(ca:Cache|comm1:CommonLink(c.input|comm1.output)|comm2:CommonLink(comm2.input|c.output)))\componentCache( (portinput|portoutput)
\constraint{ignorehere})\componentSystem(
\config(d:DB|s:Server|c:DataChannel(d.data|s.data_source)))注意!!Pilar的动态性描述实例释义:以上描述定义了三个连接在一起的构件:DB的实例d,Server的实例s,和DataChannel的实例c。DataChannel的约束规定c与元构件CommonLink建立具体化联系。而CommonLink的行为(由CommonLink的约束规定)是简单的把从input端口中接收到的数据通过output端口转发。当c侦测到信号“W”到来时(W的含义是s发现访问过载时发出的警告),c的具体化构件CommonLink被删除了,同时c动态的与CachedLink建立具体化联系。在此期间Cache的实例ca被动态的创建,并和两个CommonLink的实例comm1和comm2连接上。从这个过程中可以看到这并不是简单的添加、删除或构件替换,而是体系结构的综合改变。最终的结果是系统中引入了缓存,提高了服务器的性能。THU
SAGroup37Pilar的动态性描述实例注:为了避免过分的混乱,我们将这些具体化类型在图中用斜体表示,而并不把它们画在元层中。此图把实际上处于多个元层上的元构件画到一个元层中。图中的实线表示常规的绑定关系,虚线则表示具体化联系。THU
SAGroup38目录THU
SAGroup为何要有柔性?1动态软件体系结构:行为视角2动态软件体系结构:反射视角3动态软件体系结构:协调视角4柔性的概念和实例539协调视角何谓协调模型(CoordinationModel)“通过将活动的部分粘连在一起构建程序的过程”——(Gelemter,D.andN.Carriero."Coordinationlanguagesandtheirsignificance."CommunicationsoftheACM35(2):96,1992)协调模型特征:将系统看作两种不同活动的组合进行实际计算的部分:若干进程利用资源进行计算协调部分:负责管理计算进程的通讯和协作THU
SAGroup40协调活动活动活动逻辑上实现上协调计算计算协调协调协调计算协调计算协调计算经典协调模型Linda以TupleSpace为协调中枢数据被抽象为Tuplepassivetuple,activetupleactualelement,formalelement对TupleSpace的原子操作out(t)in(t)rd(t)eval(p)优势异步通讯THU
SAGroup41可能会被锁住(blocked)Linda模型THU
SAGroup42使用Linda解决哲学家问题THU
SAGroup43#defineNUM5void
philosopher(inti){
while(true) { think();
in(“ticket”);
in(“fork”,i);
in(“fork”,(i+1)%NUM); eat();
out(“fork”,i);
out(“fork”,(i+1)%NUM);
out(“ticket”); }}intmain(){
inti;
for(i=0;i<NUM;i++) {
out(“fork”,i);
eval(philosopher(i));
if(i<NUM–1)
out(“ticket”); } return0;}本代码采用C-Linda实现由于只发放了NUM-1个ticket,所以永远不会死锁,并且可以达到最大的并发度。LIMELIME:LindaInaMobileEnvironment特别考虑位置问题每个MobileAgent(MA)拥有一个自己的TupleSpace(InterfaceTupleSpace,ITS)多个ITS动态组成SharedTupleSpace设置多个级别的TupleSpace,以满足逻辑移动性和物理移动性的需要。每个tuple具有两个位置参数,分别是currentlocation和destinationlocation。两个参数不同的tuple被称为misplacedtuple.定义了Reaction机制两种模式:ONCE和ONCEPERTUPLE两种语义:StrongReaction和WeakReactionTHU
SAGroup44LIME的多级TupleSpaceTHU
SAGroup45基于位置信息的out操作THU
SAGroup46当ω初始时无法连接的情况下out[λ](t)的执行过程目录THU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《喜迎中秋模板》课件
- 三年级下册科学教科版课件第1课时 仰望天空
- 增值税及其会计处理教学课件
- 制作课件心得范文
- 土地招商协议书(2篇)
- 《市场机制原理》课件
- 《秘书长办》课件
- 2021年安徽省宿州市公开招聘警务辅助人员(辅警)笔试必刷测试卷(1)含答案
- 2022年山西省临汾市公开招聘警务辅助人员(辅警)笔试摸底测试(2)卷含答案
- 2024年安徽省淮南市公开招聘警务辅助人员(辅警)笔试冲刺自测题二卷含答案
- 110~750KV架空输电线路施工及验收规范
- 万千教育学前透视幼儿的户外学习
- 兰州大学2009-2010学年度第一学期《分析化学》期末考试试卷(B)(含答案)
- 植物新品种权申请代理机构
- 科技成果转化与应用推广
- 肌肉能量技术(原创)
- 森林法培训课件
- GB/T 8564-2023水轮发电机组安装技术规范
- 仪器分析题库(含答案)
- 安全总监安全生产责任考核表
- 上海市徐汇区上海小学小学语文五年级上册期末试卷(含答案)
评论
0/150
提交评论