容“错”十篇

2024-09-11

容“错” 篇1

关键词:容错计算机,进程冗余,双模冗余,I/O容错,错误处理

0 引 言

随着银行事务处理、信息服务、金融计算等领域对计算机系统的广泛应用,对计算机系统可靠性的要求也越来越高[1]。作为提高计算机系统可靠性的重要手段,容错的含义是指在系统内部出现故障的情况下,计算机仍然能正确地执行指定算法[2]。高端容错计算机系统通常采用了较为健全的容错机制,如处理器锁步技术[3]、内存镜像技术[4]、多路径I/O技术[5]、N版本程序设计[6]等。以上这些常见的软硬件容错机制主要依据静态结构冗余原理实现,然而硬件层的冗余成本很高且实现复杂,应用软件层的冗余则不具有通用性。本系统力图解决现有硬件容错、软件容错技术存在的问题,本文提出了一种基于进程冗余的容错机制和策略,对关键进程构造双模冗余或多模冗余,采用进程间同步等手段确保冗余进程按照同样的执行逻辑运行,监控系统并对不同的错误进行相应的错误处理,以此提高系统的可靠性和可用性。

1 进程容错系统框架

1.1 进程容错系统总体架构

本文进程容错系统以SMP[3]架构中的多CPU为冗余硬件,构造冗余任务在独立的CPU组上并行执行,通过对冗余任务的执行数据进行比较实现检错,并使用降模、重启等机制完成错误恢复。系统总体架构如图1 所示,在Linux操作系统中添加容错容器,容错容器中的应用以冗余方式运行,由进程容错系统负责管理冗余任务分别在冗余硬件上独立执行,并控制任务同步、数据比较、错误检测和恢复[4]。

在容错容器中,一组冗余任务执行相同的功能代码,在其运行过程中,容错系统对其进行管理、同步和监控,并根据数据比较结果进行错误检测。容错容器外的任务仍以普通单模方式运行。当只有一个冗余进程时,系统属于双模冗余,此时系统基于比较技术,只能进行故障检测,需要辅以一定的错误处理来完成错误恢复;当冗余进程数为2个及以上时,系统属于多模冗余[5],此时系统基于表决技术,能进行故障检测和恢复。其中,双模冗余是基础,在双模冗余系统上稍作修改,即可实现多模冗余。本文重点研究双模冗余。

针对标准SMP和ccNUMA架构的系统设计功能模块是一致的,文中选择标准的SMP架构机器作为系统开发平台,进程容错管理系统总体框架如图1所示。针对ccNUMA平台略有不同,主要区别在硬件层,但系统各功能模块仍相同,只是冗余进程具体管理方式和出错处理等有所区别。因此本系统并不依赖硬件架构,可以方便地在多种平台架构中移植。

容错相关功能模块全部集中于操作系统核心层,主要包括容错进程管理模块、错误处理模块、I/O容错控制模块和监控管理模块等。

(1) 容错进程管理模块

该模块用于实现冗余进程全生命周期管理,包括冗余进程的创建、调度、同步、通信及销毁,使得原生进程及其冗余进程在有序执行原有逻辑的同时满足容错特性的需要。

(2) 错误处理模块

当通过同步比较检测到冗余进程的运行中发生错误时,错误处理模块进行故障类型诊断并根据预配置采取相应的处理方式,快速完成错误恢复。

(3) I/O容错控制模块

该模块负责容错系统内部数据与外部数据的格式转换和冗余控制,并辅助I/O操作进行同步比较。

(4) 监控管理模块

该模块包括运行于用户态的控制台和运行于内核态的监控管理模块。控制台提供给用户直观的操作界面,用户可通过控制台监测冗余进程运行状态,查看容错事件日志,对系统的主要参数进行配置等;控制台的所有数据通过与内核监控模块交互获得。

1.2 进程容错系统工作流程

进程容错系统工作流程如图2所示。用户通过容错控制台界面启动应用程序,打开容错开关(设置标志位ft_exec)进程容错系统为该应用程序创建一对进程(原生—冗余进程),这一对进程装载应用程序相同的执行代码,并开始在独立的CPU组上并行执行。

在同步协议控制下,原生—冗余进程对同时到达同步点,并开始同步,若其中某个进程在同步点上等待超时,则触发错误进入故障检测、错误处理。如果同步点上的操作为I/O操作,需要进行I/O转换,判断操作是否为写操作,若是则对原生—冗余进程对写出的数据进行比较,数据相同则认为执行正确,若比较数据不同则认为存在故障,进入故障检测、错误处理流程。若I/O操作为读操作,则I/O容错控制模块完成I/O接口的数据转换,并执行最终的实际功能操作。

若同步点上的操作为非I/O操作,则直接在同步点上进行状态一致性调整,如统一函数返回值,记录当前进程状态信息,完成本次同步。

2 进程容错系统软件设计与实现

2.1 容错进程管理模块的设计与实现

容错进程管理模块对fork、clone和vfork系统调用进行容错控制,在do_fork( )函数的基础上,增加了do_double_fork( ) 和do_ft_fork( ) 两个功能函数,实现了控制应用程序派生双模进程和双模进程派生各自子进程的功能。

如图3所示。在容错系统中,一个进程要派生子进程将会调用fork、clone或vfork系统调用中的一个,系统会首先根据ft_mak标志位判断当前进程是否是冗余进程,如果是,调用do_ft_fork( ) 函数创建冗余进程的子进程;如果否,则判断是否有容错标志ft_exec,如果有,表明需要容错,调用do_double_fork( )函数,派生冗余进程;如果不需要容错,调用系统中原有的do_fork( ) 函数,正常派生进程。通过上述控制,实现了不同情况下进程派生的需要。

do_double_fork( ) 函数用于冗余进程的创建,函数的入口参数与do_fork( )函数相同,所有经过容错程序入口提交的程序都会通过该函数创建冗余进程。由于它并不是被双模执行的,所以在其执行过程中不需要同步,仅仅是创建了具有对等关系的一对冗余进程。

do_ft_fork( ) 函数用于冗余进程创建子进程,它实现的功能是对原生—冗余进程同步fork系统调用,使它们各产生一个对应的子进程,并交换子进程的数据(pid和task_struct指针),为这两个子进程建立对等关系,调整其调度优先级,以区别于父进程,最后为两个子进程返回相同的pid。如图4所示。

当通过do_double_fork成功创建一对冗余进程或者通过do_ft_fork成功创建一对冗余子进程后,借助Linux提供的映像装载机制装载完全相同的可执行文件映像,即系统为原生—冗余进程配置同样的execve( ) 参数,使它们装载相同的应用程序代码并行执行。

通过对waitpid、wait4和do_exit系统调用进行容错控制,新增加一个ft_wait4系统调用,实现了原生—冗余进程的退出与清理。在原生—冗余进程执行结束或退出时,调用已进行容错修改的exit相关系统调用清理冗余进程信息和系统管理信息。对do_exit( )函数进行容错控制,主要是要保证冗余进程同步进入do_exit( )函数。在系统调用waitpid中,如果是容错进程,调用sys_ft_wait4( );如果是非容错进程,直接调用sys_wait4( )。

2.2 I/O容错控制模块设计与实现

在进程容错系统内部核心与外部设备之间存在一个软件实现的I/O接口层,完成系统内部数据与外部数据的转换。容错系统的I/O包括终端输入输出、磁盘文件读写以及网络数据收发等。根据不同的I/O种类,设计系统I/O容错控制模块结构主要包含两个子模块,磁盘/终端读写I/O控制和网络数据读写I/O控制。模块的结构示意图如图5所示。

(1) 磁盘/终端I/O容错控制模块

当发生I/O操作时,I/O容错控制模块捕获I/O操作并进行判断。如果是读操作,该子模块将从硬件设备中读取的数据复制为双份,分别送往系统内部的冗余进程;如果是写操作,则将冗余进程待写出的双份数据进行比较,如果比较结果正确,则将双份数据合并为一份写出到外部硬件设备。

无论是普通文件还是对应于终端的标准输入输出文件,在对其读写时都统一经过系统调用read( )和write( ),对应的内核函数sys_read( ) 和sys_write( ) 来完成,所以对sys_read( ) 和sys_write( ) 进行容错扩展后,同时适用于普通文件读写和终端读写。

(2) 网络I/O容错控制模块

若 I/O操作是网络数据接收操作,网络I/O模块将从网络上接收到的数据复制为双份,分别送往系统内部的原生进程—冗余进程;若是网络数据发送操作,则网络I/O模块将原生进程—冗余进程待发送的双份数据进行一致性比较,如果比较结果正确,则将双份数据合并为一份向网络发送。对于其他各类套接字相关操作,网络I/O容错控制模块使原生进程—冗余进程在这些操作上进行同步,共享一套网络通信环境。

在网络I/O容错控制模块中,可以将数据收集、分发功能植入socket中,将socket本身扩展为一个数据转换器,在BSD socket层完成进程同步、数据转换等功能。本文设计了一种共享socket的方法,当原生进程—冗余进程创建套接字时,让二者创建同一个socket结构并共享该socket,当进行数据收发等操作时,均通过此共享socket完成。这种方式不仅能高效地完成数据转换逻辑,而且可以避免下层网络协议的修改,大部分沿用Linux原有的网络协议栈内容,修改后的冗余进程面向连接的socket通信工作流程如图6所示。

2.3 错误处理模块设计与实现

错误处理是进程容错管理子系统中一个重要的功能模块,合理的错误处理机制是保证双模冗余进程高可靠性的关键。错误处理的目标是通过提供较为稳定的出错处理方案,能够对冗余进程带来的一些诸如数据不一致等错误进行处理,使系统中冗余进程的执行状态始终保持稳定,如图7所示。

(1) 错误检测

通过对原生—冗余进程执行状态和流程的监控来发现错误,主要包括瞬时错误和永久错误,其中永久错误主要指硬件故障,在本系统中,以CPU错误和内存错误为检测范畴。通过设置超时错误、冗余进程状态异常和中间数据一致性三种错误类型来检测冗余进程执行状态的异常,进一步发现瞬时错误和CPU错误等。在永久错误类型的检测上,由于冗余进程在独立的CPU上并行执行,通过超时和进程状态检测可以发现CPU错误;通过中间数据比较可以发现内存错误;结合相应的硬件故障检测机制,可以发现CPU错误。

