《嵌入式软件设计.ppt》由会员分享,可在线阅读,更多相关《嵌入式软件设计.ppt(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式软件设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望嵌入式软件系统特点(一)嵌入式软件系统特点(一)实时:允许的反应时间平均在1秒以内稳定:必须能够长时间稳定运行(可靠性)简单的内存写覆盖保护内存定期回收能力系统异常监控热插拔、热备份自恢复:系统异常具备重新运行的能力软件狗启动快嵌入式软件系统特点(二)嵌入式软件系统特点(二)提供调试和监控手段(可维护性)Debug信息系统参数监控系统轨迹跟踪DUMP功能系统异常告警和异常现场记录系统资源相对比较少数据流
2、程和控制流程分离VxWorks的任务的任务优先级:0255(高低)调度方式:抢占与非抢占HOOK:创建前,切换,删除后栈:从低到高增长 一般不用太大,40K足够 不允许在函数中定义大的数组非抢占式下任务的特点非抢占式下任务的特点 任务一旦获得任务一旦获得CPU,将独占,将独占CPU,除了中断,除了中断,其他系统任务在该任务没有释放其他系统任务在该任务没有释放CPU的情况下,的情况下,将无法获得将无法获得CPU的控制权的控制权 任务优先级表示任务重新调度时获得任务优先级表示任务重新调度时获得CPU的权的权力大小力大小非抢占式下任务的优缺点非抢占式下任务的优缺点优点:优点:任务独占任务独占CPU,
3、任务间极少存在临界区,编程需要考,任务间极少存在临界区,编程需要考虑保护的地方较少,可直接函数调用,对开发人员技术虑保护的地方较少,可直接函数调用,对开发人员技术要求低要求低缺点:缺点:独占性造成系统的实时性稍差,因此设计的时候需要独占性造成系统的实时性稍差,因此设计的时候需要任务采用在适当时间释放任务采用在适当时间释放CPU的方式来增强系统的实时的方式来增强系统的实时性,需要设计人员很有经验,对系统非常熟悉性,需要设计人员很有经验,对系统非常熟悉 系统出现异常的时候很难监测系统出现异常的时候很难监测 非抢占式下任务的注意事项非抢占式下任务的注意事项 绝对避免大循环和死循环的情况产生,要注意释
4、放绝对避免大循环和死循环的情况产生,要注意释放CPU,尤其是在处理的数据收发的任务和路由任务中要,尤其是在处理的数据收发的任务和路由任务中要更加注意,通常是在处理一定时间后更加注意,通常是在处理一定时间后delay一段时间一段时间 系统中可增加在中断中对任务占有时间的统计和监控系统中可增加在中断中对任务占有时间的统计和监控 抢占式下任务的特点抢占式下任务的特点 高优先级任务可以抢占的优先级任务的高优先级任务可以抢占的优先级任务的CPU控控制权,任务优先级表示任务抢占制权,任务优先级表示任务抢占CPU的能力大小的能力大小抢占式下任务的优缺点抢占式下任务的优缺点优点:优点:系统的实时性很好系统的实
5、时性很好 监控比较方便监控比较方便缺点:缺点:系统的临界区很多,编程的时候要考虑保护,对开发系统的临界区很多,编程的时候要考虑保护,对开发人员的经验和技术要求比较高人员的经验和技术要求比较高 设计不好,容易造成系统死锁或责系统颠簸,对设计设计不好,容易造成系统死锁或责系统颠簸,对设计人员的要求也比较高人员的要求也比较高 问题查找不方便问题查找不方便 抢占式下任务的注意事项抢占式下任务的注意事项 注意保护临界区,可采用的办法有任务锁,信号量,注意保护临界区,可采用的办法有任务锁,信号量,引用计数,消息,关中断引用计数,消息,关中断 任务间的接口函数中不要直接使用指针进行操作,只任务间的接口函数中
6、不要直接使用指针进行操作,只能够当成标识来使用能够当成标识来使用 对数据结构的维护操作应该集中在一个任务中进行,对数据结构的维护操作应该集中在一个任务中进行,最好是集中在低优先级的任务中,这样需要增加的保护最好是集中在低优先级的任务中,这样需要增加的保护可以很少可以很少 死循环也是不允许的死循环也是不允许的 任务间共享区的保护任务间共享区的保护任务锁任务锁信号量信号量引用计数引用计数消息消息关中断关中断 任务锁任务锁 最简单,可用于对某一段代码的保护,几乎可以适用最简单,可用于对某一段代码的保护,几乎可以适用于所有的保护的地方,但是用于保护用时很长的操作过于所有的保护的地方,但是用于保护用时很
7、长的操作过程的时候与系统的实时性会产生冲突程的时候与系统的实时性会产生冲突 当前的系统中对任务锁不支持嵌套,因此在锁任务的当前的系统中对任务锁不支持嵌套,因此在锁任务的程序中不要调用系统的输出、延迟等功能程序中不要调用系统的输出、延迟等功能 信号量信号量 用于保护系统的某段程序或者某一个数据结构的资源用于保护系统的某段程序或者某一个数据结构的资源的独占性的独占性 使用比较方便,应用范围广泛,适用于对代码和整个使用比较方便,应用范围广泛,适用于对代码和整个数据结构的保护数据结构的保护 占有系统资源比较大,不适于用在需要长时间锁定整占有系统资源比较大,不适于用在需要长时间锁定整表的地方,但是如果用
8、于表项的保护则会存在数量的限表的地方,但是如果用于表项的保护则会存在数量的限制(表项少可以,表项多不太合适)制(表项少可以,表项多不太合适)使用不好可能造成系统死锁,最好不要在有互相调用使用不好可能造成系统死锁,最好不要在有互相调用关系的任务中使用信号量关系的任务中使用信号量 出问题时查找问题比使用任务锁困难出问题时查找问题比使用任务锁困难 引用计数引用计数 使用引用计数时必须使用原子操作使用引用计数时必须使用原子操作 引用计数占有系统空间少,可用于保护表项和长时间引用计数占有系统空间少,可用于保护表项和长时间占用的地方,可弥补信号量的缺陷占用的地方,可弥补信号量的缺陷 编程的时候比较复杂,需
9、要增加相应的判断和处理编程的时候比较复杂,需要增加相应的判断和处理 对表项的引用计数操作的地方越多,一旦出问题的时对表项的引用计数操作的地方越多,一旦出问题的时候查找起来就越困难,因此最好只用于必须使用的地方,候查找起来就越困难,因此最好只用于必须使用的地方,并且简化引用关系,三个以内的地方操作引用计数是比并且简化引用关系,三个以内的地方操作引用计数是比较合适的较合适的消息消息 其他任务对数据结构的操作过程都转换成消息发给一其他任务对数据结构的操作过程都转换成消息发给一个模块进行处理,自然不存在共享区的问题个模块进行处理,自然不存在共享区的问题 可以解决绝大部分问题,但是编程复杂,并且对流程可
10、以解决绝大部分问题,但是编程复杂,并且对流程的冲击比较大,效率低,适用于的冲击比较大,效率低,适用于:时间要求不敏感,并且可以进行挂起或异步处理的地时间要求不敏感,并且可以进行挂起或异步处理的地方:命令行、网管、任务监控等方:命令行、网管、任务监控等任务本身对时间要求敏感,并且不要求回应结果的地任务本身对时间要求敏感,并且不要求回应结果的地方:定时器,中断,通讯任务等方:定时器,中断,通讯任务等 任务的划分原则任务的划分原则任务是处理事务的单元,可以是多个功能的集合,是模任务是处理事务的单元,可以是多个功能的集合,是模块在系统中的体现。在任务的划分中,要体现数据流与块在系统中的体现。在任务的划
11、分中,要体现数据流与控制流分离。任务要么完成控制功能,要么完成控制和控制流分离。任务要么完成控制功能,要么完成控制和数据转发功能,对后一种任务,需要提供两个入口将其数据转发功能,对后一种任务,需要提供两个入口将其两个流程分开,例如两个队列。注意两个流程分开,例如两个队列。注意Agent的处理应该是的处理应该是控制流。控制流。在任务中,控制优先,必须先完成控制再处理转发在任务中,控制优先,必须先完成控制再处理转发每一个任务必须要有一个逻辑实体用于对任务进行管理,每一个任务必须要有一个逻辑实体用于对任务进行管理,通常是任务的主函数通常是任务的主函数 任务的优先级分配原则任务的优先级分配原则系统中任
12、务按功能特点可以分成系统中任务按功能特点可以分成 操作系统及定时器任务(操作系统及定时器任务(030)监控任务和设备管理任务等不经常执行的任务监控任务和设备管理任务等不经常执行的任务 协议和报文处理任务(协议和报文处理任务(120以上)以上)后台处理,日志等非紧急的任务后台处理,日志等非紧急的任务如果一个任务处理的事务包含了多个优先级,那么他应如果一个任务处理的事务包含了多个优先级,那么他应该划分成多个任务该划分成多个任务可能长时间连续工作的任务应该优先级较低或定期释放可能长时间连续工作的任务应该优先级较低或定期释放CPU如受外界攻击的任务会连续执行,要特别注意处理如受外界攻击的任务会连续执行
13、,要特别注意处理CPU占用问题。占用问题。抢占式下任务调度的灵活使用抢占式下任务调度的灵活使用优先级依赖:生产者优先级依赖:生产者P-消费者消费者CC高于高于P:优点:避免在优点:避免在P-C的队列中出现积压的队列中出现积压 缺点:缺点:C会立刻抢占,导致每个消息触发一次任务切换。会立刻抢占,导致每个消息触发一次任务切换。对控制消息对控制消息OK,对报文处理不好。,对报文处理不好。P高于高于C:反之反之P=C:通常可行通常可行互斥等候:互斥等候:如果如果P可以挂起,则可在队列满时挂起,等候可以挂起,则可在队列满时挂起,等候C将队列读出一部分。将队列读出一部分。动态调整:动态调整:如果系统本身要
14、求如果系统本身要求P尽量快速响应,可以通过队列长度对任务优先尽量快速响应,可以通过队列长度对任务优先级做动态调整。队列将满,就把级做动态调整。队列将满,就把P相对降低优先级。队列将空,恢复相对降低优先级。队列将空,恢复P的优先级。的优先级。任务的删除任务的删除系统的任务应该尽量做到不需要删除系统的任务应该尽量做到不需要删除如果确实需要进行任务删除操作,则必须再任务释放所如果确实需要进行任务删除操作,则必须再任务释放所有占有的相关资源后再进行删除有占有的相关资源后再进行删除系统的层次划分系统的层次划分在当前的系统中,依照不同的功能实现,我们可以将系在当前的系统中,依照不同的功能实现,我们可以将系
15、统的软件体系分成统的软件体系分成5个平面:个平面:系统支撑平面:操作系统,设备管理系统支撑平面:操作系统,设备管理 系统配置平面:命令行,系统配置平面:命令行,SNMP 系统控制平面:系统的监控任务系统控制平面:系统的监控任务 系统数据转发平面:协议栈,路由,二层功能系统数据转发平面:协议栈,路由,二层功能 系统业务平面:接入业务,系统业务平面:接入业务,MPLS当前的系统是一个立体的概念,不是平面的概念当前的系统是一个立体的概念,不是平面的概念模块的设计原则模块的设计原则数据与控制分离数据与控制分离松耦合,高内聚松耦合,高内聚简单(复杂的问题简单化)简单(复杂的问题简单化)高效高效资源占用少
16、资源占用少必要的冗余必要的冗余模块间的关联模块间的关联由于功能性质不同,不同层面的模块之间的关联是不一由于功能性质不同,不同层面的模块之间的关联是不一样的:样的:系统支撑和系统配置平面的模块可能与系统内各个模系统支撑和系统配置平面的模块可能与系统内各个模块都存在接口,但之间的接口不一定存在块都存在接口,但之间的接口不一定存在 系统数据转发和业务平面各自的内部接口比较多,与系统数据转发和业务平面各自的内部接口比较多,与各个平面的接口也都存在。各个平面的接口也都存在。系统监控模块用于监控系统的运行状况,不同的功能系统监控模块用于监控系统的运行状况,不同的功能模块只与对应的模块产生接口,之间的接口很
17、少模块只与对应的模块产生接口,之间的接口很少模块的平台化模块的平台化系统中的所有模块,硬件相关性最大的是系统支撑平系统中的所有模块,硬件相关性最大的是系统支撑平面的模块,然后是数据转发平面的模块,其他平面的面的模块,然后是数据转发平面的模块,其他平面的模块基本上不与硬件相关。实际上,通过设计,硬件模块基本上不与硬件相关。实际上,通过设计,硬件相关性可以做到只与设备管理,二层模块,三层的一相关性可以做到只与设备管理,二层模块,三层的一部分相关,其他的模块可以做到很少的硬件相关部分相关,其他的模块可以做到很少的硬件相关平台化决定了各个模块之间必须是松耦合,高内聚的平台化决定了各个模块之间必须是松耦
18、合,高内聚的设计思想,模块间的接口不能有模块相关的情况设计思想,模块间的接口不能有模块相关的情况平台化也决定了系统是与操作系统无关的,因此对操平台化也决定了系统是与操作系统无关的,因此对操作系统的调用要进行封装,使用自己的操作系统函数作系统的调用要进行封装,使用自己的操作系统函数接口接口平台化会造成模块产生一定的冗余代码平台化会造成模块产生一定的冗余代码模块间的接口设计模块间的接口设计1.不同的层次的决定了接口设计需要考虑的方面不同:不同的层次的决定了接口设计需要考虑的方面不同:2.支撑平面与配置平面需要考虑接口的标准化和通用性,支撑平面与配置平面需要考虑接口的标准化和通用性,考虑与模块无关考
19、虑与模块无关3.设备管理,二层与硬件,三层与二层之间需要考虑将设备管理,二层与硬件,三层与二层之间需要考虑将接口的抽象化,标准化。将动作归纳为读写和控制这接口的抽象化,标准化。将动作归纳为读写和控制这几个接口,借鉴设备的思想几个接口,借鉴设备的思想4.其他模块之间必须考虑接口的模块无关性,不能在接其他模块之间必须考虑接口的模块无关性,不能在接口当中直接操作其他模块的指针和数据结构口当中直接操作其他模块的指针和数据结构模块间的数据结构封装模块间的数据结构封装 松耦合决定了模块不能之间操作其他模块的数据,只松耦合决定了模块不能之间操作其他模块的数据,只能够通过标识来进行间接操作能够通过标识来进行间
20、接操作 模块对模块内的数据结构的操作使用宏或者函数封装,模块对模块内的数据结构的操作使用宏或者函数封装,对外则只提供标识,其他模块通过提供的标识和函数来对外则只提供标识,其他模块通过提供的标识和函数来间接操作这个数据结构间接操作这个数据结构模块的需要完成的例行功能模块的需要完成的例行功能模块的命令的处理模块的命令的处理(包括包括show run)模块的网管功能处理模块的网管功能处理模块的模块的Debug信息信息模块的重要数据结构的模块的重要数据结构的DUMP功能功能模块的热插拔处理模块的热插拔处理模块的热备份处理模块的热备份处理模块的模块的IPC处理处理模块的初始化(要求每一个模块都必须使用函
21、数初始模块的初始化(要求每一个模块都必须使用函数初始化所有模块的全局变量)化所有模块的全局变量)模块的内部处理顺序模块的内部处理顺序模块的一般处理顺序是:模块的一般处理顺序是:前一次未完成的工作前一次未完成的工作 控制消息队列控制消息队列 数据队列数据队列 其他其他一般控制消息队列建议建立多个优先级队列,针对不同一般控制消息队列建议建立多个优先级队列,针对不同模块来的控制信息进行优先级分类处理模块来的控制信息进行优先级分类处理效率优化效率优化对于数据转发流程,一定要考虑效率对于数据转发流程,一定要考虑效率对于大数据量操作的流程和模块,也一定要考虑效率:对于大数据量操作的流程和模块,也一定要考虑
22、效率:定时器队列操作定时器队列操作表项查找表项查找嵌入式系统的启动速度越快越好,因此处于启动流程嵌入式系统的启动速度越快越好,因此处于启动流程中的模块功能也需要考虑效率中的模块功能也需要考虑效率高效与简单是对立的,与资源占用也是对立的,需要高效与简单是对立的,与资源占用也是对立的,需要综合考虑综合考虑常用的提高效率的办法:常用的提高效率的办法:Hash Hash链表链表减少报文的拷贝减少报文的拷贝模块的资源占有模块的资源占有嵌入式系统相对资源比较少嵌入式系统相对资源比较少模块的资源评估是必须的模块的资源评估是必须的评估模块达到设计目标时占用的资源大小,有助于我们评估模块达到设计目标时占用的资源
23、大小,有助于我们确定模块的实现方案,综合考虑模块的效率和资源占用确定模块的实现方案,综合考虑模块的效率和资源占用情况的方案才是比较合适的方案情况的方案才是比较合适的方案系统的特殊部件系统的特殊部件中断中断定时器定时器软件狗软件狗IDLE任务任务中断中断1.与中断的接口程序中必须关中断与中断的接口程序中必须关中断2.中断是系统中优先级最高的任务中断是系统中优先级最高的任务3.大量的中断对大量的中断对CPU的占用是很可怕的,要控制中断的的占用是很可怕的,要控制中断的数目数目4.关中断的时间不能很长,中断中对太长的用户操作应关中断的时间不能很长,中断中对太长的用户操作应该发消息将操作转移到其他任务中
24、做该发消息将操作转移到其他任务中做5.对接口中断最好使用轮讯机制来替代,避免线路不稳对接口中断最好使用轮讯机制来替代,避免线路不稳造成中断过多造成中断过多定时器定时器1.定时器任务应该是系统中除中断外优先级最高的任务定时器任务应该是系统中除中断外优先级最高的任务2.完成对系统的定时器功能完成对系统的定时器功能3.定时器内部不能存在太长的用户操作,太长的用户操定时器内部不能存在太长的用户操作,太长的用户操作应该发消息将操作转移到其他任务中做作应该发消息将操作转移到其他任务中做4.定时器与其他模块之间最好采用消息接口,以保证系定时器与其他模块之间最好采用消息接口,以保证系统的实时性和任务优先级的权
25、威性统的实时性和任务优先级的权威性软件狗软件狗1.系统中必须存在软件狗,以保证在故障的时候能够使系统中必须存在软件狗,以保证在故障的时候能够使设备继续工作,系统异常启动时最好能够不进行系统设备继续工作,系统异常启动时最好能够不进行系统的启动信息输出的启动信息输出IDLE任务任务用于完成对系统的空闲计数,可用于进行用于完成对系统的空闲计数,可用于进行CPU效率的统效率的统计计可靠性设计可靠性设计硬件的可靠性设计硬件的可靠性设计 电源冗余备份电源冗余备份 风扇冗余备份风扇冗余备份 支持热备份支持热备份 支持热插拔支持热插拔软件的可靠性设计软件的可靠性设计 简单的内存覆盖保护简单的内存覆盖保护 内存
26、回收内存回收 松耦合松耦合 系统定期状态同步系统定期状态同步 异常攻击保护异常攻击保护 多队列设计多队列设计 宏宏热备份热备份系统可以存在多个主控制单元,当一个控制单元失效,系统可以存在多个主控制单元,当一个控制单元失效,其他单元可以主动获得系统的控制权,保证系统的持续其他单元可以主动获得系统的控制权,保证系统的持续运行运行硬件需要提供对热备份支持硬件需要提供对热备份支持各个主控单元之间要进行定期的通讯检测各个主控单元之间要进行定期的通讯检测软件系统需要提供相应的支持软件系统需要提供相应的支持热备份实现方案(一)热备份实现方案(一)系统的两个主控之间只进行配置的同步,其他的运行状系统的两个主控
27、之间只进行配置的同步,其他的运行状态不同步态不同步相当与系统重新启动,但是速度更快相当与系统重新启动,但是速度更快业务板上的系统如果与主控关联小,尽量做到切换时不业务板上的系统如果与主控关联小,尽量做到切换时不重启重启工作量最小,只需要命令行和热备份模块参与,系统的工作量最小,只需要命令行和热备份模块参与,系统的延续性不够,我们称为冷备份延续性不够,我们称为冷备份系统的两个主控之间进行配置同步和简单的状态同步。系统的两个主控之间进行配置同步和简单的状态同步。模块产生的动作被同步到另一块上同样执行一遍模块产生的动作被同步到另一块上同样执行一遍系统的延续性比较好,基本上是切换的检测时间,业务系统的
28、延续性比较好,基本上是切换的检测时间,业务板应该要做到切换时不重启板应该要做到切换时不重启协议栈四层以下的模块容易做到状态同步,对模块的设协议栈四层以下的模块容易做到状态同步,对模块的设计有一定的要求,热备份模块只是提供通道功能,有一计有一定的要求,热备份模块只是提供通道功能,有一定的工作量,我们可以称为温备份定的工作量,我们可以称为温备份四层以上的模块完全同步几乎不可能,设计很复杂,没四层以上的模块完全同步几乎不可能,设计很复杂,没有必要考虑,因此没有完全的热备份有必要考虑,因此没有完全的热备份热备份实现方案(二)热备份实现方案(二)热插拔热插拔系统能够在运行时支持单板的插入拔出功能,并完成
29、该系统能够在运行时支持单板的插入拔出功能,并完成该板对应的配置恢复板对应的配置恢复热插拔有利于系统的升级热插拔有利于系统的升级系统的整体稳定性可以得到提高系统的整体稳定性可以得到提高热插拔的实现困难在于单板相关的配置恢复热插拔的实现困难在于单板相关的配置恢复热插拔实现方案(一)热插拔实现方案(一)系统的各个模块自身保留对应的单板控制实体和相关配系统的各个模块自身保留对应的单板控制实体和相关配置,但是对外不可见,单板插入的时候通知配置恢复。置,但是对外不可见,单板插入的时候通知配置恢复。系统启动的时候配置恢复困难系统启动的时候配置恢复困难关联的模块很多,并且对各个模块原有的流程冲击很大关联的模块
30、很多,并且对各个模块原有的流程冲击很大模块配置恢复的时候需要判断配置存在的前提环境是否模块配置恢复的时候需要判断配置存在的前提环境是否依旧存在依旧存在重要的参与模块:命令行和设备管理重要的参与模块:命令行和设备管理热插拔实现方案(二)热插拔实现方案(二)系统的各个模块在单板拔出时将配置重新系统的各个模块在单板拔出时将配置重新build,反馈回,反馈回命令行,然后删除对应的实体和配置命令行,然后删除对应的实体和配置命令行对每一单板提供一个配置命令缓冲区,当单板插命令行对每一单板提供一个配置命令缓冲区,当单板插入时使用该缓冲区的命令恢复配置入时使用该缓冲区的命令恢复配置各个模块对现有的流程冲击比较
31、少,命令行和设备管理各个模块对现有的流程冲击比较少,命令行和设备管理增加复杂度,设备管理需要提供虚设备的功能增加复杂度,设备管理需要提供虚设备的功能简单的内存写覆盖保护简单的内存写覆盖保护系统自身进行内存的管理和分配机制系统自身进行内存的管理和分配机制系统分配出去的内存前后进行空间预留,长度不超过系统分配出去的内存前后进行空间预留,长度不超过此空间预留的覆盖可以做到保护此空间预留的覆盖可以做到保护可以实现内存写覆盖告警可以实现内存写覆盖告警 内存回收内存回收系统自身管理内存系统自身管理内存对分配的内存打上时间标签,系统进行时间设定,超过对分配的内存打上时间标签,系统进行时间设定,超过此预设时间
32、的内存进行回收此预设时间的内存进行回收简单:系统回收前不进行确认简单:系统回收前不进行确认复杂:系统回收前根据复杂:系统回收前根据ModuleID进行确认,各个模块需进行确认,各个模块需要提供确认接口,报文占用的空间在模块间传递前需要要提供确认接口,报文占用的空间在模块间传递前需要修改修改ModuleID系统定期状态同步系统定期状态同步系统的运行中,不同模块间的相同状态可能产生不同步系统的运行中,不同模块间的相同状态可能产生不同步分布式系统中的主控板和业务板之间分布式系统中的主控板和业务板之间端口的端口的UPDOWN状态状态各个硬件表与各个硬件表与Shadow表之间表之间两个主控板之间两个主控
33、板之间定期同步可以避免不同步加剧定期同步可以避免不同步加剧异常攻击保护异常攻击保护系统对可能产生大流量数据和控制消息的地方都需要考系统对可能产生大流量数据和控制消息的地方都需要考虑强壮性虑强壮性 半连接攻击半连接攻击 特定报文流量攻击特定报文流量攻击 ARP扫描攻击扫描攻击 DOS攻击攻击考虑方法:考虑方法:队列优先级,流控队列优先级,流控 关中断关中断 任务优先级调整任务优先级调整 资源限制资源限制 屏蔽不需要处理的报文:屏蔽不需要处理的报文:IPX,未知单播,未知单播多队列设计多队列设计针对消息优先级和报文优先级设置多个队列,避免丢失针对消息优先级和报文优先级设置多个队列,避免丢失最重要的
34、信息最重要的信息系统内部产生的消息都需要可控,平滑系统内部产生的消息都需要可控,平滑SNMP可能产生大规模的查询消息,可能产生大规模的查询消息,SNMP必须将消息串必须将消息串行化,并控制每秒的消息处理条数行化,并控制每秒的消息处理条数定时器的消息一定不能丢失,定时器消息一定要精简定时器的消息一定不能丢失,定时器消息一定要精简消息队列大小一定要估算好,消息队列的冗余是允许的消息队列大小一定要估算好,消息队列的冗余是允许的宏宏宏尤其是常量宏的使用将有助于减少环境变量改变带来宏尤其是常量宏的使用将有助于减少环境变量改变带来的错误,并且可以增加模块的适应性的错误,并且可以增加模块的适应性系统异常跟踪
35、调试手段系统异常跟踪调试手段越丰富越好越丰富越好DUMPASSERTSyslog信息信息系统轨迹跟踪系统轨迹跟踪系统例外信息保存系统例外信息保存堆栈反向查找堆栈反向查找Debug信息信息MMUCPU占用率占用率集成集成Shell系统轨迹跟踪系统轨迹跟踪任务切换轨迹任务切换轨迹消息转发轨迹消息转发轨迹信号量的使用轨迹信号量的使用轨迹内存使用轨迹内存使用轨迹Debug信息信息每一个模块都必须产生每一个模块都必须产生Debug信息信息 状态迁移状态迁移 报文接收和处理转发报文接收和处理转发 异常处理异常处理信息过多,需要提供信息过多,需要提供 字符串过滤功能字符串过滤功能 端口级的端口级的Debug
36、操作硬件操作硬件对硬件的操作尽可能得少,如果存在软件表就不要去读对硬件的操作尽可能得少,如果存在软件表就不要去读硬件表硬件表对芯片的响应尽可能快对芯片的响应尽可能快对可能造成芯片死锁的情况要严格避免对可能造成芯片死锁的情况要严格避免芯片控制表的维护芯片控制表的维护尽可能做到尽可能做到Shadow表和硬件表的同步,不同步需要评估表和硬件表的同步,不同步需要评估影响影响表项要做到自恢复表项要做到自恢复某些地方可能需要增加复杂度,提高处理智能:路由表某些地方可能需要增加复杂度,提高处理智能:路由表其他其他系统初始化系统初始化命令风格统一和输出正确的信息命令风格统一和输出正确的信息编程规范编程规范兼容
37、与扩展兼容与扩展静态数组静态数组RFC系统初始化系统初始化各个模块必须进行使用函数初始化所有的全局变量各个模块必须进行使用函数初始化所有的全局变量与初始化相关的流程必须提高效率与初始化相关的流程必须提高效率异常启动时不要输出启动信息异常启动时不要输出启动信息完成配置恢复完成配置恢复硬件硬件Enable操作必须在启动的最后一项进行操作必须在启动的最后一项进行命令风格统一和输出正确的信息命令风格统一和输出正确的信息产品系列的命令统一可以提高产品形象产品系列的命令统一可以提高产品形象 命令统一命令统一 命令注解统一命令注解统一输出的信息要检查单词和语法的正确性输出的信息要检查单词和语法的正确性平台化
38、平台化多交流多交流定期检查定期检查编程规范编程规范好的编程风格可以减少低级错误的发生,越难查的问题好的编程风格可以减少低级错误的发生,越难查的问题产生问题的原因越简单产生问题的原因越简单强调:强调:1.指针只有在初始化后才可以使用指针只有在初始化后才可以使用2.申请空间后必须判断申请是否成功申请空间后必须判断申请是否成功3.如果一个指针需要循环使用,那么它在使用如果一个指针需要循环使用,那么它在使用Free函数函数后必须置后必须置NULL4.局部指针申请的空间在退出函数前要释放局部指针申请的空间在退出函数前要释放5.变量用于做数组的下标前必须保证变量值在下标范围变量用于做数组的下标前必须保证变
39、量值在下标范围内内兼容与扩展兼容与扩展系统的设计要考虑兼容以前在市场上应用的硬件,如果系统的设计要考虑兼容以前在市场上应用的硬件,如果确实不能兼容,必须明确切换时间,提供版本配套表确实不能兼容,必须明确切换时间,提供版本配套表对类似对类似Client和和Server这种模式的模块,重新设计的时候这种模式的模块,重新设计的时候一定要考虑向前兼容一定要考虑向前兼容 802.1x与客户端与客户端 H.link SNMP自定义的报文格式一定要考虑扩展:自定义的报文格式一定要考虑扩展:长度扩展长度扩展 操作码扩展:操作码扩展:2byte 基本类型基本类型 1byte 扩展类型扩展类型 1byte静态数组
40、静态数组对重要的,固定的数据结构,可以考虑使用静态数组对重要的,固定的数据结构,可以考虑使用静态数组VLANPort设备管理的实体设备管理的实体硬件硬件Shadow表表RFCRFC非常松散,常用非常松散,常用should be、suggest,而极少,而极少Must be建议可省的一定有人省,我们不能对可省项严格检查建议可省的一定有人省,我们不能对可省项严格检查建议可以这么做的一定有人做,我们一定要考虑兼容建议可以这么做的一定有人做,我们一定要考虑兼容对内容没什么建议的我们一定不要检查内容对内容没什么建议的我们一定不要检查内容标明可扩展的我们最好能够设计命令可配标明可扩展的我们最好能够设计命令可配对可有可无的返回信息一定要设置开发进行控制对可有可无的返回信息一定要设置开发进行控制RFC至少要看三遍:编码前,自测时,联调时至少要看三遍:编码前,自测时,联调时