导航:首页 > 源码编译 > 编译器采用什么软件体系结构风格

编译器采用什么软件体系结构风格

发布时间:2022-01-15 04:53:57

㈠ 软件体系结构如何考虑 考虑哪些因素 采用什么结构

软件的体系结构是由某一专业(科、课)的体系决定的,实质是是考虑本专业内重要的信息流转的方式、方法或者是工作流程,这是写软件时要的分层、分级管理的决策程序;一般是采用自上而下(决策点)或是自下而上(信息点)相结合的方法。这种层级关系即是结构,信息点与决策点就是重点因素。
由此而建立的模型就是软件的轮廓!
语言方面千奇百怪,只是实现模型的工具而已。

㈡ 程序编译器的体系结构适合使用什么体系结构

计算机体系结构(ComputerArchitecture)是程序员所看到的计算机的属性,即概念性结构与功能特性。按照计算机系统的多级层次结构,不同级程序员所看到的计算机具有不同的属性。
一般来说,低级机器的属性对于高层机器程序员基本是透明的,通常所说的计算机体系结构主要指机器语言级机器的系统结构。
经典的关于“计算机体系结构(computerarchitecture)”的定义是1964年C.M.Amdahl在介绍IBM360系统时提出的,其具体描述为“计算机体系结构是程序员所看到的计算机的属性,即概念性结构与功能特性” 。

㈢ 什么是编译器

编译器

编译器是一种特殊的程序,它可以把以特定编程语言写成的程序变为机器可以运行的机器码。我们把一个程序写好,这时我们利用的环境是文本编辑器。这时我程序把程序称为源程序。在此以后程序员可以运行相应的编译器,通过指定需要编译的文件的名称就可以把相应的源文件(通过一个复杂的过程)转化为机器码了。

[编辑]编译器工作方法
首先编译器进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,我们也称为obj文件。再经过链接器的链接就可以生成最后的可执行代码了。有些时候我们需要把多个文件产生的目标文件进行链接,产生最后的代码。我们把一过程称为交叉链接。

一个现代编译器的主要工作流程如下:

* 源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)

工作原理

编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器言)。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。

编译器种类

编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如: 自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。

预处理器(preprocessor)

作用是通过代入预定义等程序段将源程序补充完整。

编译器前端(frontend)

前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a, =, b , +, c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。

编译器后端(backend)

编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。

一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内(intraproceral)还是函数之间(interproceral)进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。

编译器分析(compiler analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizing compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(high level IR)接近输入的源程序的格式,与输入语言相关(language dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle level IR)与输入语言无关,低层的中间代码(Low level IR)与机器语言类似。 不同的分析,优化发生在最适合的那一层中间代码上。

常见的编译分析有函数调用树(call tree),控制流程图(Control flow graph),以及在此基础上的变量定义-使用,使用-定义链(define-use/use-define or u-d/d-u chain),变量别名分析(alias analysis),指针分析(pointer analysis),数据依赖分析(data dependence analysis)等等。

上述的程序分析结果是编译器优化(compiler optimization)和程序变形(compiler transformation)的前提条件。常见的优化和变新有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threaded code)。

机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)的策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令(instruction selection),如何合并几句代码成一句等等。

㈣ 编译器采用什么软件体系结构风格

软件架构:整个软件系统的各个模块之间的结构设计,是软件工程范畴的概念,就象设计一栋房子由几个什么样的板块组成一样。
软件体系结构:是软件编程风格范畴的一个通俗概念,比如说用C++、PoworBuild、Delphi等来进行软件设计是面向对象的编程语言体系结构,而Basic、C、Foxbase的软件体系结构特点是面向任务流程的(不是面向对象的编程语言)。

java虚拟机采用什么软件体系结构

JAVA虚拟机的生命周期

一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。

Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序。而这个main()方法必须是共有的(public)、静态的(static)、返回值为void,并且接受一个字符串数组作为参数。任何拥有这样一个main()方法的类都可以作为Java程序运行的起点。

