1

由于 POSIX.1 合规性是 Windows 的强制性目标,因此操作系统旨在确保提供所需的基本系统支持,以允许实现 POSIX.1 子系统(例如 fork 函数,该函数在Windows 执行程序,以及对 Windows 文件系统中硬文件链接的支持)。

这个 fork 函数是写时复制吗?如果是这样,它是否仍然存在于最新版本的 Windows 中?如果是这样,它是否也可以调用 Win32 应用程序(尽管是未记录的 API)?

4

1 回答 1

4

根据 Windows Internals 的记忆,fork 是一种写时复制的实现。根据 Windows 内存管理器其余部分的工作方式,如果它是其他任何东西,那将是不寻常和令人惊讶的。

我似乎还记得实现 fork 的方式是将所有内存分配放在部分对象中,以便可以使用写入时复制设置跨进程复制这些部分。

不幸的是,这意味着您可能无法在非 posix 子系统进程中使用它,因为您需要仔细设置地址空间以仅包含部分。标准 Win32 进程不这样做。

此外,如果你要支持 fork(),每个人都需要支持它——从内核开始。对于可能会惊讶于 fork()-ed 的系统示例,请考虑窗口系统。在那种情况下它甚至会做什么?(我假设 X11 对此有答案,但我不知道它是什么)。由于在 Windows 上进行 fork()-ing 将是一件非常不寻常的事情,因此如果您要对标准 Win32 进程执行此操作,我希望您的进程会完全无聊。

于 2013-05-05T06:44:27.323 回答