如果一个软件转到地址0x1500并在那里设置值6,然后另一个软件转到同一地址并读取它会发生什么情况,将读取6?会不会像那样?操作系统级别和处理器级别的机制是什么?
答案 0 :(得分:2)
这取决于......
取决于
现在这里有一些组合及其结果
----------------------------------------------------------------------
PROCESSOR MODE PROCESS MODE ADDRESS TYPE PRIVILEGE OUTCOME
======================================================================
Real Kernel -- -- r/w
Protected Kernel shared ok r/w
Protected user shared ok r/w
Protected user private -- r/w with diff result
Protected Kernel shared no error
Protected user shared no error
....
======================================================================
注意:在实模式下,您可以随时互相交谈。在保护模式下,它取决于。一些(旧)处理器不支持保护模式(8051/8086等)。一些新处理器可能处于两种模式之一 - 真实或受保护。在保护模式下,如果操作系统允许,您可以进行通话。如果没有,你会收到错误。保护模式可以是分页的或非分页的。分页模式支持私有地址(具有相同的值),非分页模式不支持。两个差异。进程可以在其私有地址中读/写相同的位置但它们可以获得差异。值。
你可以看到,它真的很复杂。
同时强> 普通软件在protected + usermode + private memory中工作。因此,两个diff软件都可以在地址0x1500处执行r / w,但两者都具有独立的值。该软件所写的是它将会阅读的内容。
答案 1 :(得分:1)
在早期的操作系统(例如Windows 95)中,默认情况下这是可能的。这是非常有问题的。
Chips Challenge是一款适用于Windows 95的游戏,它有一个错误 - 如果你同时收集了一个密钥而死在同一个磁贴/步骤上,它的逻辑会出错并且会写入内存中的错误位置。由于每个程序共享相同的内存空间,它现在可以写入另一个程序正在使用的内存 - 导致其他程序崩溃并可能使操作系统不稳定并需要重新启动。
在现代操作系统中,每个程序现在都有自己的虚拟内存空间 - 每个程序认为内存的布局,实际上是由CPU和OS一起生成的虚构内容,这样所有内存的读写操作,如果它们是在界限范围内完成的,被拦截和阻止,并且程序正在编写和读取的内存中的实际位置是程序未知的(这也允许内存从RAM中“分页”到硬盘上,并且当下次检测到需要时,将其分页回到其他位置。