软件体系结构课后习题第三章作业.docx
《软件体系结构课后习题第三章作业.docx》由会员分享,可在线阅读,更多相关《软件体系结构课后习题第三章作业.docx(12页珍藏版)》请在冰豆网上搜索。
软件体系结构课后习题第三章作业
题1.层次系统结构和基于消息的层次系统结构有什么区别?
答:
层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。
在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻的层可见。
这样的系统中构件在一些层实现了虚拟机(在另一些层次系统中层是部分不透明的)。
连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。
这种风格支持基于可增加抽象层的设计。
允许将一个复杂问题分解成一个增量步骤序列的实现。
由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。
而在基于消息的层次系统结构中构件不直接调用一个过程,而是触发或广播一个或多个事件。
系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。
这种风格的构件是一些模块,模块既可以是一些过程,又可以是一些事件的集合。
过程可以用通用的方式调用,也可以在系统事件中注册一些过程,当发生这些事件时,过程被调用。
这种风格的主要特点是事件的触发者并不知道哪些构件会被这些事件影响。
这样不能假定构件的处理顺序,甚至不知道哪些过程会被调用,因此,许多隐式调用的系统也包含显式调用作为构件交互的补充形式。
题2.分析比较B/S、二层C/S和三层C/S,指出各自的优点和缺点。
二层C/S结构的优点:
◆C/S体系结构具有强大的数据操作和事务处理能力,模型思想简单,易于人们理解和接受。
◆系统的客户应用程序和服务器构件分别运行在不同的计算机上,系统中每台服务器都可以适合各构件的要求,这对于硬件和软件的变化显示出极大的适应性和灵活性,而且易于对系统进行扩充和缩小。
◆在C/S体系结构中,系统中的功能构件充分隔离,客户应用程序的开发集中于数据的显示和分析,而数据库服务器的开发则集中于数据的管理,不必在每一个新的应用程序中都要对一个DBMS进行编码。
将大的应用处理任务分布到许多通过网络连接的低成本计算机上,以节约大量费用
二层C/S结构的缺点:
◆开发成本较高
◆客户端程序设计复杂
◆信息内容和形式单一
◆用户界面风格不一,使用繁杂,不利于推广使用
◆软件移植困难
◆软件维护和升级困难
◆新技术不能轻易应用
三层C/S结构的优点:
◆允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性,能提高系统和软件的可维护性和可扩展性。
◆允许更灵活有效地选用相应的平台和硬件系统,使之在处理负荷能力上与处理特性上分别适应于结构清晰的三层;并且这些平台和各个组成部分可以具有良好的可升级性和开放性。
◆应用的各层可以并行开发,可以选择各自最适合的开发语言。
◆利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段去非法地访问数据层,为严格的安全管理奠定了坚实的基础。
三层C/S结构的缺点:
◆三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,其作为整体来说也达不到所要求的性能。
◆设计时必须慎重考虑三层间的通信方法、通信频度及数据量。
这和提高各层的独立性一样是三层C/S结构的关键问题。
B/S体系结构的优点:
◆基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决。
用户在使用系统时,仅仅需要一个浏览器就可运行全部的模块,真正达到了“零客户端”的功能,很容易在运行时自动升级。
◆B/S体系结构还提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开放性基础。
B/S体系结构的缺点:
◆B/S体系结构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
◆B/S体系结构的系统扩展能力差,安全性难以控制。
◆采用B/S体系结构的应用系统,在数据查询等响应速度上,要远远地低于C/S体系结构。
◆B/S体系结构的数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用。
题3.组织或参与一个采用B/S和C/S混合体系结构的软件项目的开发,总结开发经验。
首先,开发者根据一定的原则,将系统的所有子功能分类,决定哪些子功能适合采用C/S,哪些适合采用B/S。
适合采用C/S的子功能应具备以下特点:
1安全性要求高;2要求具有较强的交互性;3使用范围小,地点固定;4要求处理大量数据。
例如,仓库管理系统中的入库单、领料单的输入功能,财务系统中的凭证输入功能等等。
而适合采用B/S的子功能应具备以下特点:
1使用范围广,地点灵活;2功能变动频繁;3安全性、交互性要求不同。
例如:
企业内部信息发布功能,意见箱输入功能,公司财务分析表的查询功能,总裁决策支持系统中的查询功能等等。
相对于单独采用C/S或B/S,这种方案的优点在于:
1保证敏感数据的安全性,特别是对数据库的修改和新增记录加强了控制;2经济有效地利用企业内部计算机的资源,简化了一部分可以简化的客户端;3既保证了复杂功能的交互性,又保证了一般功能的易用与统一;4系统维护简便,布局合理;5网络效率最高。
如果系统开发者在系统设计阶段决定采用这种C/S与B/S相结合的模式,那么在系统开发生命周期的如下各个阶段相对这种新模式都应有所响应。
在系统设计阶段主要考虑的是MIS系统平台选择问题。
在详细设计阶段,系统开发者需要根据企业自身的业务特点,以及一定的选择原则,来决定各个子功能采用哪一种模式并在系统说明书上分别注明。
在编码设计阶段,系统开发者需要针对采用不同模式的子功能,选用不同的编码方式(例如:
C/S可以采用VB编程环境,而B/S采用ASP方法),然后编译生成不同的客户应用及Web服务程序。
在安装调试阶段,其特点主要体现在系统的物理结构上,即特定的客户应用程序将被安装在特定的使用者的客户端上,Web服务程序需要被安装在Web服务器上,而每个客户端上都将被安装上浏览器,同时,客户应用的使用者必须接受一定的培训。
在软件维护阶段,针对不同模式的子功能应采取不同维护方式。
题4.在软件开发中,采用异构结构有什么好处,其负面影响有哪些?
答:
所有的体系结构不仅有很紧密的联系,而且在大多数情况下是被一起使用的。
对于一个实际的系统,甚至不能判断它是A风格、B风格还是C风格,因为没有足够的理由把它归为任何一种独立的体系结构风格。
这种系统类型被称为异构结构。
上图展示了一个虚拟系统,它整合了许多体系结构风格。
可以把整个系统当成一个分层系统。
这样它可以被分成两层:
第1层是原始数据生成层,第2层是解释层。
在第1层,主要的组成部分是管道-过滤器子系统。
(1)第1个过滤器中的数据能够被送到第2个过滤器中。
(2)当第2个过滤器收到数据时,将会产生相应的信息,然后将此信息传送到事件队列构件和服务提供对象构件中。
(3)当事件队列不为空时,它将会激发相应的对象来处理这个事件,并完成任务。
这是一个典型的事件驱动体系结构风格的例子。
(4)当服务提供对象构件接收到由第2个过滤器传来的信息时,它将把这些信息记录在信息库里。
它就像是在数据共享风格中的黑板。
在这个信息库中,所有的信息、知识和规则被记录下来。
当“事件驱动”部分想要完成某些任务时,它可能需要从这个信息库里获取一些有用的信息,然后根据其中的规则完成正确的行动。
这部分可以被看成数据共享与反馈控制环风格的结合。
因为所有的数据在构成的信息库里被共享,其他部分能够从信息库中存储和获取数据。
用户可以通过向信息库中记录新的数据来更新它。
这也具有反馈控制环风格的特点。
在第2层解释器中,来自第1层中的数据被解释。
当解释数据时,构件必须知道上下文、解释规则和解释器的状态。
因此这部分具有状态构件、规则构件和数据构件。
当解释时产生的所有错误和程序缺陷被记录在数据库里。
最后,输出解释完毕的数据。
从这个例子中,可以看出一个完善的系统可能由各种各样的体系结构风格组成,具体的组成方法要依据系统需求和各种体系结构风格的优势来确定。
所设计的最好的系统不是特意包含“所谓的”结构体系风格,而是能够恰当运用体系结构风格的系统。
设计出的系统要满足需要的质量属性。
负面影响就是结构可能更加复杂,不易于设计与维护。
5.通过查资料然后分析,给出下列体系结构Windows7,Android,P2P,webservice,
要求:
1.模块划分和功能描述。
2.模块间的关系。
3.典型功能模块的调用关系。
4.各自优缺点。
答:
Android操作系统的架构图如下:
Android系统架构由5部分组成,分别是:
LinuxKernel、AndroidRuntime、Libraries、ApplicationFramework、Applications。
第二部分将详细介绍这5个部分。
架构详解
现在我们拿起手术刀来剖析各个部分。
其实这部分SDK文档已经帮我们做得很好了,我们要做的就是拿来主义,然后再加上自己理解。
下面自底向上分析各层。
1、LinuxKernel
Android基于Linux2.6提供核心系统服务,例如:
安全、内存管理、进程管理、网络堆栈、驱动模型。
LinuxKernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。
2、AndroidRuntime
Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。
每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。
Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。
Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和底层内存管理。
3、Libraries
Android包含一个C/C++库的集合,供Android系统的各个组件使用。
这些功能通过Android的应用程序框架(applicationframework)暴露给开发者。
下面列出一些核心库:
系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备
媒体库——基于PacketVideo的OpenCORE。
这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG
界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层
LibWebCore——新式的Web浏览器引擎,驱动Android浏览器和内嵌的web视图
SGL——基本的2D图形引擎
3D库——基于OpenGLES1.0APIs的实现。
库使用硬件3D加速或包含高度优化的3D软件光栅
FreeType——位图和矢量字体渲染
SQLite——所有应用程序都可以使用的强大而轻量级的关系数据库引擎
4、ApplicationFramework
通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。
开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。
开发者可以完全使用核心应用程序所使用的框架APIs。
应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。
这一机制允许用户替换组件。
所有的应用程序其实是一组服务和系统,包括:
视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。
包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器
内容提供者(ContentProviders)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据
资源管理器(ResourceManager)——提供访问非代码资源,如本地化字符串、图形和布局文件
通知管理器(NotificationManager)——使所有的应用程序能够在状态栏显示自定义警告
活动管理器(ActivityManager)——管理应用程序生命周期,提供通用的导航回退功能
5、Applications
Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。
所有应用程序都是用Java编程语言写的。
更加丰富的应用程序有待我们去开发!
二、P2P系统的架构图如下:
P2P网络大概可划分为纯分散式P2P网络和混合式P2P网络两大类。
纯分散式P2P网络,其拓扑如图2所示。
网络中没有服务器,链状的节点之间构成一个分散式网络。
通过基于对等网协议的客户端软件搜索网络中存在的对等节点.节点之间不必通过服务器,可直接建立连接。
这种P2P网络模型优点在于允许用户设定自己的规则和建立自己的网络环境;为与Internet合作,提供近似的即插即用特性;不仅能够在Internet下有效地工作,而且对于LAN也非常有用。
但是,由于没有中心管理者,网络节点难以发现,不易管理且安全性较差。
图2纯分散式P2P网络拓扑
(2)混合式P2P网络
混合式P2P网络其拓扑如图3所示。
各节点之间可以直接建立连接,但网络的构建需要服务器,通过集中认证,建立索引机制。
然而这里的服务器仅用于辅助对等节点之间建立连接,一旦连接成功,服务器不再起作用,对等节点之间直接进行通信。
这不同于C/S模式中的服务器,也可以认为是弱化了服务器的作用。
这种P2P网络模型和纯分散式P2P网络相比,易于发现网络节点、易于管理且安全性较好,但也有类似C/S模式的缺陷,如容错性差等。
目前P2P技术的应用大多为这种模式。
P2P网络系统的优缺点:
P2P网络系统的开发面临着许多问题亟待解决,比如:
在P2P共享网络中普遍存在侵犯版权问题;在一个无中心的环境中如何选择可靠的资源,即如何建立节点之间的信誉问题;P2P带来的新型网络病毒传播模式防阻断问题;基于P2P的隐蔽通讯与隐私保护问题;P2P网络服务健壮性与抗毁能力等。
三、Windows7的体系结构如下:
1.硬件抽象层(HAL)
HAL=HardwareAbstractionLayer
HAL是一个核心态模块(HAL.DLL),它为运行Windows2000/XP的硬件平台提供低级接口。
2.设备驱动程序
可加载的核心态模块
I/O系统和相关硬件之间的接口
WDM=WindowsDriverModel
3.内核
NTOSKRNL.EXE的下层(MicrosoftBootUpKernel)
内核是对处理器体系结构的抽象,将执行体与处理器体系结构的差异相隔离,保证系统的可移植性。
大多数代码用C编写,部分依赖于硬件体系结构的代码用汇编编写.
内核实现了一组简单的对象,称为内核对象,以帮助内核控制中心处理并支持执行体对象的创建。
控制对象——包括异步过程调用(APC,asynchronousprocedurecall)对象、延迟过程调用(DPC,deferredprocedurecall)对象和几个由I/O系统使用的对象,例如中断对象。
调度程序对象——负责同步操作并影响线程调度。
调度程序对象包括内核线程、互斥体(Mutex)、事件(Event)、内核事件对、信号量(Semaphore)、定时器和可等待定时器
4.执行体
提供的函数调用
从用户态导出并且可以调用的函数。
这些函数的接口在NTDLL.DLL中。
通过Win32API或一些其他的环境子系统可以对它们进行访问。
从用户态导出并且可以调用的函数,但当前通过任何文档化的子系统函数都不能使用。
在Windows2000DDK中已经导出并且文档化的核心态调用的函数。
在核心态组件中调用但没有文档化的函数。
例如在执行体内部使用的内部支持例程。
组件内部的函数。
5.环境子系统
将基本的执行体系统服务的某些子集以特定的形态展示给应用程序
三种环境子系统:
POSIX、OS/2和Win32(OS/2只能用于x86系统)
Windows体系结构的优缺点:
优点
◆结构紧密,接口简单直接,系统效率高
缺点
◆模块间转接随便
◆数据基本上作为全程量处理
常常关中断,系统的并发性难以提高
四、Webservers的体系结构如下:
其中,绿色部分是先前已经定义好的并且广泛使用的传输层和网络层的标准:
IP、HTTP、SMTP等。
而蓝色部分是目前开发的Web服务的相关标准协议,包括服务调用协议SOAP、服务描述协议WSDL和服务发现/集成协议UDDI,以及服务工作流描述语言WSFL。
而橙色部分描述的是更高层的待开发的关于路由、可靠性以及事务等方面的协议。
黄色部分是各个协议层的公用机制,这些机制一般由外部的正交机制来完成。
Webservers的体系结构的优缺点:
优点:
◆使得开发人员可以只关注整个结构中的其中某一层,当然这里是在铺设界定好了各层接口的前提下;
◆可以很容易的用新的实现来替换原有层次的实现,也就是各层间的服务透明性,层内部可以进行灵活的替换;
◆可以降低层与层之间的依赖;
◆有利于标准化,这里明确各层的职责范围,成为开发人员共同的背景语言,也利于各种技术接口的界定;
◆利于各层逻辑的复用,Web的开发将会针对之前的案例灵活的复用已有的单元。
缺点:
◆降低了系统的性能。
这是不言而喻的。
如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成,本来是数据可以直接通过DataSource穿透到表现层,现在必须通过层次包装上下传递,牺牲了暂时的灵活性,实际上还是赢的了长远的灵活性。
◆有时会导致级联的修改。
这种修改尤其体现在自上而下的方向。
如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码,这也是在设计时需要注意的,如何在早期的模型架构阶段考虑周全来避免。