(2) 错误处理

错误处理通过对出现错误的冗余进程按照适当的方案进行处理,使冗余进程按照正常的执行流程继续运行,且运行状态保持稳定,同时使系统中其他进程的执行状态不受错误影响。

基于冗余进程设计和实现的特点,主要采用降模和重建两种错误处理机制。降模主要针对通过超时和进程状态检测发现的瞬时错误和CPU错误,采取停止或结束错误进程,使对应的正常进程在单模模式下继续运行,保证执行流程的持续;重建主要针对通过中间数据比较发现的瞬时错误和内存错误,在检测到错误时及时重启服务,保证系统后续服务的稳定。

2.4 监控管理模块的设计与实现

监控管理模块包括运行于应用层的控制台和运行于内核中的监控管理模块。控制台提供给用户直观的操作界面,用户可通过控制台监测冗余进程运行状态,查看事件日志,对系统的主要参数进行配置等;控制台的所有数据通过与内核监控模块交互获得。显示进程信息包含显示所有进程信息和显示冗余进程信息两部分。根据显示对象的不同,显示的内容也有差别,具体划分如表1所示。

3 实验及结果分析

3.1 进程容错系统可用性测试

选择标准的SMP架构机器作为系统测试平台,处理器为Intel Core 2 Quad CPU Q6600 @2.40GHz,基于CentOS 5.5修改系统内核,修改后内核版本为Linux-2.6.28-ft。

Apache[8]是当今最流行的Web服务器端软件之一,可以将其作为一种典型的网络应用来验证进程容错管理系统。本测试选用的Apache服务器版本为2.2.14。

在容错测试机上以进程容错方式启动Apache Web服务器,并将测试的主页代码置于服务器上供外部访问。Apache服务器启动后,通过监控管理模块查看相关服务进程httpd。

通过对冗余进程、非冗余进程注入进程故障,结果表明对Apache服务进程容错后,系统对外服务的能力优于非容错方式,结果如表2所示。

3.2 进程容错系统性能测试

Web服务器的性能测试主要通过对其进行压力测试来实现。为确保测试结果准确客观,同时便于配置使用和测试分析,决定使用目前相对成熟的压力测试软件JMeter[9]进行测试,版本为2.3.4。

为模拟更加真实的压力测试,在容错测试机上分别以非容错方式和容错方式运行Apache服务器,而在另一台普通客户机上通过JMeter来测试服务器性能,并对非容错方式和容错方式的性能进行比较。同时,为了排除网络中干扰因素,采取“直连”的方式连接容错测试机和普通客户机。Apache按配置文件(httpd-mpm.conf)默认配置。

启动JMeter,分别测试100、200、300、400、500和600个线程,即模拟每秒有这些数目的用户访问;循环10次;Ramp-up period (in seconds)的值设为0,即并发请求。以非容错方式测试完后重启一次计算机,保证条件相同;对不同线程数的第一次测试结果不记,以扣除Apache初始化对象带来的误差。

以非容错方式和容错方式运行Apache进行测试。测试结果如表3、表4所示,其中Samples 为样本数目,表示总共发送到服务器的请求数目;Average为平均响应时间(ms);Throughput为服务器每单位时间处理的请求数;KB/sec表示每秒从服务器端接收到的数据量。

对比表3和表4测试结果,可以看出,以容错方式和非容错方式运行Apache的测试情况基本相同。进一步对比分析主要测试指标——平均响应时间,如图8所示。

综合以上测试结果可知,容错系统的最大性能损失约19%,平均性能损失在15%,能够满足系统正常服务需求。

4 结 语

本文给出了一种基于高端计算机系统的进程容错系统的设计和实现方法,设计了基于进程冗余的容错策略和方法,并实现了进程容错系统的原型系统,对关键进程进行冗余,并通过同步机制保证进程的正确执行,并对系统监控进行相应的错误处理。实验证明该方法性能损耗小,并能有效地提高系统的可靠性,同时避免了硬件定制的复杂性,并对应用程序和用户透明。

参考文献

[1]Cheng Zhuo,Yang Xiaohu.High available software architecture based on cluster technology[C]//IEEE Region10Conference on Comput-ers,2002:327-330.

[2]杨孝宗.容错技术与STRATUS容错计算机[M].哈尔滨:哈尔滨工业大学出版社,1993:1-3.

[3]Asanovic K,Bodik R,Demmel J,et al.A view of the parallel computing landscape[J].Commun.ACM,2009,52(10):56-67.

[4]Verghese B,Devine S,Gupta A,et al.Operating system support for im-proving data locality on CC-NUMA compute servers[C]//Proc.of the 7th ASPLOS,ACM,New York,1996:279-289.

[5]Yuichiro Ajima,Shinji Sumimoto,Toshiyuki Shimizu.Tofu:A6D Mesh/Torus Interconnect for Exascale Computers[J].Computer,2009,42(11):36-40.

[6]钟读杭,齐治昌,徐锡山.基于N版本程序设计的Web服务组合可靠性优化[J].计算机工程与科学,2008,30(6):115-118.

[7]Apache HTTP Server[OL].2011-05.http://httpd.apache.org/.

容“错” 篇2

关键词:故障,永磁同步电机驱动系统,容错

1 引言

永磁电动机因其体积小、功率密度高和效率高而被广泛应用于动力驱动系统, 逆变器作为驱动系统中的一部分有着很重要的作用, 但由于电力电子器件本身有很多缺点, 控制起来也比较复杂, 使逆变器在整个控制系统中最容易出现故障。最新研究表明[1]:在工业应用中38%的电力设备故障发生在变频调速系统中, 而变频调速系统中功率变换器的故障占整个驱动系统故障的82.5%, 所以故障时对系统采取容错策略十分重要。为了提高系统的可靠性, 已有不少研究者对故障系统容错策略展开研究。本文首先介绍了驱动系统常见故障, 然后对国内外研究者提出的容错策略进行阐述, 并对其进行了分类。分析各容错策略优缺点, 对容错策略的发展趋势做出展望。

2 永磁同步电机驱动系统常见故障

如图1所示为逆变器驱动的电动机变频调速系统, 逆变器供电的电动机驱动系统的故障主要存在以下几种情况[2]。

1功率开关元件断路故障;2功率开关元件短路故障;3同一桥臂两开关元件同时断路故障。PMSM驱动系统中除了在逆变器中发生的这几个常见故障外, 由于各种其它原因也会造成电机定子一相绕组断路发生故障。不管是逆变器故障还是电机绕组故障, 都将使驱动系统不能正常工作, 在一般工业场合会影响生产, 而在航空、军事等重要场合, 将造成灾难性事故。驱动系统出现故障后, 首先要采取故障后保护措施, 不使故障扩大;其次就要利用接触器等开关元件, 切除故障支路, 进行拓扑重组, 为容错控制做好准备。

3 容错控制策略

针对驱动系统中常发生的故障, 研究提高驱动系统的安全性和可靠性尤为重要。1980年就有研究者提出了采用多个独立的驱动单元供电的多相冗余结构, 包括两套定子绕组与两套逆变器结构的控制系统, 这种结构确实一定程度上提高了驱动系统的安全性和可靠性, 但是增加了系统结构的复杂性和成本费用[3,4]。除此之外, 国内外研究者针对故障系统设计了多种容错策略并进行了研究。具体的设计思路大致可以分为以下3类:软件容错、开关冗余容错和桥臂冗余容错, 本文将系统地阐述这几类容错策略。

3.1 软件容错

当发生某一故障时, 系统会造成断相运行, 导致负序磁场产生低频谐波, 引起转矩抖动等, 文献[5]提出了通过软件控制的软件容错策略, 对原有系统进行补偿, 即通过将适当幅值与相位的奇次谐波电压注入到电机绕组输入端的方法对谐波转矩进行补偿, 抵消谐波转矩的控制方法。这类容错不需要对系统进行容错拓扑, 适合高惯性转矩工业的应用场合, 但要对调制波形中注入更高次的奇次谐波进行复杂计算, 且注入的谐波电压会产生谐波电流, 从而导致相应的相电流升高。

3.2 开关冗余容错策略

此类容错策略是将逆变器主电路重构后在容错状态下运行, 故障时通过切除故障开关, 然后利用剩余的开关器件实现减容下的不间断运行。常见的此类容错策略又有两种方案:一种方案如图2所示, 直流母线间两串联电容的中点通过一个双向晶闸管与电机中性点相连。正常工作时, 晶闸管断开, 当逆变器某一桥臂发生故障时, 切除故障相同时触发双向晶闸管导通, 使之构成四开关两相系统。另一种方案如图3所示, 电机每相绕组通过一个双向晶闸管与直流母线电容中点连接。正常工作时晶闸管断开, 当某一桥臂发生故障时, 切除故障支路同时触发相应双向晶闸管导通, 使之构成三相四开关系统。

开关冗余容错策略先在异步电机故障控制上有所研究。张兰红教授先后提出异步电机故障下的这两种四开关容错策略, 异步电机四开关容错下的直接转矩控制, 为后面研究者研究同步系统容错控制奠定了基础[6,7,8]。

文献[9,10,11,12,13,14]都是系统建立在开关冗余容错策略上, 通过容错拓扑后, 对其进行分析、仿真研究。文献中都建立了容错后系统电压数学模型。

对于四开关两相系统, 若以Sb、Sc表示B、C两相的开关状态, 上管导通为1, 下管导通为0, 设理想状况下母线电容容量无穷大, 其电压均值为UDC/2, 四开关两相系统中B、C两相电压可以表示为:

电压空间矢量可表示为:

转换到两相静止坐标系得到电压矢量的αβ分量为:

同样, 对于四开关三相系统, 电机三相电压为:

空间电压矢量为:

与式 (2) 相同, 所以电压矢量在两相静止坐标系下的分量也相同, 如式 (3) 。由于它们都是四开关系统, 都只有4个空间矢量, 由上述公式可得它们最大平均电压矢量为

文献[9]针对PMSM驱动系统常见故障提出了这两种容错策略, 并对容错后的两种四开关逆变器进行了建模分析, 对四开关逆变器供电系统的电压、电流定额进行了讨论, 指出两种四开关逆变器均只能提供四个幅值不等的非零电压空间矢量, 且仅能提供一半的额定电压;两相四开关系统中电流矢量的幅值增大为原来的3倍, 且相位偏移30°。最后提出新型直接转矩控制策略, 并进行仿真实验, 结果表明, 基于容错逆变器的PMSM系统在故障状态下采用新型逆变器拓扑结构以及新型直接转矩控制策略后, 可持续稳定运行, 并保持了良好的动态性能。

