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() 指令?的主要内容,如果未能解决你的问题,请参考以下文章

Windows内核(驱动)编程中的线程问题

Windows 内核中可能的最大文件名长度

winxp win7内核是啥?

windows NT 内核

Windows内核调试器的WinDBG

Linux 内核和 Windows 内核有啥区别