Sun*_*nny 7 fork createprocess
对于Linux和WinXP,forking()和CreateProcess(带有所有必需的参数)分别是同一回事吗?
如果它们不同,那么有人可以用两种情况下的不同来解释这种差异吗?
谢谢
CreateProcess 执行以下步骤:
\n\nUnix 的 fork 采取以下步骤:
\n\n它创建父进程的完整副本,并且父进程不会为子进程设置运行时环境,因为父进程信任其自己的设置。子进程是父进程的完整副本,除了其进程 ID(fork 返回的内容)之外。分叉进程继续运行与其父进程相同的程序,直到它执行显式 exec。当子进程调用execwhich时,新的可执行映像进入内存并运行。
\n\n制作完整副本的效率如何?写时复制。它实际上只复制虚拟内存映射。段表中的所有段都是只读的。如果父级或子级编辑段中的数据,则会引发异常,并且内核会创建该异常的完整内存副本。这个答案很好地解释了这一点
\n\n父级和子级之间共享资源有几个好处:\n - 直观上,资源管理:维护进程状态所需的内存更少\n - 共享缓存资源意味着在数据不被覆盖时数据具有更大的时间局部性,这可以提高性能,因为从较大的缓存/磁盘中检索数据非常耗时。
\n\n共享资源的缺点:\n - 当写入很常见时,它会将数据置于对其他进程无效的状态,这会导致一致性缺失,如果子进程在单独的核心上运行,则代价高昂,因为更改将必须传播到 L3 缓存。
\n\n但一般来说,程序读取的次数比写入多得多,通常子程序/父程序只需要对其堆栈进行写入,而这只是其程序块的一小部分。
\n\n另外,Unix fork 是不同的,因为它返回两次,一次在父进程中(其子进程的进程 ID),一次在子进程中(0,恭喜你是一个新的婴儿进程),这就是我们在代码中区分的方式:我们是孩子或父母。
\n\nUnix Exec 执行以下操作:
\n\n家长可以选择等待孩子完成。当子进程完成时,当调用 exit 时,即通知父进程的等待。
\n他们在不同的系统上做不同的事情。CreateProcess是仅Windows功能,而fork仅在POSIX(例如Linux和Mac OSX)系统上。
该fork系统调用创建一个新的进程,并继续在父,并从其中的节骨眼儿两个执行fork函数被调用。CreateProcess创建一个新进程并从磁盘加载程序。唯一的相似之处是最终结果是创建了一个新过程。
欲了解更多信息,请阅读各手册页CreateProcess和fork。
| 归档时间: |
|
| 查看次数: |
6632 次 |
| 最近记录: |