文档库 最新最全的文档下载
当前位置:文档库 › 激进域敏感基于合并的指针分析

激进域敏感基于合并的指针分析

激进域敏感基于合并的指针分析
激进域敏感基于合并的指针分析

第32卷 第9期2009年9月

计 算 机 学 报

CH INESE JOURNA L OF COM PU TERS

Vo l.32N o.9

Sept.2009

收稿日期:2009 04 14;最终修改稿收到日期:2009 07 21.本课题得到国家 八六三 高技术研究发展计划项目基金 以编译技术为支撑的高可靠软件开发工具与环境 (2008AA01Z115)资助.于洪涛,男,1981年生,博士研究生,主要研究方向为程序分析及编译优化.E mail:htyu@https://www.wendangku.net/doc/fa10591769.html,.张兆庆,女,1938年生,研究员,博士生导师,主要研究领域为先进编译技术及相关工具环境.E mail:z qz han g@https://www.wendangku.net/doc/fa10591769.html,.

激进域敏感基于合并的指针分析

于洪涛 张兆庆

(中国科学院计算技术研究所计算机系统结构重点实验室 北京 100190)

摘 要 指针分析是静态程序分析的基础,指针分析的精度直接影响后续的程序分析和优化.域敏感性用来描述指针分析是否需要区分结构体对象的不同域成员.文中提出一种激进的基于合并的域敏感指针分析方法,利用目标机器模型中的数据布局信息进行高层分析,使用基地址和偏移的组合来激进地表示一个结构体域成员以能更精确地区分结构体的不同域成员.文中还对原有类型推导规则做了重要改进,尽量避免在合并类型变量时造成的精度损失.为了保证新类型推导规则的正确性,方法将所有的结构体赋值操作转换成对每个结构体成员的赋值操作.大量实验数据表明,该方法分析精度显著高于以往方法而运行开销几乎相当.该方法还将域成员的激进表示集成至编译器的中间表示中以获得可移植性.

关键词 域敏感的;基于合并的;Steensg aa rd 风格;指针分析;别名分析中图法分类号T P 311 DOI 号:10.3724/SP.J.1016.2009.01722

An Aggressively Field Sensitive Unification Based Pointer Analysis

YU H o ng T ao ZH ANG Zhao Qing

(K ey L abor ator y of Computer Sy stem and A rchitecture ,I nstitute of Comp uting T echnolog y ,Chinese A cade my of S ciences,Beij ing 100190)

Abstract Pointer analysis is the basis o f most other static pro gram analyses for C pr ogram ming lang uage.The precision o f pointer analysis is crucial to optim izing co mpilers and so ftw are pro ductiv ity tools.Field sensitiv ity is used to describe w hether a pointer analysis needs to distinguish different field m em bers.Field insensitive po inter analysis co nsiders all fields o f o ne structural ob ject as the same o bject.On the contrary ,field sensitive pointer analysis considers different fields as differ ent objects.T his paper proposes an ag gressively field sensitive unification based pointer analysis.Different from existed metho ds,the m ethod takes targ et m achine architectur e into con sider in the phase o f high level analysis in o rder to precisely distinguish fields of structure o bjects.In the metho d,a field of a structural object is agg ressively represented by a pair of offset from its base structure and size of its ow n data type.T he o riginal inference system is improved to avo id the lo ss of precisio n due to joining type variables.All structural memory oper ations are flattened to a series of scalar memory operations based o n the targ et machine info rmation to g uarantee the cor rectness o f ty pe inference system.Lots of exper im ents indicate that the new metho d is m ore precise than the existed metho d w hile maintaining almost the same efficiency.Furthermo re,the method is portable since the agg ressive field r epresentatio n have been implem ented on the inter m ediate representatio n of the authors !compiler.

Keywords field sensitive;unificatio n based;Steensgaar d style;pointer analy sis;alias analysis

1 引 言

指针是一种特殊的数据类型,指针变量用来保存某个程序对象的地址,允许我们能够间接地操作这个程序对象.在C语言中,指针的使用非常广泛.一个原因是,指针常常是表达某个程序对象的唯一途径,比如动态分配的存储对象.另一个原因是,使用指针可以生成更高效的代码,比如将指针作为函数参数可以传递数组或大型结构体对象.

在C语言程序分析中,指针分析用来分析一个指针所有可能指向的存储位置,包括程序中的全局变量、局部变量、动态数据区域等.指针分析是一类特殊的数据流问题,这个问题的解决程度如何将直接影响其它很多数据流问题解决得好坏.因此对于含有指针别名行为的程序,指针分析是静态程序分析的基础.在过去的20年里,指针分析问题的研究已经成为程序分析技术研究的重点之一,至今依然是一个活跃的研究领域.指针分析的研究内容主要是在精度和时空效率之间做取舍.指针分析的精度可以用某个程序点指针指向集合的大小来衡量.分析得出的指针指向集合越大说明该指针分析的精确度越低.精确的指针分析可以提高优化编译器生成代码的运行速度,有时加速比高达25%以上[1].不仅是优化编译器,性能良好的程序检错器也同样依赖于指针分析的精度.精确的指针分析可以减少检错器的错误误报及漏报,提高检错准确率.

在过去的二十年里,指针分析研究领域涌现了大量的优秀成果.其中最具影响力的两个成果是Ander sen的工作[2]和Steensgaard的工作[3]. Ander sen的工作被称为Andersen风格的或者基于包含(inclusion based)的指针分析,是一种流不敏感的指针分析,具有三次方的多项式时间复杂度. Steensgaard的工作被称为Steensg aard风格的或者基于合并(unification based)的指针分析.Steens g aar d风格的分析也是一种流不敏感的指针分析,优点是具有接近线性的时间复杂度,但是精度低于Ander sen风格的方法.之后指针分析领域内很多研究工作都是在改进Andersen和Steensg aard的工作,如改进A ndersen风格的分析的有H ardekopf 等的工作[4 6];改进Steensg aard风格的分析的有Steensgaard、Das等的工作[7 9].

域敏感性用来描述指针分析是否需要区分结构体对象的不同域成员.域不敏感的分析将同一结构体对象的所有域成员看作一个存储对象.相反的,域敏感的分析将程序中所有结构体对象的每个成员都视作不同存储对象参与分析.例如C代码片段

str uct f oo{int*p;int*q;}s1;

int x,y;

s1.p=&x;

s1.q=&y;

域不敏感的指针分析将得到s1指向x和y,也就是s1.p,s1.q都可能会指向x和y这样的结果.而域敏感的分析将能得到s1.p指向x,s1.q指向y.在C 语言中使用结构体对象是很普遍的,从测试集SPEC2000/2006中可以看出,对结构体成员的访存操作占全体访存操作的百分比,最少是1 2%,最多达29 2%,平均是13 7%,因此域敏感的指针分析是十分必要的.

本文将介绍作者实现的一种域敏感的基于合并的指针分析方法.不同于以往的方法[7],本方法将目标机器模型中的数据布局信息应用于高层分析之中,并对文献[7]中的推导规则做了重要改进,改进了合并函数及类型体系以避免精度损失,并能对数组元素建模.大量实验数据表明,本方法分析精度显著高于文献[7],而运行开销几乎相当.

2 研究动机

Steensg aard本人对其著名工作[3]进行了改进,形成域敏感版本[7].文献[7]中采用了一种最大公共子前缀的技术来建立结构体类型之间的对应关系.我们借用文献[7]中的一个例子,如图1.

Steensg aard风格分析基于等价类的特性会导致很多对象的合并.图1(a)给出一个例子说明这种情况.对i2的两次赋值导致s2和s4所指向的对象合并,即s1和s3需要被合并成一个新的对象,也就是说s1和s3是别名的.由于不考虑目标机器模型中的数据布局信息,文献[7]无法知道结构体域成员s1.c和s3.f 的类型长度是否相同,因此在合并s1和s3时,s1.c,s3. f和s3.g都被合并成新结构体对象的一个域成员.分析得到的结果指向图如图2(b).

Yong[10]将Steensgaard的思想进一步扩展,给出了3种与目标机器无关的方式解析结构体类型之间的对应关系,并将这些方式推广到各种指针分析,其中最精确的方式与文献[7]相当,都是最大公共子前缀思想.Yong[10]还给出了一种利用目标机器信息进行域敏感分析的模式,然而他并没有讨论如何

1723

9期于洪涛等:激进域敏感基于合并的指针分析

利用目标机器信息改进Steensg aar d 风格的分析.因为这种改进并不是一种平凡的改进,需要改进算法本身.此外再没有工作来改进Steensg aar d 风格分析的域敏感性.

Yong [10]

认为利用目标机器信息的缺陷是指针分析工具将不可移植.然而在现代编译器里我们可以从机器模型中得到数据布局信息,并尽早地反映在中间表示上.事实上编译器Open64已经为我们提供了这样的基础,展示了方法的可移植性.本文将要给出的激进分析会得到图2所示的指向图

.

3 中间表示

我们先定义程序中可能出现的赋值语句的抽象语法,如图3,不难看出所有C 程序的赋值语句和函数调用语句都能转换成我们定义的语法.

S

????=

M EM 1=M EM 2 #存储对象

|M E M =M EM 2#取地址 |M E M =allocate(c)

#存储分配 |M E M =op (M E M 1#M E M n )#表达式操作 |M E M =f u n(f 1#f n )?r #函数指针赋值 |M E M =CA L L (M EM 1#M EM n )#函数调用

M E M ????

=x |*M EM |M EM 1[M EM 2]|M EM.%of f set,size &CA L L

????=

f |*M E M

图3 赋值语句的抽象语法

C 语言规范不允许直接对结构体变量进行强制类型转换,因此可以利用目标机器模型中的数据布局信息将程序中所有结构体变量之间的赋值展开为对所有成员变量的赋值.如果某个成员是结构体则继续展开,直到程序中所有的赋值语句都是在内定义数据类型之间发生.展开看起来似乎会增加代码体积,然而这种展开是必然的,即使不在中间表示时展开,在生成代码时一样会展开,所以它并不会影响代码长度.到后面会看到,这种展开非常有利于我们进行类型推导.

4 类型系统

和文献[7]中方法一样,首先我们建立一套非标准类型系统.类型系统由类型和类型规则组成.类型系统是基于合并的指针分析的基础,它规定了指针分析应该具有的性质并且保证了指针分析的正确性.非标准类型系统中的类型并不是标准的数据类型,而是描述存储对象的指向情况.类型规则用来保证程序是类型良好的(w ell typed ).一个程序是类型良好的,是指静态指针分析的结果可以保守地描述程序实际运行时的动态存储构造[3]

.

为程序中的每个存储对象赋予一个非标准类型变量,用来描述该存储对象的指向情况.顺序处理每条程序语句,对这些类型变量进行类型推导得到最终的类型环境.最后利用类型环境构建指向图,这就是整个指针分析过程.因此还要针对每条类型规则设定相应的推导规则以保证在处理每条程序语句时类型规则都成立.类型推导过程实际上就是指针分

1724计 算 机 学 报2009年

析的实施过程,而推导规则就相当于具体的分析算法.本节我们先介绍类型和类型规则,第5节再具体介绍推导规则.

4 1 类 型

类型用来描述存储对象的指向情况.为程序中的每个存储对象赋予一个非标准类型变量,用来描述该存储对象的指向情况.

定义1. 定义如下非标准类型

????= ?

