Windows 内核是不是有 read-on-write fork() 指令?
Posted
技术标签:
【中文标题】Windows 内核是不是有 read-on-write fork() 指令?【英文标题】:Does the Windows Kernel have a read-on-write fork() instruction?Windows 内核是否有 read-on-write fork() 指令? 【发布时间】:2013-04-27 09:03:26 【问题描述】:由于 POSIX.1 合规性是 Windows 的强制性目标,因此 操作系统旨在确保所需的基本系统 存在支持以允许实施 POSIX.1 子系统(例如 fork 函数,它在 Windows 执行程序,以及对 Windows 中硬文件链接的支持 文件系统)。
这个 fork 函数是写时复制吗?如果是这样,它是否仍然存在于最新版本的 Windows 中?如果是这样,它是否也可以调用 Win32 应用程序(尽管是未记录的 API)?
【问题讨论】:
【参考方案1】:根据 Windows Internals 的记忆,fork 是一种写时复制的实现。根据 Windows 内存管理器其余部分的工作方式,如果它是其他任何东西,那将是不寻常且令人惊讶的。
我似乎还记得实现 fork 的方式是将所有内存分配放在部分对象中,以便可以通过写入时复制设置跨进程复制部分。
不幸的是,这意味着您可能无法在非 posix 子系统进程中使用它,因为您需要仔细设置地址空间以仅包含部分。标准 Win32 进程不这样做。
另外,如果你要支持 fork(),每个人都需要支持它——从内核开始。对于一个可能会惊讶于 fork()-ed 的系统示例,请考虑窗口系统。在那种情况下它甚至会做什么? (我假设 X11 对此有答案,但我不知道它是什么)。由于在 Windows 上进行 fork() 处理将是一件非常不寻常的事情,因此如果您要对标准 Win32 进程执行此操作,我希望您的进程会完全无聊。
【讨论】:
以上是关于Windows 内核是不是有 read-on-write fork() 指令?的主要内容,如果未能解决你的问题,请参考以下文章