




已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件体系结构,Software Architecture,教学内容,2,软件体系结构风格(2),Software Architecture Styles,提纲,虚拟机-解释器风格 虚拟机(Virtual Machine) 解释器(Interpreter) 案例分析:KWIC,4,1. 虚拟机(Virtual Machine),5,问题,你认为JAVA最吸引人的特性是什么?,Built-in Networking,Good Performance,Dynamic Binding,Security,Automatic Memory Management,Several dangerous features of C&C+ eliminated,Robust,Compiler/Interpreter Combo,Object Oriented,Platform Independence,Write Once, Run Anywhere,6,Write Once, Run Anywhere,7,JAVA如何支持平台独立性,Java虚拟机,8,什么是虚拟机(Virtual Machine)?,虚拟机是一种软件 它创建了一种虚拟的环境 将用户与底层平台隔离开来,VM,VM,VM,VM,“虚拟机”的分类,系统级的虚拟机(System virtual machine):对OS的虚拟,把一台物理上独立的机器虚拟为多个不同的虚拟机,每个虚拟机可支持运行各自的操作系统,本质:在OS与硬件之间建立隔离。 Hardware virtual machine(硬件虚拟机) 进程级的虚拟机(Process virtual machine):对单一程序的虚拟,其本质是在应用程序与OS之间建立隔离。 Application virtual machine(应用程序虚拟机),10,硬件虚拟机,想在Android下开发程序,必须买一部Android手机? 不需要,下载一个Android虚拟机(硬件虚拟机)即可 硬件虚拟机(Hardware virtual machine) 在一台服务器上虚拟地构造若干个独立的执行环境,每一个虚拟环境负责支持一个OS内核的执行,这些OS可以与该服务器本地的OS不同 从而允许在一个OS上书写的应用程序可以在一台运行其它OS的机器上执行,11,虚拟机例子:VMware,12,应用程序虚拟机,应用程序虚拟机(Application virtual machine) 将用户使用的应用程序与计算机系统隔离开来的软件 应用程序无需针对不同的OS和硬件环境而开发不同的版本,只需针对虚拟机开发即可 应用程序使用解释器(interpreter )或JIT(Just-in-Time)技术在加以运行,13,Java虚拟机(JVM),JVM:执行Java字节码的虚拟机 JVM可适应所有的硬件与OS平台,从而使得Java具有“一次书写,到处运行”的能力 JVM的标准输入:Java Class 在JVM上运行的程序必须首先被编译为标准的二进制格式的文件:.class,14,Java Class在JVM上的执行,Java class文件并不是机器代码或目标代码,而是一种具有标准中间格式的二进制文件,无法直接在任何OS平台上执行。 Java Class必须在JVM的支持下才能真正执行 Java class文件在JVM下运行,运行策略可能为:解释器或JIT编译器,15,JVM的执行机制,JVM (Java虚拟机),16,JVM的功能与作用,将Java Class代码转化为特定OS所能支持的程序运行模式,每个特定的OS需要实现自己的JVM 在执行具体的class代码之前,JVM需要针对特定的OS环境,做以下的事情: Load and store Type conversion Object creation and manipulation Operand stack management (push / pop) Control transfer (branching) Method invocation and return Throwing exceptions,17,基于JVM的Java程序开发与执行过程,18,2. 解释器(Interpreter),19,MS-DOS的命令解释器,用户的命令行请求 (e.g., dir *.jsp /a /p),操作系统内核的 执行指令?,20,解释器,解释器是一个用来执行其他程序的程序 解释器针对不同的硬件平台实现了一个虚拟机 将高抽象层次的程序翻译为低抽象层次所能理解的指令,以消除在程序语言与硬件之间存在的语义差异,源代码,解释器,宿主系统 (OS、硬件),解释执行,21,解释器,解释器通常用来在程序语言定义的计算和有效硬件操作确定的计算之间建立对应和联系 简单和小规模的解释器只完成基本的信息识别和转换 复杂的解释器需要从词法到句法、到语法的复杂识别和处理 作为一种体系结构风格,解释器已经被广泛应用在从系统软件到应用软件的各个层面 包括各类语言环境、Internet浏览器、数据分析与转换等 LISP、Prolog、JavaScript、VBScript、HTML、Matlab、数据库系统(SQL解释器)、各种通信协议等。,22,解释器的组成,被解释执行的程序,程序执行的当前状态,解释器引擎,解释器引擎 的内部状态,23,解释器风格,基本构件: 解释器引擎 存储区: 被解释的源代码 解释器引擎当前的内部控制状态的表示:在某个时刻需要执行哪些指令 程序当前执行状态的表示 连接器: 对存储区的数据访问,24,解释器 Vs. 编译器,解释器在软件中的应用由来已久,早期的程序语言环境就分为编译(Compilation)和解释(Interpretation)两大类。 编译器 解释器,25,源代码 (.c+),编译器,目标码 (.obj),可执行文件 (.exe),宿主系统 (OS、硬件),编译,链接,执行,源代码,解释器,宿主系统 (OS、硬件),解释执行,解释器 Vs. 编译器,编译,链接,执行,解释执行,分析程序结构 源代码目标码 确定内存分配与访问方案,分析程序结构 确定内存分配与访问方案 分配内存 解释并执行程序,分配内存 执行目标码(机器码),编译器,解释器,26,解释器 Vs. 编译器,解释器的执行速度要慢于编译器产生的目标代码的执行速度,但是却低于编译器“编译+链接+执行”的总时间 解释器通常省略了链接与编译的步骤,从而降低编程时间 编辑源代码-解释-调试 编辑源代码-编译-链接-运行-调试,27,解释器 Vs. 编译器,解析器执行速度之所以慢,是因为每次解释执行的时候,都需要分析程序的结构,而编译代码则直接执行而无需重复编译 解释器对内存的分配是在解释时才进行的;而编译器则是在编译时进行,因此运行时直接将程序代码装入内存并执行即可,28,解释器的三种策略,传统解释器 纯粹的解释执行 基于字节码的解释器 编译解释执行 Just-in-Time (JIT)实时编译器 编译|解释执行,29,传统解释器,解释器直接读取源代码并加以执行; ASP Excel JavaScript MATLAB ,源代码,解释器,宿主系统 (OS、硬件),解释执行,30,基于字节码的解释器,在该类解释器下,源代码首先被“编译”为高度压缩和优化的字节码,但并不是真正的机器目标代码,因而与硬件平台无关。 编译后得到的字节码然后被解释器加以解释 例如: Java、Perl、PHP、Python、 ,源代码 (.java),编译器,字节码 (.class),宿主系统 (OS、硬件),编译,解释执行,解释器,31,JVM中的解释器,Java的源程序不是直接交给解释器解释,而是先经过一个编译过程,把Java源程序翻译成一种特定的二进制字节码文件(Bytecode),再把这个字节码文件交给Java解释器来解释执行 javac程序将Java源代码编译为字节码 Java编译器所生成的可执行代码可以不基于任何具体的硬件平台,而是基于JVM。 C/C+要的源程序要在不同的平台上运行,必须重新进行编译。,32,实时编译,实时编译JIT中,字节码在运行时被编译为本机的目标代码 第一步是编译得到字节码 字节码被配置到目标系统中 当字节码被执行时,运行环境下的编译器将其翻译为本地机器码,33,实时编译,JIT模糊了解释器、字节码解释器和编译器之间的边界与区分 JIT 也用于.NET和Java平台,源代码 (.java),编译器,字节码 (.class),宿主系统 (OS、硬件),编译,解释执行,解释器,编译器,目标码 (.obj),执行,编译,34,JIT需编译哪些部分?,只有当某个函数要被执行时,才被编译,因此称为JIT 而且,JIT并不是编译全部的代码,而是只编译那些被频繁执行的代码段 被执行多次的方法 包含多次循环的方法,35,问题,针对解释器的三种策略: 传统解释器(traditionally interpreted) 基于字节码的解释器 (compiled to bytecode which is then interpreted) Just-in-Time (JIT)编译器 对比各自的工作原理,并对比分析各自的优缺点。,36,2. 案例分析 (Key Word in Context, KWIC),37,KWIC(Key Word in Context),KWIC索引是二次文献的辅助索引 这种索引的出现是现代科学技术的发展和科技文献急剧增长的产物 KWIC索引是最早出现的用电子计算机编制的文献索引 1972年,David L. Parnas在论文“On the Criteria To Be Used in Decomposing Systems into Modules”将KWIC索引系统作为一个案例用于模块化设计的研究 KWIC被全世界各个大学的软件设计课程奉为课堂讲义或者作业的经典案例,38,KWIC:功能需求,功能需求: 接受一些行 每行有若干词 每个词由若干字符组成 每行都可以循环移位:重复地把第一个词删除,然后接到行末 KWIC把所有行的各种移位情况按照字母表顺序输出,39,KWIC:举例,40,A third way for styles to be combined is to elaborate one level of,A third way for styles to third way for styles to A way for styles to A third for styles to A third way styles to A third way for to A third way for styles be combined is to combined is to be is to be combined to be combined is elaborate one level of one level of elaborate level of elaborate one of elaborate one level,A third way for styles to be combined is to combined is to be elaborate one level of for styles to A third way is to be combined level of elaborate one of elaborate one level one level of elaborate styles to A third way for third way for styles to A to A third way for styles to be combined is way for styles to A third,Input(输入),Circular shifts(循环移位),Output(输出),KWIC:非功能需求,可修改性(Modifiability) 算法的变化(Change in Algorithm) 读入一行,便进行移位操作(incremental) 读入所有行,然后再进行移位操作(batch ) 按需进行移位操作 数据表示方式的变化(Change in Data Representation) 行的存储方法可以有多种 循环移位可以显示也可以隐式(如索引和偏移) 系统功能的可扩展性(Enhancement to system function) 删除以无意义词开头的行(如以a, an, and开头的行) 行输入从数据库或用户界面输入 在原始位移行上进行增、删、改操作,41,KWIC:非功能需求,性能(Performance) 时空复杂性(Both space and time) 系统构件的可复用性(Reusability) 构件在多大程度上作为可重用的实体,42,解决方案1:管道和过滤器,使用管道-过滤器风格 四个过滤器:输入、移位、排序、输出 每个过滤器处理数据,然后将结果送至下一个过滤器 控制机制是分布式的:只要有数据传入,过滤器即开始工作 过滤器之间的数据共享被严格限制在管道传输,43,解决方案1:管道和过滤器,过滤器(Filters): Input filter(“输入”过滤器:从数据源读取输入文件,解析格式,将行写入输出管道) CircularShifter filter(“循环移位”过滤器) Alphabetizer filter(“排序”过滤器) Output filter(“输出”过滤器) 管道(Pipe): in_cs pipe cs_al pipe al_ou pile,44,管道,Class Pipe,45,管道,46,import java.io.PipedReader; import java.io.PipedWriter; import java.io.IOException; public class Pipe private PipedReader reader_; private PipedWriter writer_; public Pipe() throws IOException writer_ = new PipedWriter(); reader_ = new PipedReader(); / let this piped writer to be connected to the piped reader writer_.connect(reader_); ,管道,47,/ Writes char to the piped output stream public void write(int c) throws IOException writer_.write(c); / Reads the next character of data from this piped stream public int read() throws IOException return reader_.read(); public void closeWriter() throws IOException writer_.flush(); writer_.close(); public void closeReader() throws IOException reader_.close(); ,过滤器,Abstract Class Filter,48,过滤器,49,public abstract class Filter implements Runnable protected Pipe input_; protected Pipe output_; private boolean is_started_ = false; public Filter(Pipe input, Pipe output) input_ = input; output_ = output; public void start() if (!is_started_) is_started_ = true; Thread thread = new Thread(this); thread.start(); public void stop() is_started_ = false; ,过滤器,50,public void run() transform(); /* * This method transforms the data from the input pipe and writes the * transformed data into output pipe. */ abstract protected void transform(); ,过滤器,Concrete Class,51,KWIC,52,. in = new FileInputStream(file); Pipe in_cs = new Pipe(); / create three objects of Pipe Pipe cs_al = new Pipe(); / and one object of type Pipe al_ou = new Pipe(); / FileInputStream Input input = new Input(in, in_cs); CircularShifter shifter = new CircularShifter(in_cs, cs_al); Alphabetizer alpha = new Alphabetizer(cs_al, al_ou); Output output = new Output(al_ou); / output to screen input.start(); shifter.start(); alpha.start(); output.start(); .,解决方案1:管道和过滤器,优点: 过程流非常直观 支持复用 容易修改 过滤器的功能相互隔离 新功能容易加入 缺点: 无法支持交互式系统 例如:想手工删除行时 空间复杂性高 每个过滤器必须复制所有数据到它的输出端,53,对比另一种方案:子程序调用,54,private ArrayList kwicList; public KWIC (String filename) kwicList = new ArrayList(); kwicList=read(filename); shift();/操作kwicList sort();/操作kwicList display ();/操作kwicList .,解决方案2:面向对象风格,55,解决方案2:面向对象风格,采用OO的思想,数据和作用在数据上的读写操作被封装为object,主程序调用这些object,形成控制流程。 数据不再被构件直接共享,而是被封装在了Obje
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司职场内活动方案
- 公司组织健身走活动方案
- 公司自制柠檬茶活动方案
- 公司晨会团体活动方案
- 2025年统计学专业期末考试试卷及答案
- 2025年经济法相关知识考试试题及答案
- 北师大版(2024)七年级下册英语期末复习:Unit1~6各单元书面表达练习题(含答案+范文)
- 2025年中国冷冻面包产品行业市场全景分析及前景机遇研判报告
- 2024年度浙江省二级造价工程师之建设工程造价管理基础知识练习题及答案
- 2024年度浙江省二级注册建筑师之法律法规经济与施工题库综合试卷B卷附答案
- GB/T 26059-2010钛及钛合金网板
- GB/T 19673.2-2013滚动轴承套筒型直线球轴承附件第2部分:5系列外形尺寸和公差
- 《士兵突击》课件
- 《长方形和正方形》 完整版课件
- 苏教版六年级科学下册期末考试卷及答案
- 孕产期保健管理及工作规范(喀什)
- 再遇青春同学聚会画册PPT模板
- 二、施组报审表
- 无砟轨道底座板首件施工总结(最新)
- 油藏数值模拟中几种主要的数学模型
- 200立方米谷氨酸发酵罐设计
评论
0/150
提交评论