作者 | h4cd

本文经授权转载自开源中国(ID:oschina2013)

微软研究人员发表论文称用于创建进程的 fork 系统调用方式已经很落后,并且对操作系统的研究与发展产生了极大的负面影响,需要淘汰,作者同时提出了替代方案。

相信每位开发者都对操作系统中的 fork() 有一定的了解,至少知道它是用来创建进程的。fork 系统调用方式在 20 世纪 70 年代被创造出来,它通常与 exec() 组合使用,非常简单却很强大,被认为是一种天才式的设计、Unix 的伟大思想,至今 50 余年一直作为 POSIX 操作系统的原语存在,同时几乎每个 Unix shell、主要 Web 和数据库服务器、Google Chrome、Redis 甚至 Node.js 都使用 fork。

然而微软系统研究实验室 Redmond 的研究人员 3 月份却发表了一篇论文,表示 fork 作为操作系统原语继续存在,阻碍了对操作系统的研究,“它是来自另一个时代的遗物,不适合现代系统,并且会带来一系列负面影响”,研究人员认为是时候将 fork 淘汰了。

fork 简单已成神话

论文中承认了 fork API 的优点,包括简单与缓解并发性,也肯定了 fork 在历史上的重要贡献,但更多地是列出了它在现代操作系统研究与发展中的弊端。

研究人员认为 fork 本身就存在许多问题,另一方面,fork 在操作系统的研究与发展上也起了限制作用,论文指出有明确的证据表明支持 fork 限制了 OS 体系结构的变化,并限制了操作系统适应硬件演进的能力。

乍一看可能会觉得 fork 很简单,而这也是它的一大特征,但是实际上,“这是一个具有欺骗性的神话”。

fork 的语义已经影响了每个创建进程状态的新 API 的设计,POSIX 规范现在列出了关于如何将父状态复制到子进度的 25 个特殊情况,包括文件锁定、定时器、异步 IO 操作与跟踪等。此外,许多系统调用标志控制 fork 关于内存映射(Linux madvise() 标记 MADV_DONTFORK/DOFORK/WIPEONFORK 等)、文件描述符(O_CLOEXEC、FD_CLOEXEC)和线程(pthread_atfork())的行为。任何重要的操作系统工具都必须通过 fork 记录其行为,并且用户模式库必须做好准备,以便随时 fork 它们的状态。fork 已经不再简单。

fork 不是线程安全的,Unix 进程支持线程,但 fork 创建的子进程只有一个线程(调用线程的副本),当一个线程在 fork 时,如果另一个线程此时进行内存分配并持有堆锁,任何在子进程中分配内存的尝试(从而获得相同的锁)都将立即发生死锁。

fork 很慢,fork 的性能一直是个问题,此前使用写时复制技术使其性能可接受,但是在今天,建立写时复制映射本身都成了一个性能问题,比如 Chrome 在 fork  时会经历了长达 100 毫秒的延迟,Node.js 应用在 exec 之前 fork 时,可以被阻塞几秒钟。fork+exec 与 spawn 的性能对比情况可以通过本文开头的图片直观看到。

fork 无法扩展,系统规模的设计首先要避免不必要的共享,但 fork 进程会与其父进程共享所有内容,由于 fork 复制了进程操作系统状态的各个方面,这样复制与引用计数成本会比较低,所以 fork 其实是趋向于将状态集中在单片内核中,这就使得难以实现一些新技术,比如用于安全性和可靠性的内核划分。

fork 与异构硬件不兼容,它将进程的抽象与包含它的硬件地址空间混为一谈。fork 将进程的定义限制为单个地址空间,并且是在某个核心上运行的单个线程。但现代硬件和在其上运行的程序并不是这样,硬件异构化越来越严重,使用有内核旁路 NIC 的 DPDK 或带有 GPU 的 OpenCL 的进程无法安全地 fork,因为操作系统无法复制 NIC/GPU 上的进程状态。这个问题至少已经困扰了 GPU 程序员十年,而随着未来的芯片上系统包含越来越多的状态加速器,情况只会变得更糟。

“GET THE FORK OUT OF MY OS!”

论文提出了替代 fork 的方案:包括一个高级 Spawn API 和一个低级类微内核 API 的组合。涉及到 posix_spawn()、vfork()、跨进程操作、clone()、改进写时复制内存等内容。

