2

WM 操作系统是否相互保护进程内存?一个写得不好的应用程序是否会因为错误地写入第一个内存而导致其他应用程序崩溃?

4

3 回答 3

3

Windows Mobile,至少在当前的所有版本中,都是基于 Windows CE 5.0 构建的,因此使用CE 5.0 的内存模型(与 CE 3.0 中的内存模型相同)。操作系统实际上并没有在保护进程内存方面做很多事情,但它通常足以防止进程相互干扰。不过,这并不难。

CE 进程在其中有 32 个“插槽”中运行。当前运行的进程被交换到插槽 0,并且它的地址重新设置为零(因此运行进程中的所有内存实际上都有 2 个地址,插槽 0 地址和它是非零插槽地址)。这些地址是受保护的(尽管有一个简单的 API 调用来跨越边界)。这意味着指针损坏等不会踩到其他应用程序,但如果你愿意,你仍然可以。

CE也有共享内存的概念。所有进程都可以访问该区域,并且 100% 不受保护。如果您的应用程序正在使用共享内存(并且内存管理器可以在没有您特别询问的情况下为您提供共享地址,具体取决于您的分配及其大小)。如果您有共享内存,那么是的,任何进程都可以访问该数据,包括破坏它,并且您在任何一个进程中都不会收到错误或警告。

于 2009-02-11T14:54:32.287 回答
1

WM 操作系统是否相互保护进程内存?

是的。

一个写得不好的应用程序是否会因为错误地写入第一个内存而导致其他应用程序崩溃?

否(但它可能会做其他事情,例如用完所有“磁盘”空间)。

即使您是设备驱动程序,要获得写入由不同进程拥有的内存的权限,您也必须显式调用一个 API。

于 2009-02-11T13:43:26.157 回答
1

虽然 ChrisW 的回答在技术上是正确的,但我对 Windows 移动的体验是,从应用程序崩溃整个设备比在桌面上崩溃要容易得多。我可以猜到出现这种情况的几个原因;

  • 操作系统通常比 Windows 桌面更多地进行 OEM,即制造商特定的低级代码的数量可能非常高,这导致制造商特定的错误可能导致严重的崩溃。在许多设备上,每个月左右都会看到一个新的固件版本,这些版本是对此类错误的修复。

  • 资源更稀缺,耗尽所有可用资源的应用程序很容易导致崩溃。

  • 保护机制和架构差异很大。我目前使用的设备是基于 SH4 的,而你主要看到的是 ARM、X86 和奇怪的 MIP CPU。

于 2009-02-11T14:20:10.827 回答