Java语言中的所有基本类型同样也都是Java虚拟机中的基本类型。但是boolean有点特别,虽然Java虚拟机也把boolean看做基本类型,但是指令集对boolean只有很有限的支持,当编译器把Java源代码编译为字节码时,它会用int或者byte来表示boolean。在Java虚拟机中,false是由整数零来表示的,所有非零整数都表示true,涉及boolean值的操作则会使用int。另外,boolean数组是当做byte数组来访问的,但是在“堆”区,也可以被表示为位域。

Java虚拟机还有一个只在内部使用的基本类型:returnAddress,Java程序员不能使用这个类型,这个基本类型被用来实现Java程序中的finally子句。该类型是jsr, ret以及jsr_w指令需要使用到的,值是JVM指令的操作码的指针。returnAddress类型不是简单意义上的数值,不属于任何一种基本类型,并且值是不能被运行中的程序所修改的。

Java虚拟机的引用类型被统称为“引用(reference)”,有三种引用类型:类类型、接口类型、以及数组类型,值都是对动态创建对象的引用。类类型的值是对类实例的引用;数组类型的值是对数组对象的引用,在Java虚拟机中,数组是个真正的对象;而接口类型的值,则是对实现了该接口的某个类实例的引用。还有一种特殊的引用值是null,表示该引用变量没有引用任何对象。

㈥ 编译器是什么。

1、 visual c++6.0 (win8系统下不好用,C/C++)-Microsoft Visual C++ ;
2、 visual studio (2005、2008、2010、2012、2013)- Microsoft Visual Studio ;
3、 win-tc非常方便:不骗你,2000/XP/7都可以用 ;
4、 Code::Blocks(win7、8都可以用);
5、 Turb C(只能编译C语言) ;
6、 gcc (GNU编译器套件) ;
7、 DEV C++;
8、 C-Free;
9、 Borland C++、WaTCom C++、Borland C++ Builder、GNU DJGPP C++、Lccwin32 C Compiler3.1、High C、My Tc等,由于C语言比较成熟,所以编程环境很多;
10、还常用souceinsight ,在工作中还用Labwindows编程,直接调试运行,不过那是有工程背景,有工作经验的技术人员用的。

㈦ 软件体系结构的体系风格

㈧ 为什么在系统架构中散试架构使用得最多

系统架构中三四架构使用的最多那肯定是散是的,加工人们需要的多,所以它的使用就是最多的了。

㈨ 有哪些体系结构模式

一、体系结构定义:

体系结构是一个计算机术语,由G. Amdahl于1964年首次提出体系结构概念,为以后计算机系统的设计与开发奠定了良好的基础。体系结构包括数据流系统、调用-返回系统、独立部件、虚拟机、以数据为中心的系统(库)、特殊领域风格、特殊结构风格、不同风格合成建立的异构结构、最初始最基本的主程序/子程序九大内容。

二、体系结构由来:

在传统的程序设计领域中,人们使用流程图来表达系统的基本功能和实现的具体逻辑,但是,流程图实际上仅仅是源程序的图形化表示,无法给系统的分析和开发者提供更多的信息,所以没有在实际的系统开发过程中得到广泛的应用。随着软件系统的规模和复杂性的增加,对软件系统的整体结构(数据和控制的逻辑)进行分析和描述成为大型系统开发的一个不可缺少的重要部分,显然,使用流程图是无法达到这个目标的,我们必须使用新的方法和概念来对系统的整体结构进行把握。

三、体系结构的分类:

1.数据流系统,包括顺序批处理、管道和过滤器;

2. 调用-返回系统,包括主程序和子程序、面向对象系统、层次结构;

3. 独立部件,包括通信进程、事件隐式调用;

4.虚拟机,包括解释器、规则基系统;

5. 以数据为中心的系统(库),包括数据库、超文本系统、黑板系统;

6. 特殊领域风格;例如过程控制、模拟器;

7. 特殊结构的风格,例如分布式处理、状态转移系统;

8. 不同风格合成建立的异构结构;

9. 最初始、最基本的主程序/子程序。

四、结构范式:

1.管道和过滤器

每个组件具有输入和输出的集合,从流中读出数据作为输入,产生输出数据的流。整个系统可以看成多个过滤器复合形成的数据处理组件。

