每个操作系统都使用相同的模型来创建新流程。父母自己分叉,然后执行孩子。但为什么这个模型如此受欢迎?
在典型的fork + exec模型中,OS必须创建整个进程空间的副本(授予一些优化通过写时复制等完成),然后当exec完成时,新程序的代码和数据/ stack需要与元数据的其余部分一起设置。
现在,如果我可以直接调用操作系统并说系统调用exec_new(),那么它可以像上面那样做同样的事情,而不需要两个系统调用。所有者仍将是相同的UID。为什么不这样做? fork + exec模型给了我们什么?
答案 0 :(得分:0)
每个操作系统都使用相同的模型来创建新流程。父母自己分叉然后执行孩子。
这不正确。那是太监模式。我不知道其他任何以这种方式做事的操作系统。其他系统包括模拟太监的库函数,但这往往不是潜在的机制。
E.g。 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
大规模操作系统中的常见模型是命令解释程序存在于进程的受保护区域中。一个人在同一个过程中运行多个程序。这与太监的外壳形成对比,太监的外壳只是一个使用你描述的机制启动其他程序的程序。