????=(|blank|simple( ?siz e)

|str uct(m)|object( )

????=(|lam( 1# n)( n+1)

m????=(|(%of f set,siz e&? )mapping

类型用来描述值,或者是存储对象,或者是函数对象.为每个存储对象赋予一个 类型的类型变量.存储对象包括程序中出现的标量、数组、结构体以及堆对象. 类型变量的值(或者称为类型)表示如下4种情况:

(1)blank.该存储对象是什么类型目前未知;

(2)simple( ?siz e).该存储对象是一个标量, 描述它指向的存储对象或函数,siz e指出它的类型长度;

(3)struct(m).该存储对象是一个结构体对象. m是一个映射关系,映射该结构体对象所有可能的域成员到域成员的类型变量.我们用二元组%偏移,类型长度&表示结构体对象的一个域成员.

(4)object( ).该存储对象的存储布局我们无法得知, 描述它指向的存储对象或函数.

这4种情况为每个函数对象赋予一个类型的类型变量.类型变量的值记载了该函数的形参和返回值信息.

对图1(a)的例子,经类型推导之后所有对象的类型变量如图4所示,其指向图如图2.

我们的类型设计比文献[7]中的更简单,也更激进.一个激进之处在于将目标机器模型中的数据布局信息应用于类型系统.另一个激进之处在于对数组对象的表示.在文献[7]中,数组对象被刻画成一个不可区分的对象,具有o bject类型.例如

int p,q,r,i,j;

struct{int a,*b,*c;}ar r[10];

i=1;j=2;

ar r[i].b=&p;

ar r[i].c=&q;

ar r[j].c=&r;

i1: 12=simple(((?()4)

i2: 1=simple(( 7?()?4)

i3: 4=simple(( 9?()?4)

i4: 5=simple(( 10?()?4)

f1: 13=s imple(((?()?4)

f2: 6=simple(( 11?()?4)

s1: 7=struct([%0,4&? 8,

%4,4&? 9,

%8,4&? 10,

%12,4&? 11])

s2: 2=simple(( 7?()?4)

s3: 7

s4: 3=simple(( 7?()?4)

s1.a: 8=simple(((?()?4)

s3.d: 8

s1.b: 9=sim ple(((?()?4)

s3.e: 9

s1.c: 10=s imple(( 12?()?4)

s3.f: 10

s3.g: 11=simple(( 13?()?4)

图4 针对图1(a)的例子,改进后的分析在目标机器为IA32的情况下得到的类型信息

在文献[7]中并不能区分ar r[i].b,ar r[i].c, arr[j].c为3个不同的对象,因此给出的分析结果是整个数组可能指向p,q,r.我们的类型设计虽然不能区分ar r[i].c和arr[j].c为两个不同的对象,但是可以区分ar r[i].b和ar r[j].c.因此在我们的结果指向图上,整个数组被描述成一个结构体.结构体的域成员b指向p,域成员c指向q和r.这种激进的正确性可以由流不敏感分析的不可注销性保证,对某个数组元素的赋值导致整个数组被弱更新[12].如何为数组对象分配类型变量将在第5节类型推导中介绍.

4 2 类型规则

类型规则规定了指针分析应该具有的性质,同时也用来保证程序是类型良好的(w ell ty ped).一个程序是类型良好的,是指静态指针分析的结果可以保守地描述程序实际运行时的动态存储构造[3].我们先来定义一些类型变量之间的基本关系,然后利用这些关系去构造类型规则.

解释1. 类型变量之间的全等价关系=.

t1=t2表示类型变量t1,t2对应的存储对象或者函数对象是别名的,也就是说它们对应同一块存储空间.

定义2. 类型变量之间的部分等价关系?.

t1?t2(t1=())(t1=t2)

(t1?t2)?(t3?t4)(t1?t3)?(t2?t4).

定义3. 类型变量之间的部分序关系(.t1( t2类型变量t1,t2指向对象的类型变量o1,o2是部

1725

9期于洪涛等:激进域敏感基于合并的指针分析

分等价的,即o1?o2.

t1(t2表示类型变量t1,t2对应的存储对象的指向是条件相同的.条件相同的概念将在后文解释.

接下来我们定义类型规则.每条类型规则的含义是,在处理一条程序语句时,我们必须保证相应的约束被满足.

类型规则1.

A(M EM1: 1

A(M EM2: 2

2( 1

A(w ellty p ed(M EM1=M EM2)

A表示当前的类型环境.规则的含义是,在经过语句MEM1=M EM2之后,为了保证程序是类型良好的,约束 2( 1必须被满足,即此时MEM1和MEM2的指向条件相同.

部分序关系(的定义要求 1, 2指向对象的类型变量o1,o2是部分等价的而不是全等价的,是出于对精度的考虑.例如对程序片段

a=4;

x=a;

y=a;

如果定义o1,o2具有全等价关系o1=o2,那么a,x,y 将具有完全相同的指向.实际上这并不是严格必要的.如果在整个程序中a不指向任何对象,而x或y 在程序的其它部分指向了某个对象b,那么分析将得到a也将指向b.而定义o1?o2可以保证分析不会得到a指向b这个结果[3]中有更详细的解释.因此t1(t2表示类型变量t1,t2对应的存储对象的指向是条件相同的,意思是说如果在程序中t2指向了某个对象,那么t1和t2的指向完全相同的;否则t2的指向为空.

类型规则2.

A(ME M1:sim ple(( ?-)?siz e)/object(( ?-)

A(MEM2:

A(w ellty p ed(MEM1=&M EM2)

A(M EM1:struct(m)

First(m)=simple(( ?-)?siz e)/object(( ?-)

A(M EM2:

A(w ellty p ed(MEM1=&M EM2)

这两条子规则之间是析取的关系,共同组成了规则2.第1条子规则说明,在经过语句ME M1=&ME M2之后,MEM1的指向和MEM2别名.第2条子规则说明,如果ME M1是一个结构体,那么它的起始域成员的指向和MEM2别名.这样做是合理的.由于我们的中间表示上的赋值语句都是在内定义数据类型之间发生,因此ME M1具有struct类型只能来自于两种情况:

(1)将结构体的首地址作为其第一个域成员的地址进行解引用.如图1(a)中最后一行,如果对i2进行解引用实际上是为了使用s3.d.

(2)在合并时由标量simple提升而来.提升的方式就是将此标量作为结构体唯一的域成员.

标量的提升将在5 2节介绍.无论哪种情况,取str uct类型的第1个域成员的指向作为struct类型的指向都是可靠的.

类型规则3.

A(M EM:

A(w ellty p ed(ME M=allocate(c))

规则的约束只要求M EM是一个存储对象而不是函数即可,并不做过多的限制.这是因为我们并不进行显式的堆建模,所有对堆对象的使用都要通过M EM指针.

类型规则4.

A(M EM:

A(M EM i: i

!i+[1..n]. i(

A(w ellty p ed(MEM=op(ME M1#ME M n))规则要求,在经过此语句之后,所有ME M的指向必须条件相同.

类型规则5.

A(M EM:simple((-?)?siz e)/object((-?))

A(f un:

A(w ellty p ed(M EM=f un(f1#f n)?r)

A(ME M1:struct(m)

First(m)=simple((-?))?siz e/object((-?))

A(f un:

A(w ellty p ed(M EM=f un(f1#f n)?r)

这两条子规则之间是析取的关系,共同组成了规则4.规则针对函数指针赋值.第一条子规则说明,在经过赋值语句之后,MEM的指向和函数f unc别名.第二条子规则说明,如果M EM是一个结构体,那么它的起始域成员的指向和函数f unc别名.

类型规则6.

A(M EM: ,

A(ME M i: ,i

A(f:lam( 1# n)( n+1)

!i+[1..n+1]. ,i( i

n+1( ,

A(w ellty p ed(M EM=f(ME M1#ME M n))

规则针对函数调用语句.在经过一条函数调用语句

1726计 算 机 学 报2009年

之后,形参和实参的指向必须条件相同,返回值和MEM指向也必须条件相同.

这6条类型规则保证我们的指针分析是保守的.与文献[7]的区别是,我们的类型规则允许指针具有struct类型.这是由我们的中间表示和改进的类型体系保证,将在下一节介绍.

5 类型推导

指针分析的过程就等于推导一个类型良好程序的类型环境.本节将要介绍如何进行类型推导,如何能够保证规则约束成立,以及如何能够保证部分序关系(成立.

Steensgaard风格的指针分析是一种基于等价的(equivalance based)分析,类型推导阶段运行在并查(union find)集数据结构之上.在类型推导阶段,每个类型变量用实际的不相交集合表示.两个具有等价关系=的类型变量被认为是同一个类型变量,处于一个等价类中,使用并查集上的合并操作来将这两个不相交集合合并成一个集合.

我们设计函数join来完成两个类型变量的合并.对于部分等价关系?,函数cjoin完成两个类型变量的条件合并.对于部分序关系(,函数cjoin-ref 完成两个类型变量的指向的条件合并.利用函数cjoin和cjoin-ref可以保证部分序关系?和(成立.我们先定义推导规则,然后再解释合并函数.合并函数以及推导规则中所用到的辅助函数的伪代码定义在附录中.类型推导过程实际上就是指针分析的实施过程,而推导规则就相当于具体的分析算法.

5 1 推导规则

推导规则1.

M EM1=M E M2

let t1=Get ECR(M EM1)

t2=Get ECR(M EM2)in

if t1?t2

cjoin-r ef(t1,t2)

函数GetECR获得一个存储对象或函数对象的类型变量,用不相交集合表示.

推导规则2.

M EM1=&M EM2

let t1=GetECR(M E M1)

t2=GetECR(M E M2)in

if t ype(t1)=simple(( 1?1)?siz e)or

o bject( 1?1)

join( 1,t2)

else if ty pe(t1)=struct(m)

let t3=F ir st(ty pe(m))in

if t ype(t3)=simple(( 3?3)?siz e)

join( 3,t2)

else

pro mote-to-object(t3)

let object( 3?3)=ty pe(t3)in

jo in( 3,t2)

First用来获得映射m的第一个域成员.如果此域成员还是struct类型,那么将其提升为object类型.

推导规则3.

M EM=allocate(c)

let t1=G etECR(M EM)in

if t ype(t1)=(

setty pe(e1,blank)

M EM是一个存储对象而不是函数.

推导规则4.

M EM=op(M EM1#M EM n)

let t1=G etECR(M EM)in

fo r i=1t o n do

let t2=G etECR(M EM i)in

if t1?t2

cjo in-ref(t1,t2)

表达式的每个操作数都具有和M EM条件相同的指向.

推导规则5.

M EM=f un(f1#f n)?r

let t1=G etECR(M EM1)

t2=GetECR(ME M2)in

if t ype(t1)=simple(( 1?1)?siz e)or

o bject( 1?1)

then cjoin(1,t2)

else if type(t1)=str uct(m)

then

let t3=F ir st(ty pe(m))in

if type(t3)=simple(( 3?3)?siz e)

join(3,t2)

else

pro mote-to-object(t3)

let object( 3?3)=ty pe(t3)in

jo in(3,t2)

推导规则4与推导规则2类似.函数指针赋值相当于取某个函数的地址,然后赋给函数指针变量.

推导规则6.

M EM=f(f1#f n)

let t=GetECR(M EM)

lam(e1#e n)(e n+1)=ty pe(G etECR(f))in

1727

9期于洪涛等:激进域敏感基于合并的指针分析

for i +[1#n]do cjoin-r ef (e 1,t 1) cjoin-r ef (t 1,e n +1)

函数调用相当于一些列赋值语句,首先将调用点处

实参赋值给相应的形参,然后将函数返回值赋值给MEM.

5 2 join 函数

合并函数join 首先使用并查集上的合并操作将表示两个类型变量的不相交集合合并成一个集合,然后再调用unify 函数计算合并后的类型.5 2 1 类型体系

我们先定义一个类型体系(type hierarchy )来帮助我们计算合并后类型变量的类型,如图5(a )

.

图5 类型体系

图5(b )是文献[7]中规定的类型体系.Steens gaard 规定两个等价的类型变量被合并之后的类型在类型体系上要等于或高于这两个变量的类型.类型为sim ple 和struct 的类型变量被合并会形成一个类型为object 的类型变量.例如

int i 1,*i 2;

st ruct {int a,*b,*c;}s 1;i 2=&i 1;i 2=(int *)&s 1;

根据类型规则2,我们要保证i 2的指向和i 1以及s 1别名.这样会导致i 1和s 1的类型变量被合并成object 的类型变量,进而导致s 1的所有域成员都要被合并.

激进的类型体系可以避免这一点,因为我们只将i 1的类型变量提升为仅携带一个int 型域成员的struct 类型,成员的存储布局与目标机器模型中的数据布局有关.然后合并两个struct 类型的类型变量,结果还是struct 类型.5 2 2 惰性域成员映射生成

函数Get-ECR 用来得到一个存储对象或函数对象的类型变量.对于域成员,Get-ECR 使用惰性域成员映射生成(Lazy Field Map Generatio n )技术来获得该域成员的类型变量.惰性域成员映射生成技术在遇到对域成员的使用时才将此域成员加入至

结构体的域成员映射中.采用惰性域成员映射生成技术能够降低分析时的时空开销.首先如果一个结构体变量的某些域成员根本没有在程序中使用,我们就不需要为这些域成员建立映射以及分配等价类表示.其次当两个结构体对象被合并时(union 函数),没有建立映射的域成员就不需要参与合并,节省时间开销.在此之后如果出现对这个域成员的使用,直接在新合并的结构体对象中建立映射,可以避免在原来两个结构体对象中分别建立映射.5 2 3 数组对象的表示

如第4节所述,在文献[7]中,数组对象被刻画成一个不可区分的对象,具有o bject 类型.我们对数组元素的表示方法是忽略其下标.例如

int p ,q,r,i,j ;struct {int a,*

b,

*

c;} ar r[10];

arr [i].

b =&p ;

ar r [i].c =&q;ar r [j ].c =&r;

在文献[7]中ar r [1].b,ar r [1].c 和arr [2].c 表示为同一个不可区分的对象,假设记为arr.我们的表示则可以区分结构体数组元素的不同域成员,记为ar r .b,arr .c.这种激进的正确性可以由流不敏感分析的不可注销性保证,对某个数组元素的赋值导致整个数组被弱更新[11]

.获得数组对象的类型变量也是由函数Get-ECR 来完成.5 2 4 成员合并

在合并两个struct 类型对象时,unio n 函数用来合并它们可能重叠的域成员,并得到新的域成员映射.这里我们利用目标机器模型中的数据布局信息可以得到精确的存储布局,尽可能减少不重叠域成员的合并,效果如图2和图1(b )的比较.文献[7]中的方法完全利用标准数据类型等价性来判断域成员的重叠情况.这样做的一个弱点是对域成员的重叠情况判断不精确.另一个弱点是必须一次性为两个struct 类型对象建立起完全的域成员映射.这是因为重合情况需要从第一个域成员开始顺序判断,只要遇到两个数据类型不同的域成员,后续的域成员都会被认为是相互重合的.例如图1(a )中s 1.c 和s 3.f 的数据类型不同导致将s 3.g 判断为与s 1.c 和s 3.f 重合.如果s 1和s 3还有后续的域成员,那么它们都与s 1.c 和s 3.f 重合.因此文献[7]无法使用惰性域成员映射生成技术.

5 3 cjoin-ref 函数

cjoin-ref 函数用来保证部分序关系(成立,即

1728

计 算 机 学 报2009年

条件合并两个类型变量的指向.cjoin-ref的实现一样要以图5(a)的类型体系为依据.cjo in-ref两个simple类型变量只需要合并它们的指向即可. cjoin-ref两个o bject类型变量同样也只需要合并它们的指向.而当某个类型变量是struct类型的时候,情况看上去有点复杂.正如之前介绍的类型规则2和推导规则2分析的那样,由于中间表示上的赋值语句都是在内定义数据类型之间发生,所有直接对结构体对象的操作都被转化为对其相应域成员的操作.因此一个指针具有struct类型只能来自于两种情况:

(1)将结构体的首地址作为其第一个域成员的地址,然后对其解引用.

(2)在join合并时由标量simple提升而来.提升的方式就是将此标量作为结构体唯一的域成员.

无论哪种情况,取struct类型的指向实际上就是取其第一个域成员的指向.如果第一个域成员还是struct类型,就将其提升为o bject类型.

在文献[7]中,保证约束a(b成立的一个必要条件是在图5(b)所示类型体系上,b的类型要高于或等于a.因此如果a的类型是simple,b的类型是struct,那么b的类型都要被提升为object,这会导致原来b的域成员全部被合并.除此之外,如果a的类型是struct,b的类型是object还将会导致a的每一个域成员的指向与b的指向合并.

6 实验结果

我们在编译器Open64中实现了两种域敏感的指针分析,即Steensgaar d的方法(FS)[7]以及本文的激进方法(AFS).连带着Open64中原有域不敏感指针分析(FI)[3],我们进行了对比实验.实验用例如表1所示.

表1中各列的含义是:

.测试用例/:测试程序名.

.行数/:测试程序行数.

.访存数/:测试程序中访存操作个数.

.域访存数/:访问结构体域成员的访存操作数.

.间接域访存数/:间接访问结构体域成员的访存操作数.

所有的实验用例都来自SPEC2000和SPEC2006测试程序集.列.域访存数/表示访问结构体域成员的访存操作数,例如s.a,p-> a.而列.间接域访存数/表示其中通过指针解引用被访问的结构体域成员操作数.可以看出大部分域成员操作都是通过指针完成的.从测试集SPEC2000和SPEC2006中可以看出,在C语言中使用结构体对象是很普遍的,对结构体成员的访存操作占全体访存操作的百分比,最少是1 2%,最多达29 2%,平均是13 7%.

表1 实验用例

测试用例行数访存数域访存数间接域访存数164.gzip 3604 6472 265 244 175.vpr86941864118201649 176.gcc834752317654116639809 177.mesa28863918811347112755 179.art8091900124124 181.mcf9001996567562 183.equ ak e953292512020 188.ammp96812442242724272 197.parser89151535724072375 253.perlpmk74091040741867317940 254.gap366311012731148511480 255.vortex286346960094238062 256.bzip22551940078787 300.tw olf24273824964576457 400.perlbench146171979623780436912 401.bzip2670221292626832666 403.gcc86445220239090089154 429.mcf1930322029594588 https://www.wendangku.net/doc/fa10591769.html,c9311611816131432 445.gobmk757510220855115216 456.hmm er3334484718457975370 458.sjeng165061583614731411 462.lib quantum70724509748543 464.h264ref1776886951287811583 470.lbm2888725183026 482.sph inx34562321240684037

表2展示了3种指针分析的实验结果.表2中各列的含义是:

.域不敏感/:域不敏感基于合并的指针分析[3].

.域敏感/:域敏感基于合并的指针分析[3].

.激进域敏感/:本文的激进域敏感基于合并的指针分析.

.测试用例/:测试程序名.

.类数/:所有间接访问结构体域成员的访存操作所涉及的别名类个数.在一个别名类中的访存操作是别名的,它们存取相同的存储位置.

.最大/:最大的别名类中间接域成员访存操作数.

.平均/:平均每个别名类中域成员访存操作数.

.时间/:指针分析过程所用时间.

列.类数/将表1中列.间接域访存数/列统计的访存操作分为若干别名类,每个别名类中的语句是有别名的.这就是指针分析得到的直接结果.我们之

1729

9期于洪涛等:激进域敏感基于合并的指针分析

所以选择列.间接域访存数/作为衡量对象而不选择列.域访存数/是因为区分直接域成员访存操作是否别名是很容易的,而且大部分域成员操作都是通过指针完成的.列.类数/的数值越大表明两条访存操作的别名几率越小.

列.平均/是用列.类数/去除列.间接域访存数/得来的,代表平均每个别名类中域成员访存操作数.我们以列.平均/的大小来衡量指针分析的精度.列.平均/的数值越大说明分析得出两个访存操作别名的可能性越大.我们根据列.平均/的数值制作了一个归一化的直方图,以激进域敏感分析的.平均/列数值为参考值1 0,如图6.可以看出,域敏感的分析的精度远远高于域不敏感的分析,即它能够区分的是否别名的访存操作要明显多于域不敏感的分析.激进域敏感的分析在精度上相比于域敏感的分析有不同程度的提高,其中超过半数的例子有大幅度提高,提高精度一倍以上.

表2 3种基于合并的指针分析比较

测试用例

域不敏感

类数最大平均时间

域敏感

类数最大平均时间

激进域敏感

类数最大平均时间

164.gz ip 4 222 61.000 03 37 72 6 590 04 43 725 670 04 175.vp r23140871 690 112221837 420 122581836 390 12 176.g cc8938388447 291 2227837516143 191 6515023175926 501 64 177.m esa1812593708 610 468712219146 602 83116247110 972 11 179.art29762.000 01102612 400 01102612 400 01 181.m cf752780 280 0157409 850 0276337 390 02 183.equake21210.000 013126 670 02852 500 02 188.amm p242622136.000 1091333046 940 16231104818 400 13 197.pars er182115131 940 0869200334 420 10225148910 550 10 253.perlpm k14178211281 420 4717217212104 300 579711397118 470 59 254.gap9114591275 550 50560960320 500 56172364516 660 56 255.vortex90763189 570 45326750624 730 56432475918 650 53 256.b zip226943 500 0226943 500 0272612 420 02 300.tw olf164576457.000 1980449580 710 20162406539 850 20 400.perlb ench25353661476 480 9229733947124 281 1516972541021 751 12 401.b zip2226651333.000 0682505333 250 09181857148 110 09 403.g cc30886495289 462 8912678262670 364 4147996098118 574 19 429.m cf753384.000 0159419 960 0278347 530 01 433.m ilc32132044 750 0985109616 840 1214153910 150 12 445.g ob mk58401489 930 78208164225 070 9849934810 451 10 456.hmmer103433655 630 266597918 690 348124547 050 31 458.sjen g2774052 250 081603028 810 101973017 160 11 462.libquantum5139310 640 031071395 070 031131394 800 03 464.h264ref6114341930 500 45306945237 850 66722281616 040 62 470.lbm12626.000 015105 20 015105 200 01

482.sphinx360385667 280 14265300515 230 195558497 270

18

图6 根据表2列.平均/得到的归一化的直方图(以激进域敏感分析的.平均/列数值为参考值1)

实验表明,在我们选用的27个C程序中,域不敏感的指针分析所用时间开销要小于域敏感的分析.两种域敏感分析的时间开销基本相当.AFS比FS做了更激进的分析而时间开销并没有增加的一个原因是AFS能够尽量避免域成员之间的合并操作,减少合并开销.另一个原因是AFS分析采用了

1730计 算 机 学 报2009年

惰性域成员映射技术来降低分析的时空开销.

我们还将这3种指针分析结果应用于构建完整的过程调用图.在完整的过程调用图上,对函数指针的调用点被实例化成对该函数指针的所有指向对象的调用,因此会在过程调用图上添加相应的调用边.函数指针调用点,对于测试用例177.mesa3种指针分析效果相差极为明显.177.mesa中共有671处函数指针调用,利用FI分析结果会向过程调用图上增加297253条调用边,平均每处函数指针调用增加了443条边.利用FS分析结果会向过程调用图上增加295240条调用边,平均每处函数指针调用增加了440条边,效果相比FI几乎没有提高.而利用我们的AFS分析结果会向过程调用图上增加1537条调用边,平均每处函数指针调用只增加了2 29条边,精度大约提高200倍,效果提高显著.分析177 mesa程序特征我们发现整个程序都是在围绕着结构体指针

G Lco ntex t *CC

对结构体进行访存操作.绝大多数函数指针都是CC 指向的结构体对象的域成员变量.由于FI分析是域不敏感的,将CC指向的结构体对象的所有域成员看成一个对象,因此每个域成员函数指针都会指向所有域成员指向的函数.FS分析虽然是域敏感的,但是对177.mesa这个例子效果并不显著.进一步分析原因得出,CC指向的对象是通过调用函数gl-get-thread-context获得的.该函数的定义如下.

GL co nt ex t*gl-get-thr ead-contex t(v oid)

{

p id-t id;

int i;

id=getp id();

for(i=0;i

if(T hreadI D[i]==id){

return T hr eadContex t[i];

}

}

return N UL L;

}

可以看出,该函数返回的是一个数组元素.由于FS 分析将数组刻画成一个不可区分的对象,如4 1节所述,因此CC指向的是一个object对象.也就是说FS分析无法区分CC指向的结构体成员.AFS分析则可以做到这一点.

7 相关工作

基于合并方式(unification based)的指针分析[3]或者称为Steensgaad风格的指针分析应用非常广泛.Steensgaard风格的指针分析是一种流不敏感的指针分析,优点是具有接近线性的时间复杂度. Das对文献[3]进行了改进[8,12],允许相互赋值的两个指针的第一级指向不被合并,而从第二级指向开始合并,因此分析的精度要高于[3],但是时空效率也由此降低.Fahndrich[9]提出了一种上下文敏感的Steensg aad风格的指针分析.

Steensg aard本人对其工作[3]进行了改进,形成域敏感版本[7].文献[7]中采用了最大公共子前缀的技术来建立结构体类型之间的对应关系.Yo ng[10]将Steensgaard的思想进一步扩展,给出了3种不同精度的方式解析结构体类型之间的对应关系,并将这些方式推广到各种指针分析,其中最精确的方式与文献[7]相当,都是最大公共子前缀思想. Yong[10]还给出了一种利用目标机器信息进行域敏感分析的模式,但是他认为这样做的一个缺陷是指针分析工具将不可移植,而且也没有讨论如何利用目标机器信息改进基于合并方式的指针分析.这种改进并不是一种平凡的改进.Pearce[5]用最大公共前缀的思想改进了Andersen风格的方法,并且使用了与文献[10]不同的表示方式来表示结构体对象的域成员,因此算法的效率更高.

8 结 论

本文提出一种激进的基于合并的域敏感指针分析.与以往基于合并的域敏感指针分析[7]相比,本方法在如下方面做了改进:

(1)利用目标机器模型中的数据布局信息进行高层分析,精确刻画结构体域成员的存储布局.受益于编译器Open64灵活的框架,激进的同时又具有可移植性.

(2)改进的类型体系尽量避免在合并类型变量时造成精度损失.

(3)采用惰性域成员映射生成技术尽可能地推迟建立域成员映射,节省分析的时空开销.

(4)对结构体数组对象的激进表示.

大量实验数据表明,本方法分析精度显著高于Steensg aard的方法[7],而运行开销几乎相当,互有高低.

参考文献

[1]Ghiya R,Lavery D,S ehr D.On th e importan ce of points to

1731

9期于洪涛等:激进域敏感基于合并的指针分析

analysis and other mem ory disambigu ation methods for C program s//Proceedings of the ACM SIGPLAN2001Confer ence on Program ming Langu age Design and Implementation.

Snow bird,Utah,Un ited States,2001:47 58

[2]Anders en L O.Program analysis an d s pecialization for the C

program ming language[Ph.D.dissertation].Un iversity of Copenhagen,DIKU,1994

[3]Steensgaard B.Points to analysis in alm ost linear time//Pro

ceedings of the23rd ACM S IGPLAN SIGAC T Sym posium on Prin ciples of Prog ramm ing Languages.St.Petersburg Beach,Florida,United S tates,1996:32 41

[4]Hardekopf B,Lin C.Th e ant and the grass hopper:Fast and

accurate pointer analysis for millions of lines of code//Pro ceedings of the2007ACM SIGPLAN C on feren ce on Pro grammin g Language Design and Implementation.San Diego, California,U SA,2007:290 299

[5]Pear ce D J,Kelly P H J,H an kin C.Efficient field sensitive

pointer analysis of C.ACM Transactions on Programming Langu ages and Systems(TOPLAS),2007,30(1):4

[6]Pereira F M Q,Berlin D.W ave propagation an d deep propa

gation for p oin ter analys is//Proceedings of th e7th Annual IE EE/ACM In ternational Sym posium on Code Generation and Optimization.Seattle,W A,USA,2009:126 135 [7]Steensgaard B.Points to analysis by typ e inferen ce of pro

grams w ith structu res and unions//Proceedings of the6th

Intern ational C onference on Compiler Construction.London.

UK:Sprin ger Verlag,1996:136 150

[8]Das M.U nification based pointer analysis w ith directional

assignm ents//Proceedin gs of th e ACM SIGPLAN2000Con

ference on Program ming Langu age Design and Im plem enta

tion.Vancou ver,British Columbia,Canada,2000:35 46 [9]Fahndrich M,Reh of J,Das M.Scalable context s ens itive

flow analysis using instan tiation con strain ts//Pr oceedings of

the ACM S IGPLAN2000Conference on Program ming Lan

guage Design and Implementation.Vancouver,Bri tish Colu m

bia,Canada,2000:253 263

[10]Yong S H,H orwitz S,Reps T.Pointer analysis for pro

grams w ith s tru ctures and casting//Proceeding s of the ACM

SIGPLAN1999Conference on Programming Language De

sign and Implementation.Atlanta,Georgia,United States,

1999:91 103

[11]Chase D R,W egman M,Zad eck F K.Analysis of pointer s

and structu res//Proceedin gs of th e ACM SIGPLAN1990

Conference on Programm ing Language Des ign and Implemen

tation.Wh ite Plains,New York,United States,1990:296

310

[12]Das M,Liblit B,Fahndrich M,et al.Estim ating the impact

of scalab le pointer analysis on optim ization//Proceedings of

the8th Intern ational Sym pos ium on S tatic Anals is,2001.

https://www.wendangku.net/doc/fa10591769.html,:Springer Verlag,2001:260 278

附 录.

合并函数以及推导规则中用到的辅助函数的伪代码.

cjoin(e1,e2)

if ty pe(e2)=(

pending(e2)0{e1}1pending(e2)

else

jo in(e1,e2)

join(e1,e2)

if e1?e2

let t10ty pe(e1)

t20ty pe(e2)in

e0ecr union(e1,e2)

if t1=(

ty pe(e)0t2

if t2=(

pending(e)0pending(e1)1pending(e2)

else

fo r x+pending(e1)do

join(e,x)

else

ty pe(e)0t1

if t2=(

fo r x+pending(e2)do

join(e,x)

else

unify(e1,e2)

cjoin-r ef(e1,e2)

if ty pe(e1)=blank sett ype(e1,ty pe(e2))

else if ty pe(e2)=blank

sett ype(e2,ty pe(e1))

else case ty pe(e1)of

[simple(( 1?1)?siz e1)]:

case ty pe(e2)of

[simple(( 2?2)?siz e2))]:

cjoin( 1, 2)

cjoin(1,2)

[str uct(m2)]:

let%o2,s2&? 2=F irst(m2)in

if ty pe( 2)=struct(m)

promo te-to-o bject( 2)

if ty pe( 2)=simple(( ?)?siz e))o r

object( ?)

cjoin( 1, )

cjoin(1,)

[o bject( 2?2)]:

cjoin( 1, 2)

cjoin(1,2)

[str uct(m1)]:

case ty pe(e2)of

[simple(( 2?2)?siz e2))]:

let%o1,s1&? 1=F irst(m1)in

if ty pe( 1)=struct(m)

promo te-to-o bject( 1)

if ty pe( 1)=simple(( ?)?siz e))o r

object( ?)

1732计 算 机 学 报2009年

cjo in( , 2)

cjo in(,2)

[str uct(m2)]:

let%o1,s1&? 1=F irst(m1)

%o2,s2&? 2=F ir st(m2)in

if ty pe( 1)=struct(m1)

promo te-to-o bject( 1)

if ty pe( 2)=struct(m2)

promo te-to-o bject( 2)

if ty pe( 1)=simple(( 3?3)?siz e3))or

object( 3?3)and

ty pe( 2)=simple(( 4?4)?siz e))or

object( 4?4)

cjo in( 3, 4)

cjo in(3,4)

[o bject( 2?2)]:

let%o1,s1&? 1=F irst(m1)in

if ty pe( 1)=struct(m)

promo te-to-o bject( 1)

if ty pe( 1)=simple(( ?)?siz e))o r

object( ?)

cjo in( , 2)

cjo in(,2)

[o bject( 1?1)]:

case ty pe(e2)of

[simple(( 2?2)?siz e2))]:

cjoin( 1, 2)

cjoin(1,2)

[str uct(m2)]:

let%o2,s2&? 2=F irst(m2)in

if ty pe( 2)=struct(m)

promo te-to-o bject( 2)

if ty pe( 2)=simple(( ?)?siz e))o r

object( ?)

cjo in( 1, )

cjo in(1,)

[o bject( 2?2)]:

cjoin( 1, 2)

cjoin(1,2)

unify(e1,e2)

case ty pe(e1)o f

[simple(( 1?1)?siz e1)]:

case ty pe(e2)of

[simple(( 2?2)?siz e2))]:

jo in( 1, 2)

jo in(1,2)

if(siz e1%siz e2)

then s iz e10s iz e2

else siz e20siz e1

[str uct(m2)]:

promo te-to-str uct(e1)

let str uct(m1)=ty pe(e1)in

union(m1,m2)

[o bject( 2?2)]:

join( 1, 2)

join(1,2)

pr omote-t o-object(e1)

[struct(m1)]: case ty pe(e2)of

[simple(( 2?2)?siz e2))]:

pro mote-to-str uct(e2)

let st ruct(m2)=ty pe(e2)in

union(m1,m2)

[str uct(m2)]:

union(m1,m2)

[o bject( 2?2)]:

pr omot e-t o-object(e1)

let object( 1?1)=type(e1)in

join( 1, 2)

join(1,2)

[o bject( 1?1)]:

case ty pe(e2)o f

[simple(( 2?2)?siz e2))]:

join( 1, 2)

join(1,2)

pr omot e-t o-object(e2)

[struct(m2)]:

pr omot e-t o-object(e2)

let object( 2?2)=type(e2)in

join( 1, 2)

join(1,2)

[object( 2?2)]:

join( 1, 2)

join(1,2)

[lam(e1#e n)(e n+1)]:

let lam(e,1#e,n)(e,n+1)=ty pe(e2)in

fo r i+[1#n]do

cjo in-ref(e i,e,i)

unio n(m1,m2,t)

let map1=type(m1)

map2=type(m2)

map=N ewM AP()in

w hile map1not empty o r

map2not empty

let%o1,s1&? 1=F ir st(map1)

%o2,s2&? 2=F ir st(map2)

%o,s&? =L ast(map)in

if ov erlap(%o1,s1&,%o2,s2&)

let%o3,s3&=mer ge(%o1,s1&,%o2,s2&)

3=M akeECR(1)in

join( 3, 1)

join( 3, 2)

r emove(map1,%o1,s1&? 1)

r emove(map2,%o2,s2&? 2)

if no t over lap(%o3,s3&,%o,s&)

insert(map,%o3,s3&? 3)

else

let%o4,s4&=merg e(%o3,s3&,%o,s&)

4=M akeECR(1)in

join( 4, 3)

join( 4, )

r emove(map,%o,s&? )

insert(map,%o4,s4&? 4)

else

if in-fr ont-of(%o1,s1&,%o2,s2&)

r emo ve(map1,%o1,s1&? 1)

1733

9期于洪涛等:激进域敏感基于合并的指针分析

if not o verlap(%o1,s1&,%o,s&)

insert(map,%o1,s1&? 1)

else

let%o3,s3&=merg e(%o1,s1&,%o,s&)

3=M akeECR(1)in

join( 3, 1)

join( 3, )

r emove(map,%o,s&? )

insert(map,%o3,s3&? 3)

else

r emo ve(map2,%o2,s2&? 2)

if not over lap(%o2,s2&,%o,s&)

insert(map,%o2,s2&? 2)

else

let%o3,s3&=merg e(%o2,s2&,%o,s&)

3=M akeECR(1)in

join( 3, 2)

join( 3, )

r emo ve(map,%o,s&? )

insert(map,%o3,s3&? 3)

ty pe(m1)0map

ty pe(m2)0map

GetECR(M EM)

case fo rm(M E M)of

[x]:

return ecr(x)

[*ME M1]:

case ty pe(GetECR(M EM1))of

[simple(( 1?1)?siz e1))]:

return 1

[str uct(m1)]:

let%0,siz eof(*M EM1)&?e=F ir st(ty pe(m))in if ty pe(e)=simple(( ?)?siz e))o r

object( ?)

return

else if ty pe(e)=struct(m)

promo te-to-o bject(e)

let o bject( ?)=ty pe(e)in

return

[o bject( 1?1)]:

return 1

[M EM1[M E M2]]:

case ty pe(GetECR(M EM1))of [simple(( 1?1)?siz e1))]:

return 1

[str uct(m1)]:

let%0,siz eof(*M EM1)&?e=F ir st(ty pe(m))in if ty pe(e)=simple(( ?)?siz e))o r

object( ?)

r etur n

else if ty pe(e)=struct(m)

promo te-to-o bject(e)

let o bject( ?)=t ype(e)in

return

[o bject( 1?1)]:

return 1

[M EM1.%of f set,siz e&]:

let e=GetECR(ME M1)in

case ty pe(e)of

[simple(( 1?1)?siz e1))]:

promo te-to-str uct(e)

let str uct(m1)=ty pe(e)in

let =F ind-o r-enter(type(m1),%o,s&)in

r et ur n

[st ruct(m1)]:

let =Find-or-enter(ty pe(m1),%o,s&)in

r etur n

[object( 1?1)]:

r etur n 1

pro mote-to-st ruct(e)

if type(e)=simple( ??siz e)

let map=New M A P()

t=M akeECR(1)in

insert(map,%0,siz e&?e)

cjoin-ref(t,e)

setty pe(e,st ruct(map))

pro mote-to-object(e)

case type(e)o f

[simple(( ?)?siz e))]:

ty pe(e)0object( ?)

[st ruct(m)]:

let =(and=(in

t ype(e)0object( ?)

fo r each%o2,s2&? 2of m do

join(e, 2

)

YU Hong Tao,bor n in1981,P h.D.

candidate.H is r esear ch interests include

pro gr am analy sis and compiling optimiza

tio n.

ZHANG Zhao Qing,bor n in1938,pr ofessor,Ph.D.

superv isor.Her research interests include adv anced compi

ling t echnolog y and r elated tools.

1734计 算 机 学 报2009年

Backgroud

P ointer ana lysis is a kind of pr og ram analysis technique that determ ines w hich memo ry locatio ns a po inter may po int to dur ing the ex ecution of a g iven pro g ram.Field sensitiv ity is used to describe whether a po inter analy sis needs to distin g uish different field members.F ield insensitive po int er analy sis consider s all fields o f o ne structural o bject as the same ob ject.On the contrar y,field sensit ive pointer ana lysis co nsid er s differ ent fields as different objects.Based on the autho rs! investig ation to famo us benchmarks,field sensitiv ity is sig nificant to po inter ana lysis fo r C,especially fo r C++.M o st of ex isted wo rk o f impr ov ing field sensitivity do es not make use of t arg et machine architecture thus they must loss so me pr ecision.O nly a few wo rk takes tar get machine ar chitect ur e into consider,how ever,t heir wo rk cannot be applied dir ectly to the unificat ion based po inter analysis which is w idely used in pr oduct compliers.

T his pa per pro po ses an ag gr essiv e field sensitiv e unifica t ion based po inter analysis.Differ ent fro m ex isted metho ds, the method takes targ et machine ar chitecture into consider in the phase o f high lev el analy sis in o rder to pr ecisely distin g uish f ields o f structure o bjects.In the method,a field of a st ruct ur al o bject is agg ressively represented by a pair of off set fr om its base str ucture and size of its ow n data ty pe.T his paper also impr ov es the o rig inal ty pe system t o obtain furt her pr ecision.All structural memo ry o perat ions ar e flattened to a ser ies of scalar memory operations based o n the tar get ma chine infor mation to g uarantee the co rr ectness of ty pe infer ence sy stem.L ots o f ex per iments indicate that the pro posed metho d is mo re pr ecise than the existed method while main ta ining almo st the same efficiency.F urthermo re,the method is portable since t he aut ho rs hav e implemented the ag gr essiv e field r epr esentation on the inter mediate represent at ion o f the co mpiler.

T his research is attached to the pro ject T he Co mpiler Based Fr amewo rk fo r the Development of H igh Reliable Soft w are.T he w hole project is suppor ted by a gr ant fr om the Nat ional High T echno lo gy Research and Dev elopment Pr o g ram of China(863Pr og ram)(N o 2008A A01Z115).T he pr oject a ims at impr ov ing softw are r eliability,including the detectio n of soft war e defects,pr og ram v erificat ion and de bugg ing based o n compiling techno log y.T he w ork of this pa per is to im pr ove the pr ecision o f the pointer analysis o f o ur baseline co mpiler O pen64in or der t o const ruct pr ecise SSA for m fo r the consequently analysis, e.g.pro gr am slicing, uninitialized reference checking and so o n.

1735

9期于洪涛等:激进域敏感基于合并的指针分析

数据中心安全建设方案

数据中心安全建设方案

数据中心安全解决方案

目录 第一章解决方案 (2) 1.1建设需求 (2) 1.2建设思路 (2) 1.3总体方案 (3) 1.3.1 IP准入控制系统 (4) 1.3.2 防泄密技术的选择 (6) 1.3.3 主机账号生命周期管理系统 (6) 1.3.4 数据库账号生命周期管理系统.. 7 1.3.5 令牌认证系统 (7) 1.3.6 数据库审计系统 (8) 1.3.7 数据脱敏系统 (8) 1.3.8 应用内嵌账号管理系统 (9) 1.3.9 云计算平台 (12) 1.3.10 防火墙 (13) 1.3.11 统一安全运营平台 (13) 1.3.12 安全运维服务 (15) 1.4实施效果 (15) 1.4.1 针对终端接入的管理 (15) 1.4.2 针对敏感数据的使用管理 (16) 1.4.3 针对敏感数据的访问管理 (17) 1.4.4 针对主机设备访问的管理 (17)

1.4.5 针对数据库访问的管理 (18) 1.4.6 针对数据库的审计 (19) 1.4.7 针对应用内嵌账号的管理 (21) 1.4.8 安全运营的规范 (21) 1.4.9 针对管理的优化 (22) 第二章项目预算及项目要求 (23) 2.1项目预算 (23) 2.1.1 项目一期预算 (23) 2.1.2 一期实现目标 (24) 2.2项目要求 (25) 2.2.1 用户环境配合条件 (25)

第一章解决方案 1.1建设需求 XXX用户经过多年的信息化建设,各项业务都顺利的开展起来了,数据中心已经积累了很多宝贵的数据,这些无形的资产比硬件资产还重要,但它们却面临着非常大的安全挑战。 在早期的系统建设过程中,大多用户不会考虑数据安全、应用安全层面的问题,经过多年的发展,数据中心越来越庞大,业务越来越复杂,但信息安全完全没有配套建设,经常会发生一些安全事件,如:数据库的表被人删除了、主机密码被人修改了、敏感数据泄露了、特权账号被第三方人员使用等等情况,而这些安全事件往往都是特权用户从后台直接操作的,非常隐蔽,这时候往往无从查起。 其实,信息安全建设在系统的设计初期开始,就应该要介入,始终贯穿其中,这样花费的人力物力才是最小。当一个系统建成后,发现问题了,回头再来考虑安全建设,这样投入的成本将会变得最大。 1.2建设思路 数据中心的安全体系建设并非安全产品的堆砌,它是一个根据用户具体业务环境、使用习惯、安全策略要求等多个方面构建的一套生态体系,涉及众多的安全技术,实施过程需要涉及大量的调研、咨询等工作,还会涉及到众多的安全厂家之间的协调、产品的选型,安全系统建成后怎么维持这个生态体系的平衡,是一个复杂的系统工程,一般建议分期投资建设,从技术到管理,逐步实现组织的战略目标。 整体设计思路是将需要保护的核心业务主机包及数据库围起来,与其他网络区域进行逻辑隔离,封闭一切不应该暴漏的端口、IP,在不影响现有业务的情况下形成数据孤岛,设置固定的数据访问入口,对入口进行严格的访问控制及审计。由之前的被动安全变为主动防御,控制安全事故的发生,对接入系统

电路分析基础习题集与答案解析

电路分析基础练习题 @ 复刻回忆 1-1 在图题1-1 所示电路中。元件 A 吸收功率30W ,元件 B 吸收功率15W ,元件 C 产生功率30W ,分别求出三个元件中的电流I 1、I 2、I 3。 5V A I 15V B I 2 5V C I 3 图题1-1 解I 1 6 A,I 2 3 A ,I 3 6 A 1-5 在图题1-5 所示电路中,求电流I 和电压U AB 。 解I 4 1 2 1 A,U AB 3 10 2 4 4 39 V 1-6 在图题1-6 所示电路中,求电压U。 30V 5 U 2A 50V 1 I 2 5V 3 I 1 2 4V 图题1-6 图题1-7解50 30 5 2 U ,即有U30V 1-8 在图题1-8 所示电路中,求各元件的功率。 解电阻功率:P 3 P22 2 3 42 / 2 12 W, 3 8 W 2A 电流源功率:P2A 2(10 4 6) 0 ,2 P1 A 4 1 4 W 10V 4V 1A

电压源功率:P 10V 10 2 20 W, P 4V 4(1 2 2) 4 W 2-7 电路如图题2-7 所示。求电路中的未知量。 解U S 2 6 I 12 4 A 2 9 3 12 V I 0 2A I 2 I 3 I 3 P3/ U S12 / 12 1 A U S R eq 6 9 R3 I 0 2 R 4 / 3 1 12 12 13 / 3 A P312W 1 U S R eq I 12 36 13/ 3 13 图题2-7 2-9 电路如图题2-9 所示。求电路中的电流解从图中可知, 2 与3 并联,I 1 。 1 2 由分流公式,得 I 2 I 33 5 I1 5 1 1 A 1 3I 1 I 3 I 2 1V I 1 5I 1 3 所以,有 I 1 I 2I 3 3I 1 1 图题2-9 解得I 1 0.5 A 2-8 电路如图题2-8 所示。已知I1 3I 2 ,求电路中的电阻R 。 解KCL :I 1 I 2 60 I1 3I 260mA I 1 2.2k 解得I 1 R 为45 mA, I 215 mA. I 2R R 2.2 45 15 6.6 k图题2-8 解(a) 由于有短路线, (b) 等效电阻为 R AB 6 , R AB 1// 1 (1 1// 1) // 1 0.5 1.5 2.5 1.1 2-12 电路如图题2-12 所示。求电路AB 间的等效电阻R AB 。 3

频谱及信号分析技术

频谱及信号分析技术 【摘要】随着电子技术的发展,世界各国加速了对电子领域的研究,具体体现在竞相提高通信、雷达、遥控、导航等无线电电子设备的威力和效能等方面。在这些方面,频谱分析成为必不可少的信号分析手段。频谱分析可以对信号的频率、电平、频谱纯度及抗干扰特性进行分析,使其成为电子领域必不可少的测量手段。对于信号分析,使用的仪器也是重中之重。其中使用最广泛的事频谱分析仪和矢量信号分析仪等。 【关键词】频谱、信号分析、应用、频谱分析仪、矢量信号分析仪首先介绍一下信号频谱分析的方法,信号又分为周期和非周期两种。下面就连续周期和非周期信号频谱分析的方法做一个介绍和研究。在信号处理过程中,频域分析方法往往比时域分析方法更方便和有效。对于确知连续时间信号,其频域分析可以通过连续时间傅里叶变换来进行,但是,这样计算出来的结果仍然是连续函数,计算机不能直接加以处理。为了实现数值计算,还需要对其进行离散化处理,即采用离散傅里叶变换(DFT)进行分析。DFT 的快速算法的出现,使 DFT 在数字通信、图像处理、功率谱估计、系统分析与仿真、雷达信号处理、光学、医学等各个领域都得到广泛应用。对于时间连续信号f(t),其频谱分析可以通过连续时间傅里叶变换(CTFT)来进行。连续时间傅里叶变化特别适合于对时间连续信号的理论分析,但是,由于函数 f(t)和其频谱函数都是连续函数,不能够直接用计算机来处理,因此在进行数值计算时必须将其离散化,然后利用离散傅里叶变换(DFT)实现近似计算。在已知连续信号数学解析式的情况下,非周期信号的频谱可以根据傅里叶变换的定义进行解析计算。实际应用中的多数信号不存在数学解析式,信号的频谱无法利用傅里叶分析公式方法直接计算,一般需采用数值方法进行近似计算分析频谱,在进行数字计算时,需对计算的连续变量进行离散化。由于连续非周期信号 x(t) 的频谱函数 X(jω)是连续函数,因此,需要对其进行离散化处理得到 x[n]以近似分析相应的频谱。通过建立序列 x[n]的离散傅里叶变换 X[m]与连续非周期信号 x(t)的傅里叶变换 X(jω)之间的关系,可以利用DFT对连续非周期信号频谱进行近似分析。在利用DFT分析连续时间信号的频谱时,涉及频谱混叠、频率泄漏及栅栏现象。频率混叠与连续信号的时域抽样间隔有关,频率泄漏与信号的时域加窗截短的长度及窗型有关,栅栏现象与DFT的点数有关。在大多数情况下,一般已知待分析连续信号的最高频率,以及希望的DFT的频率分辨率。 频谱分析仪是功能强大并广泛应用于射频信号检测的一种仪器。现代外差式频谱分析仪由射频前端、第1级混频、多级中频处理、视频处理、检波和踪迹输出5部分组成,如图1所示。

数据域测量中逻辑笔的研制

数据域测量中逻辑笔的研制 摘要:针对数字电路测试与检修过程中逻辑电平状态测量问题,设计了三组由不同参数电阻构成的分压取样电路,将稳压管的输出电压分压取样以产生高、低以及悬空三种状态的阈值电平,确保了电路运行的可靠。选用3个运算放大器和逻辑门电路设计构成电压比较运算电路,将测试电压与三种阈值电平进行比较运算,保证了测量精度的同时使得电路结构更为稳定。运用不同颜色的发光二极管来表示数字电平的不同状态,清晰直观,提高的测量的效率。 关键词:数据域测量,数字电路,逻辑笔 1 引言 随着数字电子技术在各个领域内的广泛应用,数字电路的分析与设计日益成为电子,自动化,计算机等领域的重要部分。数字电路的分析大体上包括两个部分,一类是根据具体目标,确定所设计电路应具备的功能,然后设计相应的电子线路,另一类是对现有电子电路进行分析,从而对电路各个部分的功能更加明晰,为后续数字电路的改进或故障检修做准备。 数字电路的设计与分析过程中,数据流的测量以及数字电平逻辑状态的判断是一个重要的环节。电路中各个节点逻辑电平是否处于正常状态直接决定了电路工作是否正常,同时,根据逻辑电平的状态也可准确排查出故障位置和原因。与传统时域测量不同,数据域测量面向的对象是数字逻辑电路。传统时域测量仪器如万用表、示波器对于模拟电子电路的测量时行之有效的,但由于数字电路与模拟电路在电路结构,信号构成,分析方法上有着很大的不同,故应设计相应的数据域测量测量仪器,以达到高效分析和检修数字电路的目的。 通常状态下,数字电路的输出有三种状态,即高电平状态、低电平状态以及高阻状态。当输出电压高于设定的阈值电平(通常为 3.5V)定义为高电平状态,记为逻辑“1”,当输出电压低于设定的阈值电平(通常为1.2V)定义为低电平状态,记为逻辑“0”,当输入端悬空时为第三状态,称为高阻状态。逻辑笔是一种新型的数据域测试工具,采用不同颜色的指示灯来表示数字电平的高、低以及悬空状态,判别迅速、清晰直观。基于单片机技术的逻辑笔设计方案是将单片机 本研究运用逻辑门电路构建逻辑笔的电路设计方案。 本研究项目的创新之处在于,针对数据域测量过程中逻辑电平状态的测量,分别设计了 1

数据中心安全规划方案

XX数据中心信息系统安全建设项目 技术方案

目录1.项目概述4 1.1.目标与范围4 1.2.参照标准4 1.3.系统描述4 2.安全风险分析5 2.1.系统脆弱性分析5 2.2.安全威胁分析5 2.2.1.被动攻击产生的威胁5 2.2.2.主动攻击产生的威胁5 3.安全需求分析7 3.1.等级保护要求分析7 3.1.1.网络安全7 3.1.2.主机安全8 3.1.3.应用安全9 3.2.安全需求总结9 4.整体安全设计10 4.1.安全域10 4.1.1.安全域划分原则10 4.1.2.安全域划分设计11 4.2.安全设备部署12 5.详细安全设计13 5.1.网络安全设计13 5.1.1.抗DOS设备13 5.1.2.防火墙14 5.1.3.WEB应用安全网关15 5.1.4.入侵防御16

5.1.5.入侵检测17 5.1. 6.安全审计18 5.1.7.防病毒18 5.2.安全运维管理19 5.2.1.漏洞扫描19 5.2.2.安全管理平台19 5.2.3.堡垒机21 6.产品列表21

1.项目概述 1.1.目标与范围 本次数据中心的安全建设主要依据《信息安全技术信息安全等级保护基本要求》中的技术部分,从网络安全,主机安全,应用安全,来对网络与服务器进行设计。根据用户需求,在本次建设完毕后XX数据中心网络将达到等保三级的技术要求。 因用户网络为新建网络,所以本次建设将完全按照《信息安全技术信息安全等级保护基本要求》中技术部分要求进行。 1.2.参照标准 GB/T22239-2008《信息安全技术信息安全等级保护基本要求》 GB/T 22239-2008《信息安全技术信息安全等级保护基本要求》 GB/T 22240-2008《信息安全技术信息系统安全等级保护定级指南》 GB/T 20270-2006《信息安全技术网络基础安全技术要求》 GB/T 25058-2010《信息安全技术信息系统安全等级保护实施指南》 GB/T 20271-2006《信息安全技术信息系统安全通用技术要求》 GB/T 25070-2010《信息安全技术信息系统等级保护安全设计技术要求》 GB 17859-1999《计算机信息系统安全保护等级划分准则》 GB/Z 20986-2007《信息安全技术信息安全事件分类分级指南》 1.3.系统描述 XX数据中心平台共有三个信息系统:能源应用,环保应用,市节能减排应用。 企业节点通过企业信息前置机抓取企业节点数据,并把这些数据上传到XX 数据中心的数据库中,数据库对这些企业数据进行汇总与分析,同时企业节点也可以通过VPN去访问XX数据中心的相关应用。

_第二章连续系统的时域分析习题解答

第二章 连续系统的时域分析习题解答 2-1 图题2-1所示各电路中,激励为f (t ),响应为i 0(t )和u 0(t )。试列写各响 解: . 1)p ( ; )1(1)p ( , 111 , 1 111)( )b (; 105.7)625(3 102 ; )(375)()6253(4) ()()61002.041( )a (0202200 204006000f i p f p u p f p p p u i f p p p p p f t u pf i p pu i t f t u p t f t u p =+++=++?++=+=+++= ++= ?=+??==+?=++-- 2-2 求图题2-1各电路中响应i 0(t )和u 0(t )对激励f (t )的传输算子H (p )。 解:. 1 )()()( ; 11)()()( )b (; 625 3105.7)()()( ; 6253375)()()( )a (22 0 20 40 0 +++==+++== +?==+== -p p p p t f t i p H p p p t f t u p H p p t f t i p H p t f t u p H f i f u f i f u 2-3 给定如下传输算子H (p ),试写出它们对应的微分方程。 . ) 2)(1() 3()( )4( ; 323)( )3(; 3 3)( )2( ; 3)( )1( +++=++=++=+= p p p p p H p p p H p p p H p p p H 解:; 3d d 3d d )2( ; d d 3d d )1( f t f y t y t f y t y +=+=+ . d d 3d d 2d d 3d d )4( ; 3d d 3d d 2 )3( 2222t f t f y t y t y f t f y t y +=+++=+ 2-4 已知连续系统的输入输出算子方程及0– 初始条件为: . 4)(0y ,0)(0y )y(0 ),()2(1 3)( )3(; 0)(0y ,1)(0y ,0)y(0 ),()84() 12()( )2(; 1)(0y ,2)y(0 ),()3)(1(4 2)( )1(---2 ---2 --=''='=++==''='=+++-=='=+++= t f p p p t y t f p p p p t y t f p p p t y 1 f u 0(t ) (b) 1 f (t ) 4k 6k 2F u 0(t ) (a) 图题2-1

安全域划分和等级保护

近年来,随着我国信息化发展的逐步深入,我们对信息系统的依赖越来越强,国家信息基础设施和重要信息系统能否安全正常地运行直接关系到国家安全和社会秩序。但是大型信息系统的安全保障体系建设是一个极为复杂的工作,为大型组织设计一套完整和有效的安全体系一直是个世界性的难题。一些行业性机构或大型企业的信息系统应用众多、结构复杂、覆盖地域广阔、涉及的行政部门和人员众多;系统面临着各种性质的安全威胁,间谍、黑客、病毒蠕虫、木后门、非法的合作伙伴、本地维护的第三方、内部员工等;安全保障要求的内容极为广泛,从物理安全、网络安全、系统安全、应用安全一直到安全管理、安全组织建设等等,凡是涉及到影响正常运行的和业务连续性的都可以认为是信息安全问题;不同业务系统、不同发展阶段、不同地域和行政隶属层次的安全要求属性和强度存在较大差异性。 国内的政策及发展 面对严峻的形势和严重的问题,如何解决大型信息系统的信息安全问题,是摆在我国信息化建设人员面前的重大关键问题。美国及西方发达国家为了抵御信息网络的脆弱性和安全威胁,制定了一系列强化信息网络安全建设的政策和标准,其中一个很重要思想就是按照安全保护强度划分不同的安全等级,以指导不同领域的信息安全工作。经过我国信息安全领域有关部门和专家学者的多年研究,在借鉴国外先进经验和结合我国国情的基础上,提出了分等级保护的策略来解决我国信息网络安全问题,即针对信息系统建设和使用单位,根据其单位的重要程度、信息系统承载业务的重要程度、信息内容的重要程度、系统遭到攻击破坏后造成的危害程度等安全需求以及安全成本等因素,依据国家规定的等级划分标准,设定其保护等级,自主进行信息系统安全建设和安全管理,提高安全保护的科学性、整体性、实用性。 2003 年,中央办公厅、国务院办公厅转发的《国家信息化领导小组关于加强信息安全保障工作的意见》(27号文)中,已将信息安全等级保护作为国家信息安全保障工作的重中之重,要求各级党委、人民政府认真组织贯彻落实。《意见》中明确指出,信息化发展的不同阶段和不同的信息系统,有着不同的安全需求,必须从实际出发,综合平衡安全成本和风险,优化信息安全资源的配置,确保重点。 之后,一系列的国家部委、行业组织下发了关于信息系统等级保护方面的政策和规范。2004年,公安部、国家保密局、国家密码管理委员会办公室、国务院信息化工作办公室联合下发

第三章 线性系统的时域分析与校正 习题及答案

第三章 线性系统的时域分析与校正 习题及答案 3-1 已知系统脉冲响应 t e t k 25.10125.0)(-= 试求系统闭环传递函数)(s Φ。 解 Φ()()./(.)s L k t s ==+00125125 3-2 设某高阶系统可用下列一阶微分方程 T c t c t r t r t ?? +=+()()()()τ 近似描述,其中,1)(0<-<τT 。试证系统的动态性能指标为 T T T t d ?? ? ?????? ??-+=τln 693.0 t T r =22. T T T t s ?? ??? ? -+=)ln( 3τ 解 设单位阶跃输入s s R 1)(= 当初始条件为0时有: 1 1 )()(++=Ts s s R s C τ 1 11 11)(+-- = ? ++= ∴ Ts T s s Ts s s C τ τ C t h t T T e t T ()()/==---1τ 1) 当 t t d = 时 h t T T e t t d ()./==---051τ 12=--T T e t T d τ/ ; T t T T d -??? ??-=-τln 2ln ????? ???? ??-+=∴ T T T t d τln 2ln

2) 求t r (即)(t c 从1.0到9.0所需时间) 当 T t e T T t h /219.0)(--- ==τ; t T T T 201=--[ln()ln .]τ 当 T t e T T t h /111.0)(---==τ; t T T T 109=--[ln()ln .]τ 则 t t t T T r =-==2109 01 22ln ... 3) 求 t s T t s s e T T t h /195.0)(---==τ ]ln 3[]20ln [ln ]05.0ln [ln T T T T T T T T T t s τ ττ-+=+-=--=∴ 3-3 一阶系统结构图如图3-45所示。要求系统闭环增益2=ΦK ,调节时间4.0≤s t s ,试确定参数21,K K 的值。 解 由结构图写出闭环系统传递函数 111)(212211211 +=+=+ =ΦK K s K K K s K s K K s K s 令闭环增益21 2 == ΦK K , 得:5.02=K 令调节时间4.03 32 1≤= =K K T t s ,得:151≥K 。 3-4 在许多化学过程中,反应槽内的温度要保持恒定, 图3-46(a )和(b )分别为开环和闭环温度控制系统结构图,两种系统正常的K 值为1。

数据中心-网络及安全资源池系统及安全策略规划配置方案

网络及安全资源池系统及安全策略规划配 置方案 1.网络及安全资源池安全域规划思路、安全策略规划配置思路 根据安全要求及业务特点,整体网络架构将划分外网接入区、数据中心区、安全运维区、内部接入区等;容灾节点划分外网接入区、容灾区。具体网络架构如下所示: (1)外网接入区 容灾节点与既有节点之间采用两条100M互联网链路连接,用于容灾数据传输。各业务系统数据使用既有的互联网链路方式进行传输。部署出口路由器负责对接外部网络(Internet和IP承载网),建议适当开启路由器安全策略,对进入数据中心的流量进行第一层基本防护;部署VPN网关以VPN方式(运营商MSTP 网络)连通各所属省公司局域网;部署入侵检测设备(IDS)对进入数据中心的安全隐患和迹象进行检测,在网络受到侵害前进行主动响应,部署部署异常流量检测设备、抗DDOS流量清洗设备对网络出口流量进行监控。抗DDOS、IDS同路由器的安全策略共同构成第一层基本防护,保护外网接入区设备。

(2)数据中心区 以多业务安全网关(支持下一代防火墙、上网行为管理功能)为第二层核心安全防护,划分非信任区(外网接入区)和信任区(数据中心区),其中数据中心区为整个云平台的核心,计算网络采用Spine-Leaf扁平体系架构,硬件网络由SDN统一控制,原有网络可以通过核心交换机的VxLAN网关功能实现VxLAN到VLAN的转换;存储网络基于存储阵列构建IPSAN网络,用于业务数据及虚机文件存储。同时为适合等级保护、企业内控等信息安全规范,将部署WEB应用防火墙(作为第二层应用安全防护)实现各类SQL注入、跨站、挂马、扫描器扫描、敏感信息泄露、盗链行为等攻击防护。 部署备份设备,实现约25%业务的数据按需数据备份的能力,发生关键数据丢失时,可以通过备份恢复数据。 (3)安全运维区 部署云管理平台、SDN控制器及安全管理设备,其中安全管理设备包括堡垒机(利旧网络可达即可)、安全审计、漏洞扫描、终端安全管理与防病毒、网页防篡改等构成第三层内网及管理防护。 (4)内部接入区 实现内部办公用户的接入。 (5)容灾区 通信技术中心节点DCA是主节点,容灾节点DCB是容灾节点,容灾节点可以实现对主节点约30%的核心业务进行容灾份资源需求。 2.网络及安全资源池网络端口规划配置(IP地址和VLAN规划)思路 2.1外网接入区 (1)出口路由器 出口路由器是在网络的边界点用于与其他网络(例如广域网)相连接的路由器设备,其定位是将用户由局域网汇接到广域网,其业务需求覆盖包括从简单的连网到复杂的多媒体业务和VPN业务等。考虑到数据中心集中建设后网络的可靠性,本项目建议配置两台边界路由器,实现双机热备,同时路由器需支持MSTP 组网并建议开启ACL访问控制、包过滤防火墙等安全功能。 (2)入侵检测设备(IDS) 其主要作用是帮助用户量化、定位来自内外网络的威胁情况,提供有针对性的指导措施和安全决策依据,并能够对网络安全整体水平进行效果评估,IDS可以依照用户定制的策略,准确分析、报告网络中正在发生的各种异常事件和攻击行为,实现对网络的“全面检测”,提供实时报警。根据安全需求分析,建议部署两台入侵检测设备以旁路方式连接至出口路由器。

第三章 时域分析法 习题

第三章时域分析法 3-1两相交流电动机,使用在简单位置控制系统中见习题3-1图。假设作误差检测器用的差动放大器增益为10,且它供电给控制磁场。 ω和阻尼系数ζ等于什么? 试问a)无阻尼自然频率n b)相对超调量和由单位阶跃输入引起峰值的时间等于什么? c)写出关于单位阶跃输入下的误差时间函数。 习题3-1图 3-2 差动放大器的增益增加至20,重做习题3-1。并问从你的结果中能得出什么结论? 3-3 两相交流感应电动机采用齿轮传动和负载链接,使用在简单位置系统中,见习题3-1图。假设作误差检测器用的差动放大器增益为20,且由它供电给控制磁场。试问 ω和阻尼系数ζ等于什么? a)无阻尼自然频率n b)相对超调量和由单位阶跃输入下的峰值的时间等于什么? c)写出关于单位阶跃输入下的误差时间函数。 3-4 差动放大器的增益增至40,重做习题3-3.并问从你的结果中能得出什么结论? 3-5 差动放大器的增益减至10,重做习题3-3.并从你的结果中可得出什么结论? 3-6 综合典型有翼可控导弹控制系统,可使用转矩作用于导弹弹体的方法。这些转矩由作用在离重心很远的控制翼面的偏斜来产生。这样做的结果可以用相对小的翼面负载,就能引起较大的转矩。对这一类型控制系统的设计,为使输入指令响应时间最小,就要求控制回路具有高增益。而又必须限制增益在不引起高频不稳定范围内。习题3-6图表示导弹加速度控制操纵系统。给定加速度与加速度计输出量比较,发出驱动控制系统的节本误差信号。由速度陀螺仪的输出作为阻尼。 试求出下列各式: a)确定这一系统的传递函数C(s)/R(s)。 b)对应一下的一组参数: 放大器增益= A k=16,飞行器增益系数=q=4,R k=4, ω和阻尼系数ζ。 确定该系统无阻尼自然频率n c)确定相对超调量和从加速度单位阶跃输入指令所引起的峰值时间。

调制域简介

10.4.2调制域测试技术 调制域测试技术是20世纪末出现的一个新的测试技术领域,它与过去我们熟知的时域测试、频域测试一起被称为目前的“三域”测试技术。时域测试测量输入信号随时间而变化的信号值,即测量信号值与时间的关系。频域测试是测量输入信号随频率而变化的信号值,即测量信号值与频率的关系。调制域测试测量输人信号随时间而变化的频率值,所产生的显示图形代表信号的调制域,即测量信号的频率值与时间的关系。调制域测试技术是一门新兴的、重要而技术难度大的测试新技术。众所周知,过去大多数电子信息传送的是幅度变化信息,而现在转向传送数字信息,信息越来越多地以数字脉冲之间的定时或相位关系的方式传送出去,单单使用示波器或频谱仪这类以幅度为基础的仪器,难以满足表征这些数字信号的需要,于是提出了相位数字化新方法。这种方法非常适合测量定时信号、相位编码信号或频率编码信号。调制域测试技术的出现必将对解决众多的测试问题做出新贡献。事实已经证明,调制域分析技术在越来越多的应用领域成为一种不可或缺的测试技术,尤其是在军事电子测试领域更有其重要的意义。 譬如,随着综合业务数字网和同步光纤网络等新的数字通信技术进人主流电话系统,应用传统的测试手段已经不能精确地测量传输的信号;再有,通信传输中晃动的精确测量是传输中至关重要的一个问题,由于调制域分析技术可以进行二百万次/秒的频率测量,64 000次背对背的频率测量,因而它是当今唯一能直接显示随时间而变化的频率晃动技术。另外,调制域分析技术在军事上具有其独特的应用,由于它可以测量、分析迅速变化的频率、时间间隔或相位关系函数,因此调制域分析技术可对这种信号进行调谐,以达到电子装备的最佳性能。以雷达而言,可以消除其盲点,减少目标运动的负效应,改善雷达系统的作用距离和分辨率。调制域分析仪非常适合设计防抱死制动系统、可调节悬浮系统、自适应巡航控制系统、防撞雷达以及各种各样的航天和防御系统等。总之,调制域分析技术可以用来加速设计和表征诸如雷达、电子战、监控系统、扩频通信等的工作和性能特征。 我国南京新联电子设备有限公司已经研制出10HZ?2.5GHz的调制域分析仪,达到了国外同类产品的水平,填补了国内空白,为我国跳频领域的电子设备和军事装备提供了低于国外价格1/3?1/2的测试手段。

第二章__连续系统的时域分析习题解答

— P2-1 — 第二章 连续系统的时域分析习题解答 2-1 图题2-1所示各电路中,激励为f (t ),响应为i 0(t )和u 0(t )。试列写各响应关于激励微分算子方程。 解: . 1)p ( ; )1(1)p ( , 111 , 1 111)( )b (; 105.7)625(3 102 ; )(375)()6253(4) ()()61002.041( )a (0202200 204006000f i p f p u p f p p p u i f p p p p p f t u pf i p pu i t f t u p t f t u p =+++=++?++=+=+++= ++= ?=+??==+?=++-- 2-2 求图题2-1各电路中响应i 0(t )和u 0(t )对激励f (t )的传输算子H (p )。 解:. 1 )()()( ; 11)()()( )b (; 625 3105.7)()()( ; 6253375)()()( )a (22 0 20 40 0 +++==+++== +?==+== -p p p p t f t i p H p p p t f t u p H p p t f t i p H p t f t u p H f i f u f i f u 2-3 给定如下传输算子H (p ),试写出它们对应的微分方程。 . ) 2)(1() 3()( )4( ; 323)( )3(; 3 3)( )2( ; 3)( )1( +++=++=++=+= p p p p p H p p p H p p p H p p p H 解:; 3d d 3d d )2( ; d d 3d d )1( f t f y t y t f y t y +=+=+ . d d 3d d 2d d 3d d )4( ; 3d d 3d d 2 )3( 2222t f t f y t y t y f t f y t y +=+++=+ 2-4 已知连续系统的输入输出算子方程及0– 初始条件为: . 4)(0y ,0)(0y )y(0 ),()2(1 3)( )3(; 0)(0y ,1)(0y ,0)y(0 ),()84() 12()( )2(; 1)(0y ,2)y(0 ),()3)(1(4 2)( )1(---2 ---2 --=''='=++==''='=+++-=='=+++= t f p p p t y t f p p p p t y t f p p p t y f (u 0(t ) (b) u 0(t ) (a) 图题2-1

数据中心安全建设方案

数据中心安全解决方案

1 目录 第一章解决方案 (2) 1.1建设需求 (2) 1.2建设思路 (2) 1.3总体方案 (3) 1.3.1 IP 准入控制系统 (5) 1.3.2防泄密技术的选择 (6) 1.3.3主机账号生命周期管理系统 (6) 1.3.4数据库账号生命周期管理系统 (7) 1.3.5令牌认证系统 (8) 1.3.6数据库审计系统 (8) 1.3.7数据脱敏系统 (9) 1.3.8应用内嵌账号管理系统 (10) 1.3.9云计算平台 (13) 1.3.10防火墙 (13) 1.3.11统一安全运营平台 (14) 1.3.12安全运维服务 (16) 1.4实施效果 (16) 1.4.1针对终端接入的管理 (16) 1.4.2针对敏感数据的使用管理 (17) 1.4.3针对敏感数据的访问管理 (18) 1.4.4针对主机设备访问的管理 (18) 1.4.5针对数据库访问的管理 (19) 1.4.6针对数据库的审计 (20) 1.4.7针对应用内嵌账号的管理 (22) 1.4.8安全运营的规范 (22) 1.4.9针对管理的优化 (23) 第二章项目预算及项目要求 .......................................................................错误!未定义书签。 2.1项目预算 ..........................................................................................错误!未定义书签。 2.1.1项目一期预算 .......................................................................错误!未定义书签。 2.1.2一期实现目标 .......................................................................错误!未定义书签。 2.2项目要求 ..........................................................................................错误!未定义书签。 2.2.1用户环境配合条件 ...............................................................错误!未定义书签。

_第二章连续系统的时域分析习题解答

第二章 连续系统的时域分析习题解答 2-1 图题2-1所示各电路中,激励为f (t ),响应为i 0(t )和u 0(t )。试列写各响应关于 激励微分算子方程。 解: . 1)p ( ; )1(1)p ( , 111 , 1 111)( )b (; 105.7)625(3 102 ; )(375)()6253(4) ()()61002.041( )a (0202200 204006000f i p f p u p f p p p u i f p p p p p f t u pf i p pu i t f t u p t f t u p =+++=++?++=+=+++= ++= ?=+??==+?=++-- 2-2 求图题2-1各电路中响应i 0(t )和u 0(t )对激励f (t )的传输算子H (p )。 } 解:. 1 )()()( ; 11)()()( )b (; 625 3105.7)()()( ; 6253375)()()( )a (220 20 40 0 +++==+++==+?==+== -p p p p t f t i p H p p p t f t u p H p p t f t i p H p t f t u p H f i f u f i f u 2-3 给定如下传输算子H (p ),试写出它们对应的微分方程。 . ) 2)(1() 3()( )4( ; 323)( )3(; 3 3)( )2( ; 3)( )1( +++=++=++=+= p p p p p H p p p H p p p H p p p H 解:; 3d d 3d d )2( ; d d 3d d )1( f t f y t y t f y t y +=+=+ . d d 3d d 2d d 3d d )4( ; 3d d 3d d 2 )3( 2222t f t f y t y t y f t f y t y +=+++=+ 2-4 已知连续系统的输入输出算子方程及0– 初始条件为: . 4)(0y ,0)(0y )y(0 ),()2(1 3)( )3(; 0)(0y ,1)(0y ,0)y(0 ),()84() 12()( )2(; 1)(0y ,2)y(0 ),()3)(1(4 2)( )1(---2 ---2 --=''='=++==''='=+++-=='=+++= t f p p p t y t f p p p p t y t f p p p t y 1 f (u 0(t ) (b) @ f (t ) 4k 6k 2F } u 0(t ) (a) 图题2-1

数据仓库的数据模型

业务驱动 任何需求均来源于业务,业务决定了需求,需求分析的正确与否是关系到项目成败的关键所在,从任何角度都可以说项目是由业务驱动的所以数据仓库项目也是由业务所驱动的. 但是数据仓库不同于日常的信息系统开发,除了遵循其他系统开发的需求,分析,设计,测试等通常的软件声明周期之外;他还涉及到企业信息数据的集成,大容量数据的阶段处理和分层存储,数据仓库的模式选择等等,因此数据仓库的物理模型异常重要,这也是关系到数据仓库项目成败的关键. 数据仓库的结构总的来说是采用了三级数据模型的方式: 概念模型: 也就是业务模型,由企业决策者,商务领域知识专家和IT专家共同企业级地跨领域业务系统需求分析的结果. 逻辑模型:用来构建数据仓库的数据库逻辑模型。根据分析系统的实际需求决策构建数据库逻辑关系模型,定义数据库物体结构及其关系。他关联着数据仓库的逻辑模型和物理模型这两头. 物理模型:构建数据仓库的物理分布模型,主要包含数据仓库的软硬件配置,资源情况以及数据仓库模式。 如上图所示,在数据仓库项目中,物理模型设计和业务模型设计象两个轮子一样有力的支撑着数据仓库的实施,两者并行不悖,缺一不可.实际上,我有意的扩大了物理模型和业务模型的内涵和外延.在这里物理模型不仅仅是数据的存储,而且也包含了数据仓库项目实施的方法论,资源,以及软硬件选型等等;而业务模型不仅仅是主题模型的确立,也包含了企业的发展战略,行业模本等等. 一个优秀的项目必定会兼顾业务需求和行业的标准两个方面,业务需求即包括用户提出的实际需求,也要客观分析它隐含的更深层次的需求,但是往往用户的需求是不明确的,需要加以提炼甚至在商务知识专家引导下加以引导升华,和用户一起进行需求分析工作;不能满足用户的需求,项目也就失去原本的意义了. 物理模型就像大厦的基础架构,就是通用的业界标准,无论是一座摩天大厦也好,还是茅草房也好,在架构师的眼里,他只是一所建筑,地基->层层建筑->封顶,这样的工序一样也不能少,关系到住户的安全,房屋的建筑质量也必须得以保证,唯一的区别是建筑的材料,地基是采用钢筋水泥还是石头,墙壁采用木质还是钢筋水泥或是砖头;当然材料和建筑细节还是会有区别的,视用户给出的成本而定;还有不可忽视的一点是,数据仓库的数据从几百GB到几十TB不等,即使支撑这些数据的RDBMS无论有多么强大,仍不可避免的要考虑到数据库的物理设计. 接下来,将详细阐述数据仓库概念模型(业务模型),逻辑模型,物理模型的意义. 概念模型设计 进行概念模型设计所要完成的工作是: 界定系统边界 确定主要的主题域及其内容

频谱分析仪的时域测量技术及其应用

性能频谱分析仪的时域测量技术及其应用 摘要:本文分析了高性能频谱分析仪的时域测量功能的原理,并给出其时域测量功能在调幅(AM)、调频(FM)、脉冲调制测试中的应用。比起通用的示波器,这种测量有其独特之处,它更好的表征信号的部分调制域特性。 关键字:高性能频谱分析仪; E4440; 时域测量 The Technology and Application of Time Domain Measurement of High Performance Spectrum Analyzer Abstract: This paper analyzes the principle of time domain measurement function of high performance spectrum analyzer and its use in Amplitude modulation(AM), Frequency modulation(FM) and pulse modulation test. Compared with usual oscillograph, this measurement function has its own advantages. It expresses some character of signal well in modulation domain. Key Words: high performance spectrum analyzer; E4440; time domain measurement

0 引言随着信号处理和DSP技术的不断发展,频谱分析仪的功能越来越强大。不仅仅在显示的频率范围和可操作性上有了长足的发展,而且测试的精度进一步提高和测试的功能越来越多。频谱分析仪发展到今天,不仅在频域测试中独领风骚,而且还具有一定的时域、调制域测试功能。 本文阐述了高性能频谱分析仪的时域测量功能的原理,以安捷伦的E4440高性能频谱分析仪为例,给出了高性能频谱分析仪时域测量功能在调幅、调频、脉冲调制测试中的应用。比起通用的使用示波器进行的时域测量,这种测量方式更好的表征了调制信号的某些调制特性。 1 高性能频谱分析仪时域测量原理 中频滤波器 图1扫频式频谱分析仪原理框图 总的来说,高性能频谱分析仪的时域测量功能相当于一个窄带通信接收机,它能显示在以中心频率为中心的带内频率的时域波形。这个功能仅仅是使得频谱分析仪的SPAN(跨度)设置为0Hz,从原理上来说只是频谱分析仪的一个小小的扩展应用。我们从频谱分析仪的原理图来说明这个测试的理论依据。 如图1所示,这是扫频式频谱分析仪的原理框图。当SPAN(跨度为0Hz)的时候,扫描控制器的控制信号不再是锯齿波,而变成一条水平线。我们知道,扫描控制器控制LCD显示轴的X轴,当它从水平线上扫的时候,x轴显示的就为时间了。另一方面,扫描控制器变成一条水平线的时候,LO的输出稳定,混频器后的输出信号经过一个通带为分辨力带宽的带通滤波器后,然后通过包络检波器检出信号的包络,控制LCD垂直轴显示信号幅度。这里有几点要说明的:第一,已调信号和LO信号进行谐波混频后,将有用信号频移到了3.6MHz 的中频上,然后通过一个中心频率为3.6MHz的中频滤波器滤出有用信号,再通过检波器让信号的幅值作为显示在相对频率(当SPAN为0Hz的时候,就是相对时间)的位置。最终在LCD显示上显示的是已调信号的包络,它已经滤去已调信号的载波。第二,中频滤波器在时域测量的时候,必须尽可能的加大它的分辨力带宽,这样能保证信号的完整性。 2 高性能频谱分析仪时域测量功能的应用 高性能的频谱分析仪,如安捷伦公司的E444X系列,都具有时域测量功能。这里,我们以安捷伦的高性能频谱分析仪E4440为例,说明它在AM、FM、脉冲调制信号的测试中应用。当频谱分析仪在Zero Span(跨度为0Hz)状态的时候,这时频谱分析仪为时域分析工作方式,等同于工作在中心频率,带宽为分辨力带宽(RBW)的接收机,它可以显示信号的包络波形,实现AM信号的解调。下面的三种应用都是源于这种时域测量功能。 2.1 时域测量功能在AM信号测试中的应用 使用频谱分析仪的时域测量功能可以获取已调AM信号解调的波形,AM信号的调制度和AM信号的调制频率。 测试条件: 使用信号源发出一个AM信号,调制波可以是正弦波、方波、锯齿波等等。 这里使用Agilent的E4438分别发出三个载波频率为1GHz、幅度为-10dbm,调制波为10kHz

相关文档
相关文档 最新文档