文献[10]针对PMSM驱动系统故障四开关三相容错拓扑, 通过重新定义电压矢量, 得到式 (3) 所示的电压空间矢量, 导出所需控制的的开关表, 并以此为基础建立相应的系统模型, 仿真分析。通过仿真和实验验证了三相四开关的PMSM直接转矩控制能稳定运行, 并有较好的转矩动态控制性能, 是直接转矩系统的有效容错运行方式。

文献[11]针对PMSM系统在逆变器故障时的容错控制, 讨论了容错逆变器的拓扑结构, 分析了六开关三相逆变器和四开关三相逆变器驱动系统输出电压空间矢量及其对系统性能的影响。首先讨论了容错逆变器的拓扑结构, 之后讨论了该逆变器故障前后驱动系统的电压空间矢量, 并给出系统容错运行前后的性能。设计了逆变器故障容错重构操作的辅助电路, 并基于PMSM直接转矩控制系统进行了模拟逆变器故障实验。结果表明, 采用所设计的容错辅助电路可实现系统在逆变器故障时的不间断容错运行, 同时指出故障后容错重构系统的性能将有所降低。

文献[12]在四开关容错拓扑下, 深入分析四开关逆变器运行原理, 通过容错拓扑研究四开关逆变器的空间矢量脉宽调制 (space vector pulse width modulation, SVPWM) 控制方法, 揭示四开关SVP-WM控制的本质是以2路相位相差60°电角度的正弦波为隐含调制函数的正弦脉宽调制 (sinusoidal pulse width modulation, SPWM) 控制。为减少器件的开关次数, 提出四开关SVPWM的“七段式”实现方式。指出四开关SVPWM最大线性调制比只有六开关时的一半, 为提高直流电源电压的利用率, 提出基于补偿电压矢量的四开关逆变器SVPWM调制方法, 并得到了仿真和实验的验证。其中, 四开关SVPWM的算法流程图如图4所示。

文献[13]是针对四开关拓扑由于电压矢量减少造成的严重转矩脉动, 采用了一种新型空间矢量调制 (SVM) 方法, 分析了等效零矢量模拟技术, 将传统SVPWM调制中的“劈零”思想引入到空间矢量的合成上并进行仿真。通过在电压空间矢量调制中将零矢量分散施加的方式, 在每个周期中仅选用三个矢量, 并固定选用位于0°和180°的两个电压矢量来等效零矢量, 最后通过仿真实验验证了这种基于劈零技术的新型SVW方案四开关逆变器不仅可极大地减小转矩脉动, 还能保持DTC系统固有的优良动态性能, 是一种具有实用前景的四开关逆变器供电PMSM DTC系统控制策略。

文献[14]为了提高系统的可靠性, 针对系统中的功率管和位置传感器等脆弱环节, 提出一种容错逆变器-永磁同步电动机无位置控制系统。系统中的逆变器采用四开关容错策略, 建立自适应滑模观测器来估算电机转子位置和转速, 实现永磁同步电动机的无位置传感器控制。为减少四开关逆变器的输出谐波, 对其SVPWM控制策略进行研究分析, 并对故障前后运行状况进行对比, 仿真和实验结果证明所提出系统能够实现功率管开路故障后的可靠运行。

四开关两相拓扑中增加一个双向晶闸管, 只需要增加一路驱动, 结构特别简单。但它只适用于电机为星型连接的电机, 而四开关三相拓扑增加了三个双向晶闸管, 需增加三路驱动, 相比四开关两相拓扑结构要复杂, 但它对电机接法没有限制。两种容错都可用于矢量控制、直接转矩控制。

3.3 桥臂冗余容错策略

3.3.1 单桥臂冗余容错策略

单桥臂冗余容错拓扑如图5所示, 就是在原系统基础上增加一个桥臂, 通过一个双向晶闸管与电机每相绕组相连。正常工作时, 双向晶闸管断开, 当逆变器某一桥臂发生故障时, 将故障桥臂隔离的同时通过触发相应的双向晶闸管导通备用桥臂, 从而替换故障桥臂继续工作[15,16]。

同样以Sa、Sb、Sc为三相桥臂的通断状态。假设a相发生故障, 容错拓扑后第四桥臂替代a相桥臂, 开关状态由Sn表示。则拓扑后系统空间电压矢量为:

由式 (6) 可知, 拓扑后系统与原系统一样。

文献[16]研究并实验验证了当逆变器故障发生在永磁同步电机驱动系统时容错策略的有效性。这个容错策略的基本思想是通过冗余桥臂来替换故障桥臂工作。研究表明, 在该容错策略下, 允许驱动系统在面临逆变器故障时仍能保持平稳的转矩产生。这种容错拓扑的优势是拓扑后系统结构与原来相同, 所以控制策略也相同, 可采用矢量控制、直接转矩控制、PWM控制, 但缺点是需要冗余开关器件, 在无故障时处于闲置状态, 降低了系统的硬件利用率。

3.3.2 三相四桥臂容错策略

三相四桥臂容错拓扑如图6所示, 电机绕组中性点通过一个双向晶闸管与第四桥臂相连。正常情况下, 双向晶闸管断开, 当某一桥臂或者某相绕组发生故障时, 将其隔离同时触发双向晶闸管导通第四桥臂使之成为两相三桥臂系统运行[17,18,19,20,21,22,23]。

以Sb、Sc、Sn表示B、C两相及第四桥臂逆变器的开关状态, 上管导通为1, 下管导通为0, 则系统B、C两相电压为:

其空间电压矢量为:

转化到两相静止坐标系得电压矢量分量为:

文文献献[[1177]]针针对对电电机机逆逆变变器器或或者者电电机机某某相相绕绕组组发发生故障时, 通过三相四桥臂容错控制策略, 两相电机仍能稳定运行。研究者首先建立故障时电机的数学模型, 对电机三相参考电流值重新构造, 保持总的电流空间矢量不变, 从而可以同时容错一相、两相或三相, 发生在逆变器上管或下管的无驱动故障, 但不能对上管与下管同时出现的故障及中性线上的故障容错。最后通过实验验证了该策略的可靠性。文献中提出的系统a相故障下模型为:

该拓扑也只能用于星型联接带中性点的场合。

文献[18]针对常见故障, 通过检测和比较控制模块来检测各桥臂的输出电流信号与SVPWM模块的开关信号是否一致来判断故障是否发生, 故障发生后隔离故障, 采用三相四桥臂拓扑并通过反馈补偿设计, 来提高故障后转矩的稳定性。补偿转矩模块的反馈电压矢量为:

故障后, 此补偿模块能使电流环产生的稳恒参考电压矢量u″dq=udq, 避免转矩的正弦波动。

文献[19]针对故障电机在三相四桥臂容错策略下进行直接转矩控制。与正常三相系统直接转矩控制相比, 文献提出了新的磁链估算方法, 并对其进行仿真实验。不但分析了低通滤波器、时间延迟和反电动势波形带来的影响, 还对比了系统正常运行与系统采用容错控制后的仿真结果, 更直观地得到三相四桥臂容错策略控制性能。最后, 通过实验加以论证。文献提出的新的磁链估算方法如下:

其中: (-2MIα+Ψrα) 为a相到α坐标系的磁链补偿。

文献[20]针对驱动系统三相四桥臂容错策略下的直接转矩控制, 提出了一种能减小转矩脉动的方法。通过利用零压矢量, 近似保持转矩不变, 从而有效地抑制转矩的脉动。通过对故障电机建模仿真, 通过对比加入零压矢量前后转矩脉动的大小, 来证实零压矢量在直接转矩控制中抑制脉动的有效性。

上述几种容错方案对应用在逆变器故障的研究比较多, 针对电机本体故障研究较少。三相四桥臂容错则不仅针对逆变器故障, 在电动机绕组发生故障时, 三相四桥臂容错同样适用, 与之前的容错控制方案相比, 采用三相四桥臂容错控制方案时, 电机中性点连接的不是直流电源的电容中点, 而是新增加的第四桥臂, 这样不会使直流电源的中性点发生失衡, 更不用考虑电容选取时的超裕度问题。但是三相四桥臂容错只适用于星型联接带中性点的场合, 且在无故障时处于闲置状态, 降低了系统的硬件利用率。

4 结束语

拟误之趣,容错之阈 篇3

关键词:言语交际容错机制 言语交际容错阈 编码拟误 语言文字规范化 网络语言

一、引言

最近在网上流行起这样一群词句:郁闷、话说、沙发、板砖、东东、版猪、斑竹、竹叶、果酱、水饺、有木有、你妈妈喊你回家吃饭、哥只是个传说、这事不能细说、……做了一个艰难的决定,这种词语被统称为“编码拟误”现象。这种“编码拟误”现象,也可统称为超常语言组合——有超常语形语义组合,也有超常语法组合形式,它们在语义上或在语法上有意识地偏离主流语言常规,但在语用上,却往往具有某种特殊的表达效果。

二、编码拟误现象分类

编码拟误模拟的错误有不同类别,常见的有五种,一是模拟常见打字错误;二是模拟不规范语法现象;三是模拟方言;四是模拟童语;五是模拟外语风格。

1 模拟常见打字错误

由于电脑输入法对重码优先设置的原因,使得有些词语经常被误选,当它们成为使用这种输入法的打字的网友们普遍性的常见的打字错误后,便被人们有意识地编码拟误。如:

★网友A:嘎嘎!斑竹锅锅真油墨,笑四偶了!(咯咯!版主哥哥真幽默,笑死我了!)

★网友B:荷荷,果酱乐!我要水饺乐,先下乐,88!(呵呵,过奖了!我要睡觉了,先下了,拜拜!)

2 模拟不规范语法现象

网络文字交流中,有些网友起初也许是因为语文水平不高,会出现一些用词不当或搭配不当之类的语法错误,有人大概觉得有趣而模仿打趣他,久而久之便流传开了。例如:

★强帖啊~!观点很独特的说。——抢个沙发先!(写得很棒的帖子啊!观点很独特——先抢个沙。)

3 模拟方言