过滤器A

过滤器B

过滤器C

管道

特点:

过滤器之间是相互独立的(不能共享状态),其中一个过滤器的操作和行为不能影响另外过滤器的操作和行为,流的传送没有副作用。

过滤器对所输入流的来源和输出流的去向不关心,不需要知道流的来源和流的去向,来源和去向对于过滤器的数据处理没有任何影响。

过滤和流的传送可以是并发的,可以同时有多个流的传送存在于系统之中。

实例:

一个最着名的实例是unix的shell编程,多个对数据进行处理的程序(组件)通过管道联结起来,产生总和的效果;还有传统的编译器,源代码经过词法分析、语法分析、中间代码生成、目标代码生成等步骤生成输出的目标代码。

优点:

整个系统的功能是多个过滤器作用的总和,这样可以简化系统的分析和设计,可以经过需求的分析之后将整个系统作为一个过滤器处理,然后再逐步的细化成为多个相互连接的过滤器。

支持组件的重用,同一个过滤器可以多次出现在系统的不同位置。

易于维护和增强,过滤器可以被替换,可以增加新的过滤器到系统中而不改变原有的过滤器,不改变原来系统的基本功能。

本质上的并发性支持,这种体系结构由于本质上是与各个独立的过滤器的状态无关的,与并行的流的通过次序也是无关的,所以并发是一个基本的体系结构自然具有的特性。

缺点:

由于过滤器之间本质上是独立的,所以设计者必须独立考虑每一个过滤器的输入、处理和输出的过程,对于过滤器逻辑上的共同点和相互关系无法在设计中加以体现。

由于这种体系的批处理特性,所以不适合开发和用户交互的应用程序。

系统的多个处理流之间的共同特性无法提取、多个过滤器之间的共同特性也无法提取,所以增加了设计的复杂性。

2.面向对象的体系

在这种体系中,数据和数据上的操作被封装成抽象数据类型或者对象。系统由大量的对象组成,在物理上,对象之间通过函数或者过程调用相互作用;在逻辑上,对象之间通过集成、复合等方式实现设计的复用。

对象D

对象B

对象A

对象E

对象C

对象调用

对象调用

对象调用

类A

类B

类C

类G

对象A

对象E

类F

复合

继承

物理结构逻辑结构

特点:

面向对象系统分析和设计的资料已经太多,这里就不再详细说明了。

优点:

由于封装,实现了灵活性和扩充性,隐藏了实现的细节,提高代码的质量;

使用继承和多态、提高了软件的可重用性。

缺点:

最主要的缺点是,由于对象之间的交互是通过明确的对象函数调用进行的,所以当一个对象需要实现一个特定功能的时候,必须知道哪一个对象提供这种服务,这就降低了系统的灵活性。管道和过滤器模型不需要明确指明数据的来源和去向。

事件驱动的体系

对象E

对象E

对象E

事件分发的总线

事件的创建

事件接收者的注册的创建

对象E

这是面向对象和数据抽象体系的一种变形,系统同样是由大量的对象组成的,但是对象之间的交互不是通过明确指明对象的函数或者过程调用进行的,相反,系统提供事件的创建和发布的机制,对象产生事件,一个或者多个对象通过向系统注册关注这个事件并由此触发出相应的行为或者产生新的事件。

实例:

一个最着名的例子是GUI的模型,鼠标、键盘或者其他输入设备产生各种事件,窗口、程序或者其他对象有这些事件所触发,产生新的事件、进行数据处理或者其他操作。

优点:

用于函数和过程的调用调用不需要指明特定的对象,所以系统具有非常好的灵活性和扩展性,新的组件只需要向系统的事件处理部分注册就可以立刻加入系统中,同样,老的组件也可以方便的从系统中删除。对于动态性要求特别高的系统,特别是如果需要在运行时对系统进行扩充,应该采用该结构。

缺点:

由于函数调用是通过事件发送进行的,所以,发出事件的对象不能确认是否有对象处理了这个事件、是否是期望的对象处理了这个事件、是否获得期望的结果,同样也无法控制事件发生的次序,系统的逻辑和时序的正确性必须通过复杂的时序逻辑和前后条件的断言加以保证。

