假设两个独立的应用程序 A 和 B 正在运行。通常,A 中的内存损坏会导致 A 崩溃并出现段错误,而应用程序 B 不会受到影响。
但是,在 A 继续执行的情况下,A 中的内存损坏(有意或无意)是否会导致 B 中出现段错误?
我的操作系统是 Linux。
答案1
一般答案:
在没有“内存保护”的操作系统中......
(通常需要“MMU”,即内存管理单元,[硬件功能])
...一个应用程序/子进程/任务可能会通过“踩踏”(更改)第二个任务的代码或数据, 导致另一个任务失败或行为异常。
在具有内存保护的操作系统(例如 Linux)中,这种情况不应该发生。
但由于保护实施中的“漏洞”或不完善,在实践中仍有可能发生。
甚至可能是由硬件损坏(RAM、ROM、MMU、CPU、IRQ 等)引起的 - 这些硬件可能本质上非常间歇性、依赖于温度或任何类似的东西[1]。
[1] 例如,为操作系统提供“功能”的 IC(例如,仅用于特定任务的 IRQ 源)可能会损坏 - 因此仅在实际使用该功能时才会引起麻烦。