有些方言由于在电影电视或春晚小品节目中经常使用,逐渐成为大家熟悉的类似强势方言的地位,在网络打字交流中,便有人模仿方言语音或方言词汇,来自我调侃。比如:

★网友A:今天为什么米有人唱歌?也米有人上管?(今天为什么没有人唱歌?也没有人上管?)

★网友B:偶母鸡拉!(我不知道呀!)

4 模拟童语

网络使人变得年轻。在网络交流中,模拟童语的现象也非常普遍,因此产生了一些像叠音一类的“童化”的词语和称呼方式,成为打趣对方或自我调侃的特殊语词。比如:

★介系什摸东东呀?让偶看一下下。哦,系不系帅锅的片片呀?好漂漂哦!(这是什么东西呀?让我看一下。哦,是不是帅哥的照片呀?好漂亮哦!)

5 模拟外语风格

网络交流中有时会夹杂借用一些外语词汇或语法,这种不中不西的表达有时是因外语输入更方便快捷,同时具有特别的风味。比如:

★今天是你生日哦!猪你生日快乐!还配波斯得吐油!(今天是你生日哦,祝你生日快乐!Happy birthday to you!)

除了以上常见的五种情况外,还有通过标点符号超常使用来模拟口语效果的一类。比如:

★这是神马世道!道、道、道、~……~……!(这是什么世道!……回声)

★%#Y%~★★##……无语。(表示不知所云的符号……不知说什么好。)

三、编码拟误的语用价值

网络文字交流中的“编码拟误”现象,是具有一定的语用价值的修辞现象,能收到特殊的修辞表达效果。如语言陌生化效果、语言谐趣化效果、语言个性化效果。而这些特殊表达效果也正是某些网络语能流行的主要原因之一。

1 语言陌生化效果

求新求异是语言表达中的普遍心理,网络交流编码拟误,在很大程度上是为了用超常的语言组合来达到一种新颖别致的陌生化效果,满足自己的这种心理需求。如:用“貌似”来取代“好像”;用“沙发”来比喻第一个回帖;用“板砖”来代指批评主帖的意见等等,都比主流语言固有的词语更加生动活泼、新颖别致。

2 语言谐趣化效果

网络交流大多数情况下是一种非正式的书面交流,网友之间熟悉之后,多半会以轻松随意的方式追求一种愉快的氛围,或相互打趣,或自我调侃。于是,便产生了许多巧妙的谐音词。如:大片子(大骗子)、跑牛(泡妞)、新蚊连啵(新闻联播)、内牛满面(泪流满面)、围脖(微博)、果酱(过奖)、菌男(俊男)、霉女(美女)、帅哥(帅锅)。

还有故意用他人出现过的用词不当或语法不当的笑料,来调节气氛的。如前面举过的“严重同意楼上的!再如:“以迅雷不及掩耳盗铃之势……”

这些富有幽默感的词语运用于聊天中,增加了语言的趣味和表现力。而且这些语词大都是谐音拟误的词语,一般都具有“褒词贬化”或“雅词俗化”的共性。

3 语言个性化效果

网络交流虽然大多是隔着屏幕的虚拟交往,但同样有每个人各自不同性格、不同文化素养的表现需要。比如,聊天时同样是笑,不同的人会打出不同的字来表示自己在笑,表现出不同的个性特点:

“哈哈”:率真或爽朗;

“呵呵”:文雅或稳重;

“荷荷”,容易让人联想到“荷花”,故适合淑女们用;

“嘎嘎”:坏笑,另也有清脆悦耳的拟音效果,即文学作品中说的“银铃般的笑声”;

“嘻嘻”:调皮而可爱;

四、编码拟误与言语交际容错阈

所谓言语交际容错阈,是指在言语交际中,当编码语义所指错误时,解码能够纠错,其纠错的限度或范围,即容错阈。

编码拟误的前提,是所拟之误都是显而易见之误,至少是在解码者容错阈之内的“误”,这样,解码者才知道编码者是在拟误,而不是失误。因此,用笔者的“言语交际容错阈”理论来说,编码拟误之误,必须是已经进入集体容错阈的语误,编码拟误的使用,其实是建立在拟误材料已进入集体容错阈的基础之上的,如果违反这个原则,则将成为真正的语误,或不为人解,或为人误解。

前文所举的用例,大多数在特定的网络语境下,都具备言语交际容错的条件,网友们第一次看到时,通过上下文的分析,一般都能猜解出其拟误之意;而少数用例虽然初次接触可能会有些费解,但至少能让人意识到它是一种超常语言组合,因此,解码者的容错机制会处于被激活状态,不会等闲视之,最终经过分析推理或查问,亦能得出它的正解含义。

当然,也有些网络用语来历过于复杂,其语义只有骨灰级的网民才懂,而且知其然还不一定知其所以然,例如“的是”(或作“底是”“滴是”),笔者也是分析加咨询,才明白大概是“的确是”的缩略。

实际上,在网络语的发展过程中,不乏昙花一现之例,而究其原因,之所以会被自然淘汰,一般都是因其最终未能进入集体容错阈,而失去生存的基础。

浅谈“容错纠错机制” 篇4

李克强总理在今年的政府工作报告中说到:“健全激励机制和容错纠错机制,给改革创新者撑腰鼓劲,让广大干部愿干事、敢干事、能干成事。”这一句话对于广大基层干部而言,犹如一颗“定心丸”。何谓“容错机制”?这本是工程设计中的一个术语,借用到干部管理中来,表达的是,对那些愿干事、敢干事、能干成事的官员,在改革创新的道路上所犯下的错误组织要宽容。其目的在于打造宽松环境,激发官员们改革创新的热情,让改革创新者轻装上阵,一心一意推进改革,心无旁骛从事创新。

当前社会改革环境不够宽松,部分干部滋生“多干多错、少干少错、不干不错”的心理现状,建立健全容错纠错机制的提出,其目的就是为了改变这种“不敢作为”的情况,让干部不再畏首畏尾,成为一名“能作为、敢作为”称职干部。但在这一机制的具体操作中,却有很多问题值得我们进一步思考和探索。

一、保证容错机制的民主化、科学化。

“容错”虽然是针对干部的,但是在制定具体准则时,应广泛听取群众的心声。各地方可根据地方实际,通过本辖区统一发放调查问卷、召开街道、村级干部座谈会等方式,重点围绕建立党员干部容错纠错机制的必要性和可行性、怎样甄别错误、怎样具体纠正错误等问题进行探讨,收集意见和建议,并形成调研报告,最后在此基础上建立党员干部容错纠错机制的实施办法,通过调研保证这一机制建立的民主性和科学性。

二、明确“错误”细则。

如何避免容错免责成为干部违法乱纪的“保护伞”,如何有效地保护创新探索者的积极性,首先我们应该从目的、方向,看其行为的出发点是否为了改革发展这几个方面来甄别“错误”。要把干部在推进改革中因缺乏经验、先行先试出现的失误和错误,同明知故犯的违纪违法行为区分开来。其次,“错误”发生后,对于党员干部在改革创新中出现失误失败是对其从轻、免予问责及时补救,都需进行具体的细化,并制定纠错办法,让“纠错”有据可依。

三、接受群众监督。

基于“容错纠错机制”的特殊性,政府应在出台容错纠错细则后,在各大媒体进行公开,讲解容错纠错机制内涵,避免群众对于这一机制的误解,让广大群众明白这一机制的建立是为了保护党员干部在改革创新中的积极性,而非属包庇政府官员的违规行为。当启动了容错机制后,政府应公开容错纠错事情来龙去脉,给干部和群众一个交代,接受干部群众监督。

容“错” 篇5

1 容错并行虚拟机原型系统的体系结构

FTPVM原型系统体系结构如图1所示。其中SPTC (single processes tree checkpo inting) 单元是在LINUX操作内核内实现单进程树检查点设置的模块。整个系统建立在一个由PC机组成的集群之上。在集群系统中实现检查点卷回恢复技术时, 应该采用镜像平均存储策略, 即以一定的原则选择备份机, 使各节点的镜像节点是均衡分布的, 这样既保证负载均衡, 又避免了瓶颈, 能够更好地实现容错。

2 容错并行虚拟机原型系统的实现

2.1 检查点的恢复

在发生故障后, 检查点的卷回恢复过程可以分为两个阶段:派生阶段和重新加入阶段。

第一阶段:派生阶段。M_pvmd (pvmd) 读取全局检查点文件, 根据文件提供的信息分别在备份节点和其他正常节点机上重新启动用户进程, 重新启动用户进程的过程就是根据单进程检查点文件卷回恢复进程到上一个检查点时刻继续执行。

第二阶段:重新加入阶段。在各个进程成功的卷回恢复后, 重新加入到并行虚拟机PVM中, 但这时还不能马上恢复计算任务。所其中涉及到的主要数据结构如下描述。

(1) Pvmgs返回消息GSLS的结构。

int ngroups//任务组总数

GROUP_STRUCT*groups//存放任务组信息的数组

(2) 同步请求消息DXB_SYN的结构。

int ntids//同步任务数

int*t ids//存放同步任务TID的数组

(3) 任务重新加入PVM消息DXB_RJN的结构。

int otid//任务最早的任务标识符

int ct id//任务当前的任务标识符

(4) 消息路由表更新消息DXB_LST的结构。

int count//表中元素的个数

int otids[count]//由最早的任务标识符tid组成的表

int ntids[count]//由最新的任务标识符tid组成的表

2.2 故障检测和处理

故障在这里主要是指节点机故障, 同时我们假定节点机发生故障和节点机不可达属于同一种情况。在FTPVM原型系统中沿用了PVM原有的故障检测方法。PVM原有的故障检测方法非常巧妙, 它结合心跳法和捎带法两者的优点, 能够及时地检测节点机的故障, 同时又不会明显增加系统的负担[2]。在节点机之间的一般通信中, 即pvmd-pvmd之间的一般通信中, 如果发送的某个消息在规定的时间内无应答, 则可以断定目的节点故障。

PVM中断定一个节点机故障所需要的时间同具体的应用相关。在通信密集型应用中, 主要由D D M I N T I M E O U T决定:在计算密集型应用中, 主要由DDPINGTIME决定。D D M I N T I M E O U T等于D D M I N R E T R I E S*D D M A X R T T*。其中D D M I N R E T R I E S是pvmd-pvmd通信中的最小重发次数, 默认值为10;DDMAXRTT是pvmd-pvmd通信中的最大等待时间, 默认值为9秒;是一个系数, 默认值为2。所以在默认情况下, DDMI N T I M E O U T等于1 8 0秒。

