【问题标题】:Why is fork + exec used to create new processes in an OS?为什么 fork + exec 用于在操作系统中创建新进程?
【发布时间】:2017-05-19 04:58:45
【问题描述】:

每个操作系统都使用相同的模型来创建新进程。父母分叉自己,然后执行孩子。但是为什么这种模式如此受欢迎呢?

在典型的 fork+exec 模型中,操作系统必须创建整个进程空间的副本(允许通过写时复制等进行一些优化),然后在 exec 完成时创建新程序的代码和数据/stack 需要与其他元数据一起设置。

现在,如果我可以直接调用操作系统并说有一个系统调用 exec_new() 那么它可以执行与上面相同的操作,而无需两个系统调用。所有者仍将是相同的 UID。为什么不这样做? fork+exec 模型给我们带来了什么?

【问题讨论】:

    标签: process operating-system fork


    【解决方案1】:

    每个操作系统都使用相同的模型来创建新进程。父级分叉自己,然后执行子级。

    这是不正确的。那就是太监模型。我不知道有任何其他操作系统以这种方式做事。其他系统包括模拟太监的库函数,但这往往不是底层机制。

    例如 https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx

    http://h41379.www4.hpe.com/doc/83final/4527/4527pro_025.html

    大型操作系统中的一个常见模型是命令解释器存在于进程的受保护区域中。一个人在同一个进程中运行多个程序。这与 eunuchs shell 不同,后者只是一个使用您描述的机制启动其他程序的程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-09
      • 2016-10-03
      • 1970-01-01
      • 2017-11-18
      • 2018-06-23
      • 2016-01-01
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多