嵌入式系统设计师经常认为他们必须在安全性、可靠性和产品上市时间之间进行艰难的平衡。大多数设计师将上市时间定在第一位,“足够好的”可靠性放在第二位,之后才考虑安全性问题。
但世界处于不断变化之中。首先,安全性已经成为所有具有网络连接性能设备的必备条件,因此将其列为第三的位置不再能满足要求。其次,微处理器、操作系统和开发工具的不断进步使得更高的可靠性设计成为可能,也为产品的安全性和更快上市打下了坚实的基础。
当然要实现这个目标的前提是选择正确的架构,该架构包括处理器、操作系统和软件部分在内,并在一开始就把高可靠性作为设计目标。一般产品可靠性指标可以采用传统的架构和开发技术“在测试中达到”,但高可靠性的设计必须从一开始就加以考虑。
任何理智的工程师都会采用模块化的设计方式,将应用系统划分成多个软件模块,并通过定义完善的接口来控制这些模块之间的互操作。但提供最高级别的可靠性需要采取更多的措施,除了模块化外,还得具有划分、隔离和分离的能力。要想获得最高等级的可靠性,你需要将模块放进相互间隔离的存储器区域。然后需要使用处理器的存储器管理硬件以及合适的操作系统,来控制主机资源的通信和使用,并加强模块的分离性。
令人称奇的是,硬件分离可以使复杂产品更快地上市。
应该
模块化(这点很显然),然后分割设计,使每个模块只执行单一的功能且与所有其它模块隔离开来。每个模块还可以被看门狗进程(另外一个模块)重新启动,如果该模块发生了故障,那么相应的看门狗就会重启这个模块。这样设计的系统肯定具有更高的可靠性。换句话说,用更少的工作量就能满足系统可靠性要求。
保持模块的简单化。复杂会导致脆弱性(涉及安全问题)和不可重复的行为(涉及开发和可靠性)。不同种类、多内核设计将增加系统的复杂性。应该确保你已在单个处理器中得到所需的处理能力,避免那些复杂设计。
确保你正在使用的处理器和操作系统具有不可或缺的存储器管理功能。没有存储器保护就想建立非凡、可靠和安全的产品是不可能的。存储器保护帮助你对系统进行分割,并实现“深度防御”,从而保证系统某部分的弱点不会级联起来影响其它部分。
|
置所有东西于内核之外。内核是唯一一个系统中其它部分都要依赖的部件,因此它必须异常稳固。在内核空间运行任何对象只会降低可靠性,并带来安全性问题。
选择能够符合公认的安全和可靠性标准的内核架构。任何人都可以声称拥有可靠安全的操作系统,但很少有人独立地验证过他们声明的内容。在安全领域,需要选择一个基于由国家安全机构开发的独立内核保护机制的架构。
使用强制执行高安全编码标准的工具。Misra C是汽车工业软件可靠性协会(MISRA)为汽车工业开发的一个安全的C子集,其中许多代码非常可靠和安全。因此可在内部使用Misra标准,并选择用来强制执行这些标准的工具。
不应该
低估可靠性的价值。可靠性不仅能使产品更受欢迎,更有利润,还能有效减少开发难题。
在产品功能完善后才开始测试和修复缺陷。你的目标应该是:当产品功能完善时,你就已经能交货了。只有在设计一开始就考虑了可靠性(使用可靠性高的内核),并在开发过程中使用存储器漏洞检测、实时错误检查以及硬件保护措施,尽早发现缺陷来保持内核的可靠性,才能使你的产品更快地上市。如果工程师在没有缺陷的产品中增加一个缺陷(缺陷是工程师增加进去的,而不是自然产生的),这时候你要能够快速找到此缺陷,并立即完成修复。
认为你的网络产品不会成为攻击目标。该产品可能不包含有价值的数据,但只要把它放到网上去,它就可能泄漏产品以外的信息。随着产品的逐渐成熟,它所拥有的信息可能就会值得攻击。
低估入侵技术。要知道入侵技术也在突飞猛进。随着技术日趋先进,往日令人不感兴趣的目标(比如你的产品)也会变得值得一击。
认为可以日后再为安全或可靠性重新设计架构。当然,安全性非常高的系统(例如飞机)需要采用面向可靠性和安全性的架构,因而需要严格苛刻和代价高昂的开发过程。但任何功能很强的产品,包括消费类和工业控制类产品都会从相同的底层技术中获益,尽管其开发过程要更加经济。
上一篇:创新之路如何走?美国发明家指点迷津
下一篇:确保嵌入式系统的网络安全性
推荐阅读最新更新时间:2024-05-02 20:21