FTPVM原型系统的节点机故障处理是在PVM原有的故障处理之上新增加了任务检查点恢复模块。故障处理模块的算法描述如下。

3 结语

并行虚拟机PVM是当今最流行的并行计算环境之一, 本文在保留原有PVM优点的基础之上, 提出了融入检查点技术的FTPVM原型系统的设计方案。FTPVM系统都能够自动采用检查点卷回恢复CRR技术在集群内恢复故障进程, 并且得到正确的计算结果。

参考文献

[1]汪东升.一种基于检查点的卷回恢复与进程迁移系统[J].软件学报, 2007, 10 (1) :68~73.

电力机车系统容错技术研究及应用 篇6

电力机车是运用于铁路市场这样一个特殊领域的大型机电产品, 其系统的安全性和可靠性是保证铁路运营秩序正常的首要前提。为了提高系统的可靠性, 满足用户对机车续运输生产的要求, 一般会在关键系统的设计中采取可靠性设计, 其中容错技术是提高机车可用性的重要途径。本文就电力机车系统设计中常用的容错技术运用进行了一些简单的总结和分析。

1 容错技术介绍

容错就是容许错误, 是指对于一个系统, 在其内部某个或多个关键部分发生故障时, 能够自动地进行检测与诊断, 并采取相应措施, 保证系统的功能仍保持正常, 或牺牲性能来保证设备在可接受范围内继续工作。

容错技术的实现方法主要是冗余, 通过配置多余的同等功能的部件, 并通过一定的冗余逻辑使它们协调的同步运行, 使系统应用功能的实现得到多重保证。冗余功能概括起来有硬件冗余、信息冗余、时间冗余和软件冗余, 它们最终在系统中体现为硬件冗余和软件冗余。各种冗余要有机地相互配合使用才能达到超高可靠性目标。

目前在电力机车领域最常用的为双机系统冗余容错, 例如双CCU的热备冗余、主电路双受流支路冗余、辅助电路系统双支路互为冗余、双总线冗余 (WTB、MVB) 等, 基本原理示意结构图如图1所示。

2 机车主要容错功能的实现

容错设计的目的就是降低失效率, 提高整个机车关键系统的平均故障间隔时间。对于应用在电力机车上的关键系统或部件进行冗余配置是十分必要的, 如主电路、辅助电路、控制电源以及网络控制系统等都需要进行冗余配置, 为此以下进行一一介绍。

2.1 主电路冗余设计

机车主电路的冗余设计主要体现在:网侧电路受流装置冗余和机车动力单元按比例冗余。

2.1.1 受电冗余

国内主流的和谐系列电力机车车型, 不论是单台机车还是双节固定编组构成的八轴机车车顶均配置了两架受电弓, 同时配上相应的控制电路和软件逻辑设计, 可实现机车受流功能的冗余。

通常机车上会设置升弓模式的选择开关, 一般有“前弓”“自动”“后弓”“双弓”等选择位, 具体功能配置由设计者根据用户的要求而设定。当选择开关位于“前弓位”, 表明占用端的受电弓升起;选择开关位于“后弓位”, 表明非占用端的受电弓升起;选择开关位于“双弓位”, 表明两端的受电弓均升起。在正常运用时, 一般选择“自动”位, 表明远离占用端的受电弓升起, 当高压回路出现故障时, 机车网络控制系统会根据设定逻辑进行判断, 自动选择一架最合适的受电弓配置。

2.1.2 动力冗余

动力冗余就是指电力机车在相关部件和子系统故障时, 可能会导致整车散失动力, 但是通过相应硬件或者软件等手段实现容错控制, 使得机车能够通过人工或者系统自动隔离故障电路, 切除故障支路的牵引电机, 但仍能保证机车其余牵引电机正常运转, 维持机车正常工作。在电机功率及其牵引制动特性可允许发挥的条件下, 机车控制系统将机车所需的动力进行重新分配, 将损失的动力通过正常工作的电机补偿。

机车动力容错冗余设计的灵活性与机车的主电路结果有很大关系, 变流器主电路完全独立最优, 如图2所示。

2.2 辅助电路冗余设计

电力机车辅助电气系统主要由辅助电源、辅助机组以及辅助设施构成, 其主要作用是向牵引风机、冷却塔风机、变流器风机、空调等负载供电, 冷却牵引系统核心部件、空气制动系统提供风源, 调节司乘人员工作区气候。辅助电路的正常工作与否直接影响到机车的工作状态, 是机车稳定、安全运行的关键。因此, 机车制造厂商会根据相关规定以及车型自身的具体情况在辅助电路中配置合适的冗余电路, 从而提高机车的可靠性。

目前, 和谐1型系列的机车基本按照图3所示的辅助电路结构进行设置, 分为双重冗余结构:辅助变流器输出冗余和滤波隔离电路输出冗余。当辅助变流器、滤波隔离电路其中任一故障时, 机车控制系统通过故障检测合理配置10 km、11 km、12km、20 km、21 km以及22 km接触器的分合, 灵活隔离相关故障回路, 可实现辅助电路冗余, 从而保证机车连续正常运用, 提高机车的可靠性。

2.3 控制电源电路冗余设计

控制系统电源由蓄电池、蓄电池充电机及其配电系统组成, 为控制系统提供直流110 V电源。电力机车控制电源的冗余包括电源模块冗余和扩展供电冗余两个方面的内容。

电源模块冗余是指机车控制电源柜内采用多组独立的参数规格相同的DC110 V电源模块并联, 同时给控制电路负载供电和蓄电池充电, 当其中一组或几组模块故障时, 控制电源管理系统自动隔离该模块, 其他DC110 V模块仍能保持机车控制系统正常供电和蓄电池正常充电。此类冗余设计中电源模块的冗余量由设计者根据实际应用情况而定。

扩展供电冗余是指控制电源故障模块达到一定数量时导致机车控制系统负载不能正常工作, 必须由其他电源进行供电的冗余方式。在电力机车上一般会有如下几种方式进行扩展供电冗余: (1) 对于双节固定重联机车, 如有一节机车充电机出现故障, 可以通过人工手动闭合直流电源重联开关或机车控制系统自动转换实现机车控制电源重联, 使得另一节机车充电机能同时两节机车供电, 但充电机的供电容量在设计时应考虑满足两节机车的直流负载正常工作; (2) 对于单节无重联机车或者机车所有控制电源柜均故障的情况下, 可由蓄电池维持机车暂时运行。

2.4 网络控制系统冗余设计

目前国内机车主要采用以下四种网络控制系统平台:SI-BAS-32、World FIP、TCMS和DTECS, 均为两级总线结构。如HXD1系列机车, 该系列机车中HXD1和HXD1B机车采用西门子的SIBAS-32平台, 后续设计的HXD1C以及国产化HXD1机车等均采用时代电气的DTECS平台。两者通信采用符合IEC 61375标准的TCN网络, 由WTB列车总线、MVB车辆总线两级构成。

网络控制系统一般由中央控制模块和IO模块构成, 以国产化HXD1型机车的网络控制系统为例, 其网络拓扑结构如图4所示。

为了确保网络控制系统的安全可靠, 设计者会根据平台的特点以及机车实际需要进行相应的冗余设计配置。国产化HXD1型电力机车的控制冗余功能具体表现如下。

2.4.1 中央控制单元CCU热备冗余

每节机车设有两套以热备方式工作的中央控制单元CCU, 一套为主控制环节 (主控机) , 一套为备用控制环节 (辅控机) 。当主控机发生故障时, 系统必须在规定的时间内自动切换到辅控机上, 切换完成后恢复机车原来工作状态, 不能损失功能和动力。一节机车的CCU主从进行周期性转换, 以确保该节机车的可靠性。

2.4.2 WTB/MVB总线双通道冗余

机车上WTB总线和MVB总线均有两路总线构成, 形成双通道冗余。如果一路WTB总线或MVB总线故障, 数据交换可以不中断地在另外一路对应的总线上继续进行, 并在微机显示屏上显示告知司机总线故障。

2.4.3 网关GW

每节机车配置两套网关, 每个网关对应分配到一个CCU, 其中一套网关参与WTB通信。配置给从CCU的网关不参与重联机车的初始化, 也不参加任何数据交换, 该网关不为其他WTB参与者识别, 在主控CCU/GW失去主控功能后, 主从转换自动启动。

2.4.4 输入/输出单元CIO冗余

对司机室操作有关联作用的输入输出存在两套CIO, 如司控器、主断扳键开关、受电弓扳键开关等重要信号, 一般会通过两路不同的IO通道同时记录该类关键部件的状态, 这些数据对主控CCU有效。如果出现冗余数据相互矛盾的情况, 网络系统必须对数据的合理性作出选择。

3 结语

容错技术归根结底是在系统设备的可靠性低时提出的一种提高系统可靠性的解决方案, 容错会增加系统的复杂程度和设计难度, 如果容错设计合理将大大降低系统的失效率, 但是容错设计不当可能增加系统的故障率, 并且冗余太多会导致成本增加。因此, 冗余措施的采用是根据各种不同车型的用途和客户的具体需求而定, 同时在设计前应对电力机车系统的冗余容错设计进行合理而有效的评估, 系统设计应找到冗余设计与系统的最佳组合。

摘要:容错技术是保证系统运行安全性和可靠性的关键手段之一。介绍了电力机车系统中常用的容错技术及其基本原理, 并以和谐系列机车为例详细阐述了电力机车各子系统容错技术的实现方法。

关键词:电力机车,可靠性,容错技术,冗余设计

参考文献

[1]廖洪涛, 彭新平.可靠性技术在电力机车系统设计中的运用[J].电力机车与城轨车辆, 2004, 27 (2) .

[2]HXD1C型大功率交流传动电力机车网络控制系统[J].电力机车与城轨车辆, 2011, 34 (6) .

容“错” 篇7

