c - 不带内存保护单元的 CPU 上 IEC 61508 软件元素的独立性

标签 c standards safety-critical

是否有可能通过 IEC 61508 第 3 部分附录 F 证明软件元素的独立性,以便安全相关组件可以被评为 SIL 2 并且非安全组件(例如 UI、通信)可以被保留未评级,但总体结果仍被评为 SIL 2?

我特别感兴趣的是当安全和非安全元素都在单个处理器上运行并且处理器实现任何形式的硬件内存保护时对此的看法。可以做各种各样的事情来确保软件元素不受干扰,例如确保数据完整性、数据传递受到严格控制和验证、任务调度是确定性的(非安全任务保证终止),以及等等。

严格应用这些技术是否足够?

最佳答案

如果 MCU 中存在任何安全相关固件,则其所有软件都是安全相关的。时期。

常识表明,代码中任何地方的任何错误都可能导致代码失控、堆栈溢出、越界访问、虚假中断等。更不用说与安全和非安全相关部分之间的接口(interface)相关的错误。

要在一个系统中争论独立性,在这个系统中您会认为软件的某些部分不太重要,您需要像多个内核在不同的内存区域执行代码这样的东西,而没有丝毫可能以任何方式相互影响.反过来,这将是一个奇怪且不必要的复杂设计。

通常的做法是为代码的每一部分设置相同的质量标准。这意味着如果您需要在一些未经验证的堆栈或第 3 方库中运行一些非关键代码,您可能应该考虑将其移至单独的物理芯片。使与安全相关的部件尽可能小和简单。

关于c - 不带内存保护单元的 CPU 上 IEC 61508 软件元素的独立性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60885378/

相关文章:

java - 在不更改 dll 的情况下限制 JNA 调用的资源利用率

c - C 中的 Malloc 内存消耗行为

无法处理连续的 SIGSEGV 信号

c - 使用 scanf_s 读取一个字符

c++ - 在 C++ 中绑定(bind)多个引用的临时对象的生命周期

c - 使用功能指针方法进行状态机设计的三选二投票

c - 出现错误时安全退出到特定状态

php 5.3 和 APC(发生了什么)?

c - 编译器是否允许消除无限循环?

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?