fork 的问题越来越严重,作者最后总结出必须做三件事来纠正这种情况,不仅要弃用 fork,还要改善替代方案,同时纠正我们关于 fork 的教学内容,不能再错误地宣扬 fork 的能力与设计水平。

  • 论文地址:https://www.microsoft.com/en-us/research/publication/a-fork-in-the-road/

  • 60s测试:你是否适合转型人工智能?

    https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

【End】

☞谁说国产操作系统没救了? | 人物志

☞Google+ 为什么会死?

☞华米 OV 一加“征服”印度?!

☞程序员 996 再上热搜,黑名单增至 84 家!

☞与云原生及开源大神们的第二次亲密接触 | 全议程重磅发布

☞V神玩起freestyle! 5位以太坊核心大咖在悉尼的演讲精华全在这了!| 直击EDCON

☞“重构”黑洞:26岁MIT研究生的新算法 | 人物志

☞程序员为什么都爱穿冲锋衣?(最全总结)

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

fork()成为负担,需要淘汰 | 极客头条相关推荐

  1. 微信键盘正式发布;马斯克就是否辞去推特董事发起投票;SHA-1 加密算法将被淘汰|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  2. 微信键盘正式发布;马斯克就是否辞去推特董事发起投票;SHA-1 加密算法将被淘汰|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  3. 首款搭载国产CPU的域名服务器发布;iPhone彻底淘汰Lightning接口?ChromeOS 75发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  4. 京东回应淘汰员工;阿里巴巴建江苏总部;5G 移动网被吐槽 | 极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 内 ...

  5. 京东末位淘汰 10% 高管 ;聊天宝惊现大 Bug:用户可提现百万;斗鱼回应“人去楼空” | 极客头条...

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 京 ...

  6. 百度下线搜索快照功能,内部人士:因技术升级导致功能淘汰;法国App开发者集体起诉苹果;Linux 5.19 发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  7. 周鸿祎谈程序员 35 岁就会被淘汰:越老越吃香;谷歌 AR 眼镜项目前光学工程师吐槽:开发团队都不想佩戴|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  8. 李彦宏:十年后不会写提示词或被淘汰;GitHub发布Copilot X,动动嘴就能生成代码;Vite 4.2 发布|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  9. 刘强东:京东将末位淘汰部分高管;马斯克要求推特程序员写周报,具体到代码行数;Stable Diffusion2.0发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

最新文章

  1. 我是如何阅读编程书的
  2. WinSock网络编程实用宝典(一)
  3. SAP UI5 应用开发教程的学习目录
  4. 1984. 学生分数的最小差值
  5. python安装matlab库_[python][matlab]在python36上安装matlab2015b引擎
  6. golang后端php前端,Golang如何接收前端的参数
  7. 谷歌中国 AI 中心要凉?李飞飞否认将离职
  8. linux 下搭建自己的 git 服务器以及配置多用户
  9. Java实战之管家婆记账系统(3)——数据库表
  10. python爬取百度迁徙数据_python爬虫-动态爬取百度迁徙
  11. advanced部署vsto到wps-兼容office和wps
  12. python怎么做相加两个变量_2组语法,1个函数,教你用Python做数据分析
  13. Android 扫描Scard卡所有的图片
  14. 自动排课系统V2.0基本完善了
  15. C语言 会员管理系统
  16. matlab演示平抛运动,几何画板动态演示平抛运动的规律
  17. Spring Boot学习案例开源项目
  18. Scoop包管理工具
  19. python 二维坐标多边形 计算多边形中心点,以及距该中心点最远的距离
  20. 学习Web前端到就业,掌握好这3点,事半功倍!

热门文章

  1. 力扣--189旋转数组(中等)
  2. 字符串分割 异常 泛型 练习
  3. 面向对象实现ATM功能
  4. python的合法名称_python 命名规范
  5. 记录——《C Primer Plus (第五版)》第八章编程练习第五题
  6. 2021-2025年中国制革机械行业市场供需与战略研究报告
  7. 2021年中国乙醛市场趋势报告、技术动态创新及2027年市场预测
  8. 2021级C语言大作业 - 涂鸦跳跃
  9. 2020级C语言大作业 - 火柴人打羽毛球
  10. 少年派的一生,树莓派的十年,Raspberry Pi上市十周年