为了提高读光盘的能力, 厂商在光驱上做了很大改动, 提高光驱中激光头的功率是常用的方法, 这是从硬件设备上提高光盘的容错性能。但是, 光头功率增大后, 长时间“超频”使用会使光头老化, 严重影响光驱的寿命。这种以牺牲光驱寿命来换取容错性的方法是不可取的。本文则是从软件角度出发, 在Linux操作系统下, 在块设备驱动程序的基础上实现了软件层次的光盘容错机制, 以驱动程序小的改动为代价实现了一定能力的光盘容错, 提高了光盘的使用寿命。

1Linux设备驱动程序

Linux内核与外部设备之间的交互操作是通过设备驱动程序实现的。设备驱动程序属于内核的一部分, 为外设定义了相关的数据结构和操作函数, 并通过特定的接口与内核和其它设备驱动程序通信。图1就是设备驱动层在内核中的位置: 系统调用是操作系统内核和应用程序之间的接口, 设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节, 这样在应用程序看来, 硬件设备只是一个设备文件, 应用程序可以像操作普通文件一样对硬件设备进行操作。设备驱动程序作为内核的一部分完成以下的功能。

(1) 对设备初始化和释放;

(2) 把数据从内核传送到硬件和从硬件读取数据;

(3) 读取应用程序传送给设备文件的数据和回送应用程序请求的数据;

(4) 检测和处理设备出现的错误。

在Linux操作系统下有三类主要的设备文件类型, 分别是字符设备、块设备和网络设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时, 实际的硬件I/O一般就紧接着发生了;块设备则不然, 它利用一块系统内存作缓冲区, 当用户进程对设备的请求能满足用户的要求, 就返回请求的数据, 如果不能, 就调用请求函数来进行实际的I/O操作。块设备主要是针对磁盘、光盘等慢速设备设计的,

以免耗费过多的CPU时间来等待。光盘作为一种大容量存储设备, 它是作为块设备被Linux中的块设备驱动程序处理。

2块设备驱动数据结构及流程

块设备驱动层作为内核的一部分, 定义了很多的数据结构, 有描述外设的, 也有描述外设请求的, 这些数据结构对于分析驱动程序流程至关重要, 以下是其中的两个重要的数据结构, 均在blkdev.h中定义:

(1) 请求队列结构体。

(2) 请求结构体:request

光盘的读取请求是通过块设备驱动程序实现的, 在Linux操作系统下, 这是通过请求队列的形式实现的。正常的读取操作过程包括三个步骤:

(1) 检查当前读取请求的有效性。这是由blk.h中定义的宏INIT_REQUEST完成;

(2) 进行实际的数据传送。用变量CURRENT (实际上是个宏) 可以获得发出请求的一些细节, CURRENT是一个指向结构体request的指针。request是以request_ queue (请求队列) 为链接头、通过其中的双向循环链表queue链接起来进行管理, 见图2中第一列的三个结构体。每一个request (请求) 又可以处理多个连续的读操作, 通过图2中的结构体buffer_head进行管理, 而实际的数据保存在data中。

(3) 清除当前的请求。这个操作由函数ide_end_request完成, 函数的代码在ide.h中。实际的执行操作向这个函数传递一个参数, 成功时为1, 失败时为0。当ide_end_request以参数0调用时, 一个“I/O error”消息会被发给系统日志 (通过printk) , 即发生读请求错误。

3设备驱动层次的容错机制

总之, 设备驱动层次的容错机制包括初始化、读操作判断以及错误处理这三个阶段, 详细的容错流程则可以参考图3。在Linux操作系统下, 光盘容错处理机制的具体处理过程如下:

(1) 操作系统在收到读光盘命令后、在进行读操作之前, 先进行初始化工作:

sectors = N (N是一个常量) , sectors 是每次读操作失败之后跳过的扇区块数, 在连续读错的情况下, 以2的倍数递增;

sector_end = 0, sector_end 是跳块之后下一次要读的块号, 即有如下关系:

sector_end=current_sector + sectors, current_sector是当前块号, 初始化为0;

Error_times=0, 连续读错误的次数, 有上限M (常数) , 初始化为0;

(2) 通过图3, 可以看到正确的读操作流程图, 如果发生读取操作错误, 则进入到错误处理的流程中去, 具体的操作如下:

sector_end=current_sector + sectors, 得到跳过sectors块之后下一次要读取的块号;

Error_times ++, 连读错误次数加1, 并且要判断是否大于最大允许的连读错误次数, 如果大于等于允许的最大连续读取错误次数, 则认为光盘数据损坏严重, 退出当前读命令;

sectors=2×sectors, 在连续读取错误时跳过的扇区块数加倍;

真正跳块的操作是从下一次开始的sectors块读取操作, 但不一定是sectors次循环, 因为在Linux块设备驱动程序中, 每个读取操作是以data为单位的, 而每个data中会存放若干个块的数据, 此外, 多次连续的读取操作可以合并到一个读请求中, 可以参考图2。取消该次读操作所做的工作是由前面曾经提到过的ide_end_request函数实现的。ide_end_request 函数是对于读取操作的扫尾工作, 在正确的读取操作结束之后会返回1, 而在错误的读取操作之后会返回0。如果没有错误处理机制, 原始的驱动程序是一次处理一个data的数据, 而且要等到该次读错误操作返回。在底层操作中是通过一个时间溢出值为0来标识的, 在连续若干块发生错误的情况下, 每次都要等到溢出值为0, 导致读盘极其缓慢, 对于检测中使用的高清碟片而言则是出现播放画面停顿或马赛克等现象。

在上述错误处理机制中, 要改变的是ide_end_request对于跳过的块的处理操作:就是把这些要跳过的块当成已正确读取结束而返回1。也就是在判断处于跳块操作过程后, 不进行任何真正的读取操作, 直接调用ide_end_request来对该次的读取请求进行清理工作。在每一次读取操作过程中, 所做的清理工作是对于该次请求所使用的缓冲空间的释放。在ide_end_request中, 我们要在合适的时机把该次request 中所有用来存放数据的data和管理data的buffer_head处理掉, 采用的方法和正确读取数据之后对于这些结构体和缓冲区的处理方法一样:首先暂存request中bh所指向的buffer_head结构体;接着对request中指向的buffer_head和data进行释放操作, 这是由blkdev.h中的blk_finished_sectors函数实现的;处理完之后通过暂存的前一个buffer_head使得下一个buffer_head前移, 按照上面的方法继续调用blk_finished_sectors进行处理, 直到所有的data和buffer_head都处理完毕。下面的一些示例代码展示了这个过程:

代码中req是request结构体类型的变量, bh是buffer_head结构体类型的变量, nsect是一个data里的块数, hard_sector、hard_nr_sectors是request的内部成员, 分别存放的是当前要处理的块号和本次读请求的所有块数, 会随着清理工作的进行而更新;

(3) 跳过相应的块数之后, 下一次则按照正常的读操作进行, 如果读操作正确, 则进入到正确读操作流程, 否则跳块操作持续下去直到光盘最后或者连读错误次数达到上限值M。

4结束语

本文通过软件机制在Linux驱动程序层次实现了一定的光盘容错机制, 提高了对损坏光盘的容错性能。本方案经过大量的测试并初步用于高清媒体播放器中, 结果表明, 对于85%以上有坏块的光盘, 在遇到损坏的部分时, 经过修改的驱动程序可以对其继续读取, 而未经修改的则长时间卡在损坏的地方不能继续读取。

但是, 本方案也有一定的局限性, 测试结果表明:对于损坏比较严重的光盘, 软件层次的检验需要花费不少的时间;另外, 扇区块跳读的速度也不是最快的, 有待于进一步的优化措施。

摘要:容错机制对于读光盘是很重要的。本文分析了Linux操作系统下块设备驱动程序的工作流程, 并实现了一种在驱动层通过扇区块跳读来实现光盘容错的方法, 显著提高Linux操作系统下光盘的重复利用率。

关键词:Linux,驱动程序,扇区块,光盘,容错

参考文献

[1] (美) 鲁比尼等著, 魏永明等译.Linux设备驱动程序 (第二版) .北京:中国电力出版社, 2002.346~397

[2]Daniel P.Bovet, Marco Cesati著.Understanding the Linux Kernel (2nd Edition) .O’Reilly, 2002.1~50

[3]孙树清, 陈萍.可录型光盘与菁染料光存储媒体的研究进展.化学通报, 1999, (第6期) :

[4]宋宝华著.Linux设备驱动开发详解.北京:人民邮电出版社, 2008.2~71

关于计算机服务器系统的容错技术 篇8

关键词:计算机;服务器系统;容错技术

由于我国当前信息技术的飞速发展,各个行业中需要用到计算机系统的应用越来越多。其中,计算机系统的发展也为各类业务提供了可靠及时的基础支撑。然而,我们还应该注意到计算机系统中的软硬件都会产生一定的故障,对于这些故障的处理如果稍有不慎就有可能会对企事业单位,尤其是一些国防、卫生以及电力等重点行业带来一些较大的损失情况。但是伴随着容错技术的引入,我们就能够很好地解决这个问题,还能够进行正常、不间断的工作。因此,本文就旨在对计算机服务器系统中的两个主要容错技术:软件错误容错技术和硬件错误容错技术进行一定的分析,能够为相关的理论和实践带来一定的借鉴意义。

一、计算机服务器系统容错系统的概述

我们所说的计算机故障,指的是由于计算机不见的物理实现、操作错误或者是设计错误等原因引起的计算机系统硬件或者是软件错误的状态。故障的诊断、检测和恢复技术主要是作为计算机容错技术的重要组成部分,如果计算机系统要进行故障恢复的操作,首先就要进行检测、诊断的技术来对故障所处的位置进行定位。作为恢复的前提,我们还应该在恢复技术的作用下使得计算机系统能够恢复到无故障时候的状态并且开始正常工作。当前运用的计算机容错技术最基本的方法是冗余技术,而硬件冗余、软件冗余、信息冗余以及时间冗余技术是作为冗余技术的四个主要组成部分。

二、计算机服务器系统容错技术分析

1.硬件错误容错技术

(1)在硬件错误容错的技术中,我们采用的硬件冗余技术也主要分为部分冗余和完全冗余这两种主要方式。我们通过分析完全冗余的方式,可以发现工作方式的不同主要分为冷备、热备、温备和双工等这四种方式。这四种方式的工作形式如下所述:

