Operating system 计算机如何防止程序相互干扰?

Operating system 计算机如何防止程序相互干扰?,operating-system,Operating System,例如,我在课堂上听说全局变量只是放在内存中的一个特定位置。如何防止两个程序对不同的变量意外使用相同的内存位置 另外,这两个程序的参数和局部变量是否使用相同的堆栈?如果是这样的话,怎样才能防止变量相互交错并扰乱索引 很奇怪。这是现代操作系统通过将每个进程加载到单独的虚拟地址空间来实现的。多个进程可能引用同一个进程,但操作系统在现代硬件的帮助下,会将每个进程映射到单独的物理地址,并确保一个进程无法访问分配给另一个进程的物理内存1。 1调试器是一个显著的例外:操作系统通常为调试器提供特殊的机制,以连

例如,我在课堂上听说全局变量只是放在内存中的一个特定位置。如何防止两个程序对不同的变量意外使用相同的内存位置

另外,这两个程序的参数和局部变量是否使用相同的堆栈?如果是这样的话,怎样才能防止变量相互交错并扰乱索引


很奇怪。

这是现代操作系统通过将每个进程加载到单独的虚拟地址空间来实现的。多个进程可能引用同一个进程,但操作系统在现代硬件的帮助下,会将每个进程映射到单独的物理地址,并确保一个进程无法访问分配给另一个进程的物理内存1。

1调试器是一个显著的例外:操作系统通常为调试器提供特殊的机制,以连接到其他进程并检查其内存空间。

大多数现代处理器都有内存管理单元(MMU)为操作系统提供为每个进程创建受保护的单独内存段的能力,包括为每个进程创建单独的堆栈。在MMU的帮助下,处理器可以限制每个进程只修改/访问分配给它的内存。这可以防止一个进程写入另一个进程的内存空间

大多数现代操作系统将使用MMU的功能为每个进程提供保护

以下是一些有用的链接:


对您的问题的简短回答是,操作系统处理这些问题。它们是非常严重的问题,操作系统作业的很大一部分是将所有内容保存在单独的空间中。操作系统运行跟踪所有其他程序的程序,并确保每个程序都使用空格。这也使堆栈保持分离。每个程序都运行操作系统分配的自己的堆栈。操作系统如何进行分配实际上是一项复杂的任务。

如果我们谈论的是MS-DOS,答案是什么都没有!阅读:阅读我建议你阅读虚拟地址空间。一些操作系统需要一定程度的提升来调试部分或所有程序的事实揭示了这一点——如果操作系统坚持什么,那么显然操作系统有发言权。另一个例外是共享内存,在共享内存中,程序使用一些映射到虚拟内存空间的内存进行通信,尽管这个概念揭示了在同一内存空间中不是正常的。