3.分层次的体系

将系统功能和组件分成不同的功能层次,一般而言,只有最上层的组件和功能可以被系统外的使用者访问,只有相邻的层次之间才能够有函数调用。

下面是一个基本的商务处理系统的层次结构:

用户界面层

事务逻辑层

核心层

实例:

显然,ISO的OSI(开放系统互连)参考模型是最着名的层次模型的例子,通过将开放系统的功能和组件划分成7个层次,定义清晰的(很多时候是过于复杂的)层次之间的接口,实现复杂的互操作性。

优点:

系统的开发和设计可以逐步的分层次的进行,从底层的简单的功能逐步建立高层的复杂和抽象的功能。

灵活性和扩展性,由于相邻层次之间通过清晰的接口交互,所以特定的层次可以被替换和增强,甚至可以增加新的层次。

缺点:

不是所有的系统都可以分解成为清楚的层次

划分清晰、逻辑上一致的层次是非常困难的(OSI的失败和TCP/IP的成功说明了这一点)

严格的层次调用结构会降低系统的性能。

4.知识库体系

使用一个中心数据结构表示系统的当前状态,一组相互独立的组件在中心数据库上进行操作。如果组件负责对中心数据进行选择、处理,这种体系就是传统的数据库模型;如果中心数据结构自主的引发一系列的行为,则这种体系可以看成一个黑板模型。

中心数据库(知识库)

客户组件A

客户组件B

客户组件C

实例:

大量的传统数据库应用程序实际上就是这一体系的具体实例。在很多研究系统中,使用的基于知识库的黑板模型,实际上也是这种体系

优点:

以数据为中心的体系结构,可以自然的表示大量的数据和事务处理的逻辑,适合表达以数据为重新的应用程序。

缺点:

只有很少一部分简单的数据库存储应用可以完全采用这种体系结构表示,在大量实际的商业应用中,完成师傅处理和其他逻辑的应用程序必须采用其他的体系结构表达

5.解释器体系

用户

如果应用程序的逻辑非常复杂,例如,AutoCAD的各种绘图指令,而且,用户可能以非常复杂的方式使用这个系统,一个较好的体系就是提供面向领域的一组指令(语言),系统解释这种语言,产生相应的行为,用户使用这种指令(语言)完成复杂的操作。

使用虚拟机语言描述的业务逻辑

虚拟机解释器

完成实际操作任务的基本指令

实际的问题领域

实例:

大量的开发工具、二次开发工具体现了这一思想:微软在其产品中大量使用的Visual Basic for Application,以及在AutoDesk产品中大量使用的AutoLisp语言,实际上就是给用户提供了一种面向领域的语言,然后核心解释执行这一语言的指令和指令序列。从而扩充产品的功能,方便用户按照自己的需要定制系统。

优点:

非常好的扩展性,用户可以实现对软件系统的二次开发

缺点:

软件开发复杂,特别是这种指令集的设计非常困难。

是否可以采用一种成熟的语言作为二次开发的基础(例如,基于Java)



阅读全文

与编译器采用什么软件体系结构风格相关的资料

热点内容
内网ntp时间同步服务器地址 浏览:181
香肠派对脚本源码 浏览:90
jsp服务器怎么转发 浏览:857
服务器和网站开发有什么区别 浏览:764
如何下载测试服务器 浏览:179
怎么教育孩子的app 浏览:172
交叉编译的输出文件 浏览:330
手机app怎么变更办税员 浏览:936
sql服务停用命令 浏览:912
为什么系统要用两个云服务器 浏览:680
两个pdf怎么合并 浏览:294
php查询为空 浏览:590
香港服务器丢包了怎么办 浏览:47
linux系统管理教程 浏览:645
共享文件夹怎么设置只读文件 浏览:297
小米添加云服务器地址 浏览:583
qt入门pdf 浏览:672
视频监控取消默认加密 浏览:295
云服务器怎么设置输入键盘 浏览:817
单片机支持多大mhz 浏览:44