热备工作方式:在该工作方式之下,我们对于两个互为冗余的计算机服务器系统都处于加电工作的状态,但是由于热备计算机系统并不能够对系统的处理结果进行输出以及计算。所以一旦主计算机系统在发生了故障的前提下,热备计算机系统就会在继续的工作中接手,直到系统故障修复完毕之后,热备的机器就开始重新编程备机。

冷备工作方式:这一种方式跟热备方式不同的是,冷备工作方式的备用指的是计算机系统是在处于不加电状态下的工作。只要主机发生了故障,那么冷备机器就会接受继续工作,故障解决之后就会重新变成备用机。

温备工作方式:冗余的两个系统都处于加电状态,一个在工作状态的时候,另一个就开始处于等待状态。如果工作的机器发生了故障,那么另一个就会开始接受继续进入工作状态。等到故障恢复之后,就会变成备用等待的机器。

双工工作方式:在该种工作方式下,两个机器开始同时进入工作,也开始同时进入处理结果的输出。在发生了故障之后,我们对两个机器的结果进行输出的比较。

(2)所谓的信息冗余,指的就是在原始数据中附加若干位的冗余信息用来达到检测故障或者是恢复故障等目标的容错技术,其中就包括了检错编码与纠错编码这两种。检错编码可以通过自动扫描来发现错误,而对于纠错编码具有自动发现错误以及纠正错误的能力等。我们在编码技术常用到的是信息的传输和存储以及处理过程中去。

(3)我们在时间冗余中,在一些非硬件冗余以及一些非强实时的系统中,可以利用使用时间冗余技术来达到容错的目的。时间冗余的工作方式主要就分为两种,一种是RSHW,指的是在同一个硬件上对于同一数据在不同时间片中执行同一指令集。第二种是使用数据延迟设备及表决电路结合,将一次次的数据处理的输出结果通过设置不同的延迟大小而复制成多个版本并在表决器处进行比较。

2.软件错误容错技术

在面对硬件系统故障研究的时候,软件错误就显得比较困难了。由于当前还没有能够形成一套成熟而又完整的方法来应对软件系统可靠性以及设计错误等检测结果。现在应用比较普遍的软件故障恢复策略主要有两种,一种是前向恢复,另外一种是后向恢复。我们在面对前向恢复的时候,总是习惯将计算机当前的计算状态继续进行下午,从而将之后的状态恢复到连贯的正确状态。而对于后向恢复来说,字面理解上来说就是将计算机系统状态恢复到前一个正确的状态。

目前应用的前向恢复状态主要由N-version Programming的方法,该种方法的基本思路是通过不同的团队独立设计,以及使用不同的方法来对不同的设计语言和不同的开发环境以及工具来进行完美的实现。主要目的就是为了减少各个版本软件在表决点上出现的一些关于错误的概率,其中相关的工作方式也是较容易实现的。而对于当前应用较普遍的后向恢复法来说,主要由恢复块方法和防卫式的程序设计方法。我们通过恢复块方法来说,其中一个功能之下,存在有主块和若干个后备块的概念,一旦主块开始投入运行后就没有通过验收的测试,也就可以指定第一个后备块运行,从而也就成为了主块。在依次按顺序开始耗尽所有后备块的基础上,设计的主块和后备块之间就尽量保证了相对的独立性,不会因为主块出现了错误而干扰到后备块的运行。

三、结语

综上所述,我们对于计算机服务器系统的基础支撑可以发现,其中最主要的还是容错技术的保障,能够对其稳定而又不间断的运行提供了重要技术。每个企业都应该对此引起足够的重视,而本文通过对计算机服务器系统中的硬件容错技术和软件容错技术进行了仔细的分析,相信未来我国的计算机系统规模将会进行进一步地扩大。

参考文献:

[1] 吴玥. 浅析计算机服务器系统的容错技术[J]. 无线互联科技. 2015(11) .

建立容错纠错机制心得体会 篇9

推进“两聚一高”,是开拓性的事业,需要一大批敢啃“硬骨头”、敢于攻坚克难的优秀干部。他们敢闯敢试、敢作敢为,勇于走前人没走过的路、做前人没做过的事,工作中难免会出现失误或差错;他们勇往直前、披荆斩棘,很可能触动一些人的“奶酪”,讲一些得罪人的话,做一些得罪人的事,往往会受到误解和非议。从组织上来说,旗帜鲜明支持、保护、鼓励担当者,给他们吃下“定心丸”、系上“保险绳”,就能让他们挺直腰杆、甩开膀子、迈开步子,在全省形成改革创新、干事创业、奋发有为的浓厚氛围,把改革发展各项事业不断推向前进。

为敢于担当的干部担当,担的是改革中的风险、探索中的失误。建立容错纠错机制,绝不是对违规逾矩者的纵容和庇护。如何做到既宽容和保护作风正派、锐意进取的干部,又坚决防止纪律松绑、管理松懈?关键要把握好政策界限。要严格区分有禁与无禁、为公与为私、有意与无意、集体决策与独断专行,既不能让大胆探索的“领头羊”成为改革失误的“替罪羊”、让干事创业的干部流汗又流泪,也不能让那些假改革之名、谋私利之实的人钻空子、占便宜。容错、试错、纠错,是一个完整的政策链条,要努力形成宽容失败、允许试错、有错必改的一整套机制,不断激发各级干部勇担当、谋实干的热情和动力,推动省委省政府各项决策部署有效落实。

为敢于担当的干部担当,本身也是负责担当的体现。在一线冲锋陷阵的党员干部,最怕在误解和非议面前孤立无援,找不到组织,也看不见领导,在组织面前道不了实情、在领导面前说不了心声。只有坚持上级为下级担当、组织为干部担当、干部为事业担当,才能引导广大干部做锐意创新的战斗员、深化改革的践行者、推动发展的实干家。要树立事业为上、注重实绩实干的用人导向,建立精准、规范、科学、多维的政绩考核体系,大力选拔想干事能干事、谋改革善改革的干部,坚决调整不担当不作为的干部。各级党组织和上级领导干部要充分认清肩负的责任,努力当好广大干部敢于担当的支持者、鼓励者和坚强后盾。

容“错” 篇10

软件系统正越来越多的应用到生活的方方面面,但是开发一个没有缺陷的软件系统通常是非常困难的,因此软件有时会失效,失效的后果可能只是造成一些不方便(比如电视机遥控器不能用),也可能是灾难性的(比如商业飞机上的软件故障)[1]。为了使软件系统在出现失效时能够继续运行,提出了容错技术,容错是保障软件可靠性的重要方式。文献[2]讲述了一些当前的容错技术,包括恢复块,N版本编程等。异常处理是构建高可靠性容错系统的一个重要方面。异常处理最早是由John Goodenough在1975年在文献[3]中提出来的。现在异常通常都被定义为在程序执行过程中影响程序正确行为的特殊事件。程序语言的设计者经常忽略异常机制,这就让开发异常处理代码的开发者觉得开发一个好的异常处理代码是困难的,容易出错的,而且效率不高。并且,对异常处理不完美的程序来说,当程序出现异常,系统就会停止运行,极大影响了程序可靠性和用户体验,所以异常处理在高可靠系统的实现中有着重要的作用。

本文给出一个工具,该工具通过对抽象语法树静态分析的信息来定位异常和判定异常信息,由此选择异常恢复策略,结合AOP技术,工具实现自动生成异常捕获代码,生成AspectJ程序模板,并且通过分析代码定义了常见异常的通用处理模式,同时支持用户自定义异常处理方式。

1 背景介绍

Java的异常处理机制包含三部分:Throws说明可能抛出的异常,调用该方法必须处理这些事件;将可能抛出异常的代码放在try块中,处理放在catch块中,finally用于恢复系统状态;Throw后面跟异常对象类型,说明抛出的异常。对于Java异常可分为检查异常和未检查异常。本文主要处理检查异常。文献[4]中研究表明,程序员并不常书写代码处理异常,更多时候是采取忽略或者简单返回一个缺省值并终止程序的方式来处理,而不是真正的去规划恢复策略,书写恢复代码。而很多时候对异常恢复策略的规划是有意义的。由于异常处理可能引发的控制流复杂性和异常本身的复杂性,比如即使是同一个异常,处理策略也经常是各不相同的,这就给异常处理策略的规划增加了难度。

由于异常分布的散乱性,直接在系统中书写异常代码会和已有代码交缠在一起,因而在异常处理中引入面向方面的思想是有意义的。面向方面的编程是面向对象编程的有效补充,提供了新的语言特性来增强模块化和分离关注点,可以以非侵入方式改变程序的执行方式,极大地降低了异常处理代码和原代码的耦合性[5]。但是面向方面能否增加系统的模块化仍然是一个值得探讨的问题。文献[6]中指出,如果异常处理代码很大程度上是上下文相关的,那么使用面向方面技术带来的好处就有限,但是如果能事先规划好,面向方面会是一个很好的补充。所以本文通过工具提供了自动的代码生成,同时也提供了一定的灵活性,与上下文相关的内容,我们允许开发者自己定义。通过自定义的代码生成工具生成方面文件,对已有的程序进行打补丁式的补充,增强了程序的异常处理和容错能力。

2 工具介绍

为了实现容错处理,就必须能先对异常定位并分析异常,并给出相应的恢复策略,我们开发了一个工具。这个工具结合抽象语法树静态分析的信息生成恢复策略,然后自动生成AspectJ文件,实现异常的修复,达到容错效果。

2.1 工具框架介绍

工具的运行过程主要包含两个部分。第一部分,利用抽象语法树来获取异常所在的方法位置信息、方法参数和方法返回类型等信息。第二部分,是一个自动生成方面文件的工具。工具从抽象语法树分析工具分析的结果出发,对异常和异常所在的方法进行分析,利用string template工具,把抽象语法树中的分析得到的信息设置到要生成的方面文件中,对每个异常生成一个默认的方面文件。方面文件动态切入源代码中实现了默认的异常恢复策略,由于默认异常恢复策略不能保证对所有的异常处理都有正确的效果,所以工具也允许用户自定制异常恢复策略,更加灵活和个性化。

2.2 抽象语法树分析工具

抽象语法树SAT(Abstract Syntax Tree)是源代码经过词法分析和语法分析得到的产物,作为程序的一种中间表示形式,能够包含编译单元的完整表示,可以比较直观地展示整个程序的语法结构,语法树的建立是在词法分析、语法分析、语义分析的过程中逐渐产生的。其中词法分析对源程序进行分析,并形成符号表,作为下一步语法分析做准备,接着语法分析初步形成具有相应语法结构的中间节点的抽象语法树。最后语义分析,把名字和操作符进一步处理,产生具有表示类型信息的对象和符号表的标准的抽象语法树。这时语法树就是完整的抽象语法树了,它包含了程序结构的基本信息。如图1所示。

抽象语法树在程序分析和程序开发等诸多领域有广泛的应用,比如经常用来做代码克隆检测、程序数据流,控制流的分析等。

为了定位异常产生的位置和异常所在方法和其他方法的调用关系,这里使用抽象语法树的分析工具来得到程序结构的基本信息。该工具是一个Eclipse插件,用来做静态代码结构分析,使用工具可以得到代码中异常的种类,异常所在的类,异常所在的方法和异常是被catch还是被throw,工具如图2所示。

通过该工具可以分析出每个类的方法、参数,抛出的异常以及每个类之间方法的调用关系,这些信息对于后面生成方面文件是必不可少的。抽象语法树工具是对源码的静态分析,但是由于运行时的上下文信息是比较难以获取的,所以我们这里只对代码做静态分析。根据静态分析得到的信息生成异常处理代码,正如文献[7]提出的指导原则之一,异常处理必须提供上下文信息,这里开发者可以利用工具进行进一步的自定制来获取上下文信息,实现相应的恢复。

2.3 设置工具描述

我们开发了一个设置工具,工具中定义了处理异常的面向方面文件模板,根据模板,利用模板生成工具String Template生成用于对当前系统做异常处理的方面文件。图3是工具的一个使用界面。

首先,选择一个已经用抽象语法树分析过的项目,比如图3的jforum;然后,由于异常经常是分散在程序中的不同位置,因此对于抽象语法树分析的结果,我们按照异常的类型来进行分类,因为同一类型的异常处理方法总是相对于不同类型异常的处理方法要相似的多;当在ExceptionSetting框中选中特定异常类型后,抛出这个异常的所有方法,都在第三个框中列出来。包括类名、方法名、方法参数类型和返回类型。这些信息是生成面向方面文件的必要信息。

2.4 策略的描述

文献[8]提出了一个面向方面的框架来支持Web服务的监控和恢复,主要是致力于Web服务的运行时监控,以及根据监控信息来合成Web服务。在恢复的时候,提到三个通用的恢复策略分别是重试、忽略、可选,但是对于通用策略的代码自动生成仍然没有做,我们文章试图在通用策略的自动代码生成上做些尝试。通用恢复策略如图4所示。一般来说,如果重试不成功,可以忽略(skip)当前异常,或者选用其他可选的方式再重新尝试,也就是上文所说的可选(alternative)。

对于异常类型和策略的对应关系是一种多对多的关系,同样是使用的retry策略,但是处理的可能是两种不同的异常。比如IOException的产生可能是由于远程资源访问不到,而SQLException可能是数据库的访问出现问题,截然不同的两种异常,却可以使用同一种retry策略。反过来,当前数据库出现错误, retry通常只能修复那些瞬时性错误,对于非瞬时性的错误更有效的方法是采取alternative策略自己定制。异常和策略之间的对应关系是复杂的多对多关系,对这种关系中知识的提取是将来的一个研究方向。

重试、忽略、可选是通用的异常处理策略,所以我们针对这三种方法分别设计了一个AspectJ模板,如图5所示。

图5中用$号括起来的是模板生成工具的语法符号,表示用该模板生成代码的时候这些内容将被具体的内容替代。该模板是为了生成方面文件的,所以要遵循面向方面编程的语法,下面我们逐个介绍模板中的元素:

$package$:该异常类所在的包名。

$RetryAspectName$:该方面的方面名。

$declearVar$:用于只带一个参数的方法的参数声明。

$parmDeclearItems$:用于多个参数的参数声明。

$classNameWithoutDot$$methodName$:为了区别每一个pointcut的名字,用类名和方法名的连接来唯一标识。

$parmsWithVars$:用来描述带有变量的参数。

$metWithDeclear$:指明调用的方法。

$onlyParms$:指明传递的参数。

$ParmsSetItems$:迭代的参数赋值。

该模板包括两个部分,第一部分是获取异常对象当前的方法,并取得当前的参数,实现方式是通过第一个pointcut,在方法调用前,将方法参数捕获并将其值传入AspectJ中定义的相应变量中,这就方便了获取一些运行时的对象信息,开发人员可以在这里获取自己想要的上下文信息;第二部分,根据当前的对象t和传递过来的参数列表,对该方法重新执行。如图5所示t.$methodName$($onlyParms$)就是指对当前对象t,执行方法$methodName$,具体方法信息可以从抽象语法树分析出的程序结构得知当前对象中抛出异常的方法名字。这里retry模板的advise是重新执行方法。

如图6所示,Skip模板中的advice可以设置为简单抛出一个运行时异常,相应的,在面向方面中提供了一种弱化异常的方法,来把方面中抛出的异常继续以运行时异常抛出到原来程序中,继续运行。Skip可以有三种方式,比如,记录日志并抛出异常;把返回值设置为默认值;抛出一个运行时异常。由于不同点在于程序具体的执行和返回状态,文献[7]中指出,开发人员经常都会倾向于认为,如果当前异常不会影响继续运行,那很多时候我忽视它是不会产生什么问题的。

alternative的模板和retry差别在于advice的设置,retry模板的advice中代码实现方法重新执行,而alternative模板的advice中代码实现备选方案。实现alternative策略需要用户(即程序的设计人员)提供备用数据库或者资源文件等的连接信息。当用户选择alternative的恢复策略时,用户可以手动书写恢复策略代码。

3 案例分析

一个开源的论坛系统JForum被选作为实验对象,来验证工具和方法的可行性。首先,将JForum源代码通过抽象语法树分析,然后通过工具生成实现了容错策略的方面文件。其次,启动系统,让系统在正常运行环境中运行。同时一个不带有异常恢复代码的源程序也在相同环境下运行。在系统抛出异常时,我们对比两个版本的运行时程序的不同反应,来验证我们方法的可用性。

在没有做任何恢复处理系统中如果抛出了SQLException和NullPointerException,用户会在在浏览器中看到如图7的画面。用户可能认为该网站出现了严重的错误,已经不可用了。

然而,通过工具处理的程序在运行时,如果遇到了相同的问题,由于加入了retry恢复策略后,如图8所示。

如果retry策略没有效果,系统就会采用skip策略,通过把当前异常封装为运行时异常抛出。如图9所示。

如果用alternative,则需要用户自己写一个方法,比如连接到其他的数据库去执行。如图10所示。

在设置工具中,可以选择想要使用alternative策略,则用户可以在自己写恢复代码,这里的例子如图10所示,是指当前数据库不可用后,连接到备份数据库中重新尝试,执行成功后,用户就能正常登录。

对于用户自己定义的异常,也可以用工具定制恢复代码,和上下文相关的可以手动加入,比如当用户发帖失败时,当前由于数据库异常导致我们无法发帖,但自己配置了恢复策略后,我们就可以将作者发帖的所有信息存为文件,这些内容是在运行时才能获取的,所以静态分析无法获取,只能先让开发者写部分代码以获取这些上下文内容,等数据库恢复正常时再将发帖内容恢复,这里就不一一描述。我们将在将来进一步完善工具动态运行时对上下文信息的感知和提取。

4 将来工作

本文通过对系统源代码的静态分析,获取到发生异常所在的方法以及方法传递的参数,方法返回类型等相关信息,对抛出的异常做了相应的恢复处理以保障系统的可靠性,实验结果说明方法是可行的。容错技术仍然是很重要的研究领域,还存在着大量的问题。在未来的工作里,我们将考虑异常传播时的容错策略设计,对于异常传播过程中[9]策略的选择和容错策略的自动推理。我们希望将来能进一步丰富策略的内容,并利用SWRL(Semantic Web Rule Language)来做一些规则的推理,并且试图去获取异常抛出的动态上下文,这样就可以在获取运行上下文的信息下自动的推理寻找合适的容错策略,增强容错工具的自动化能力。

5 结 语

随着技术进步和科研的深入,容错处理方面的各种问题将会进一步得到解决。容错处理作为构建高可靠性系统的一个重要方面,仍然是一个研究的热点,本文在分析当前系统的异常位置情况下,自动生成具有容错能力的文件插装到系统中,实现一定的容错处理,并且提供用户一定的灵活性,自己定制恢复策略。为容错中异常处理的问题提出了一个解决方案,一定程度上提高了软件的容错能力。

摘要:容错是保障软件可靠性的重要手段。该目标是利用对软件系统静态分析的信息,生成具有容错能力的方面文件来增强软件系统的容错能力。首先利用抽象语法树的分析工具,来获得一些有用信息,比如异常类型和抛出异常的方法。然后通过模板生成工具生成相应的恢复代码,利用面向方面机制,将代码动态编织入系统中。最后做一个案例证明方法在实现容错增强方面的可行性。

关键词:软件容错,面向方面,工具

参考文献

[1]W einstock C B.A Perspective on the State of Research in Fau lt-Toler-ant System s[R].Software Engineering Institute,Special Report CMU/SE I-97-SR-008,June 1997.

[2] Wilfredo,Torres Pomales.Software Fault Tolerance:A Tutorial[M].NASA STI Program Office,2000.

[3] John B Goodenough.Exception handling:issues and a proposed notation[J].ACM,1975,18(12).

[4] Cabral B,Marques P.Exception Handling:A Field Study in Java and .NET[C]//(ECOOP ‘07) LNCS 4609,Springer-Verlag,2007.

[5]L ippertM,Lopes C V.A study on exception detection and hand ling u-sing aspect-oriented programm ing[C]//ICSE 2000:418-427.

[6]Fernando Castor F ilho,Nelio Cacho,RaquelMaranh~ao,et al.Excep-tions and Aspects:The D evil is in the D etails,2006.

[7] Wirfs Brock R.Toward Exception-Handling Best Practices and Patterns[J].IEEE Software,2006,23(5).

[8]Huang Tao,W u Guoquan,W ei Jun.Runtim e mon itoring composite webservices through statefu l aspect extention[J].Journal of Computer Sci-ence and Technolgy,2009(2).

上一篇:综合能源基地下一篇:无角道赛特